AWS Cross Account SNS Публикация
У нас есть два счета 111111111111 и 222222222222.
Требование - учетная запись 111111111111 будет ежедневно создавать моментальный снимок RDS. После создания снимка мы хотим, чтобы учетная запись 111111111111 была опубликована в теме SNS, созданной в учетной записи 222222222222. Как только учетная запись 222222222222 получает уведомление, она запускает функцию Lambda.
Я прикрепил следующую политику к теме, созданной в учетной записи 222222222222
"Sid":"RestoreRDSEng_topic_publish",
"Effect":"Allow",
"Principal":{
"AWS":"111111111111"
},
"Action":"sns:Publish",
"Resource":"arn:aws:sns:us-east-1:222222222222:RestoreRDSEng",
"Condition":{
"StringEquals":{
"AWS:SourceAccount":"222222222222"
},
}
}
Я получаю следующую ошибку, когда учетная запись 111111111111 пытается опубликовать на 222222222222
* "message": "AuthorizationError: Пользователь: arn: aws: sts:: ************ Предполагаемая роль /tf-rds_eventhandler/tf-rds_eventhandler не авторизован для выполнения: SNS: Опубликовать в ресурс: arn:aws:sns:us-east-1:xxxxxxxxxxxx:RestoreRDSEng\n\tstatus код: 403, идентификатор запроса: 098f4647-c9ad-51fe-9bc3-17b45deef60e"*
Вопросы:
Что-то не так в этом подходе?
Должен ли я создать роль в учетной записи 222222222222 с доверенным доступом к 111111111111?
Любые другие предложения будут оценены.
3 ответа
Это очень выполнимо и требует всего 2 части.
Во-первых, тема SNS, получающая сообщения (учетная запись 2222-2222-2222), должна иметь политику, разрешающую «sns:Publish» из другой учетной записи (1111-1111-1111).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:root"
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-1:222222222222:RestoreRDSEng"
}
]
}
Во-вторых, какую бы роль вы ни использовали в 1111-1111-1111 для публикации, у нее должна быть политика, разрешающая «sns:Publish» по желаемой теме. Это тот случай, когда я обычно нормально использую*
ресурс, но вы также можете ограничить его ARN темы в другой учетной записи.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sns:Publish",
"Effect": "Allow",
"Resource": "*",
"Sid": ""
}
]
}
Должен быть:
{
"Sid": "lambda-access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:root"
},
"Action": [
"SNS:Publish"
],
"Resource": "arn:aws:sns:us-east-1:222222222222:RestoreRDSEng"
}
В Principal
должна быть службой или ролью в учетной записи 11111... которую вы хотите выполнить по публикации в теме SNS. Например:
"Principal": {
"Service": "cloudtrail.amazonaws.com"
}