Настройте AWS Config для отправки в одну глобальную тему SNS
Я использую CloudCheckr.com и следую рекомендациям, чтобы включить AWS Config в регионах, где в настоящее время у нас нет активности.
В идеале я хочу настроить каждый регион на использование одного и того же сегмента S3 и темы SNS из региона по умолчанию (поскольку он уже настроен), но я получаю такие ошибки, как:
Last AWS Error Message: User: arn:aws:sts::XXXXXXX:assumed-role/config-role/AWSConfig-Delivery is not authorized to perform: SNS:Publish on resource: arn:aws:sns:eu-west-1:XXXXXXX:assumed:config-topic (Service: AmazonSNS; Status Code: 403; Error Code: AuthorizationError; ...
Я попытался настроить пользователя IAM с ролью конфигурации с помощью следующей политики:
{
"Version": "2012-10-17",
"Statement": [{
"Action": [
"appstream:Get*",
"autoscaling:Describe*",
"cloudformation:DescribeStacks",
"cloudformation:DescribeStackEvents",
"cloudformation:DescribeStackResource",
"cloudformation:DescribeStackResources",
"cloudformation:GetTemplate",
"cloudformation:List*",
"cloudfront:Get*",
"cloudfront:List*",
"cloudtrail:DescribeTrails",
"cloudtrail:GetTrailStatus",
"cloudwatch:Describe*",
"cloudwatch:Get*",
"cloudwatch:List*",
"config:Put*",
"directconnect:Describe*",
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:DescribeTable",
"dynamodb:ListTables",
"ec2:Describe*",
"elasticache:Describe*",
"elasticbeanstalk:Check*",
"elasticbeanstalk:Describe*",
"elasticbeanstalk:List*",
"elasticbeanstalk:RequestEnvironmentInfo",
"elasticbeanstalk:RetrieveEnvironmentInfo",
"elasticloadbalancing:Describe*",
"elastictranscoder:Read*",
"elastictranscoder:List*",
"iam:List*",
"iam:Get*",
"kinesis:Describe*",
"kinesis:Get*",
"kinesis:List*",
"opsworks:Describe*",
"opsworks:Get*",
"route53:Get*",
"route53:List*",
"redshift:Describe*",
"redshift:ViewQueriesInConsole",
"rds:Describe*",
"rds:ListTagsForResource",
"s3:Get*",
"s3:List*",
"sdb:GetAttributes",
"sdb:List*",
"sdb:Select*",
"ses:Get*",
"ses:List*",
"sns:Get*",
"sns:List*",
"sqs:GetQueueAttributes",
"sqs:ListQueues",
"sqs:ReceiveMessage",
"storagegateway:List*",
"storagegateway:Describe*",
"trustedadvisor:Describe*"
],
"Effect": "Allow",
"Resource": "*"
}, {
"Effect": "Allow",
"Action": [
"s3:PutObject*"
],
"Resource": [
"arn:aws:s3:::config-bucket-XXXXXXXXXXXX/AWSLogs/XXXXXXXXXXXX/*"
],
"Condition": {
"StringLike": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}, {
"Effect": "Allow",
"Action": [
"s3:GetBucketAcl"
],
"Resource": "arn:aws:s3:::config-bucket-XXXXXXXXXXXX"
}, {
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-1:XXXXXXXXXXXX:config-topic"
}]
}
но это, похоже, не дает правильного разрешения. Я продолжаю получать:
The provided SNS topic ARN is invalid.
хотя я уверен, что это правильный ARN для существующей темы.
Вот разрешения для этого SNS ARN:
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SNS:ListSubscriptionsByTopic",
"SNS:Subscribe",
"SNS:DeleteTopic",
"SNS:GetTopicAttributes",
"SNS:Publish",
"SNS:RemovePermission",
"SNS:AddPermission",
"SNS:Receive",
"SNS:SetTopicAttributes"
],
"Resource": "arn:aws:sns:us-east-1:XXXXXXXXXXXX:config-topic",
"Condition": {
"StringEquals": {
"AWS:SourceOwner": "XXXXXXXXXXXX"
}
}
},
{
"Sid": "__console_pub_0",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::XXXXXXXXXXXX:root"
]
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:us-east-1:XXXXXXXXXXXX:config-topic"
},
{
"Sid": "__console_sub_0",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXXXXX:root"
},
"Action": [
"SNS:Subscribe",
"SNS:Receive"
],
"Resource": "arn:aws:sns:us-east-1:XXXXXXXXXXXX:config-topic"
}
]
}
Кто-нибудь делал это раньше?
Еще лучше, у кого-нибудь есть сценарий, который, возможно, устанавливает регион из кли?
2 ответа
Технически вы можете публиковать темы SNS по регионам, но я бы создал тему для каждого региона, в котором вы настраиваете службу (например, используйте eu-west-1 для SNS в политике IAM для ЕС на западе), а затем направил все эти сообщения из разных в одна очередь SQS в домашнем регионе по вашему выбору.
Если вы все еще хотите продолжить путь, по которому уже идете, вам нужно убедиться, что ваша роль IAM имеет правильный регион в разрешениях публикации SNS (должно быть eu-west-1 вместо us-east-1
Ситуация могла измениться с тех пор, как был написан первоначальный ответ на этот вопрос, так как теперь ошибка, возвращаемая API-интерфейсом AWS при установке темы SNS в другом регионе:
InvalidSNSTopicARNException: The sns topic arn 'arn:aws:sns:ap-southeast-2:...........' is not valid.Region provided in sns arn: ap-southeast-2, does not match the expected region: us-east-1.
Это означает, что служба настройки AWS не поддерживает отправку в тему SNS в другом регионе.