为SNS主题配置外部AWS账户访问权限:两种Principal写法是否等效?
SNS主题策略中两种Principal写法的等效性确认
结论:这两种Principal写法完全等效
你通过CDK生成的策略中,Principal使用了账户根用户ARN:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "0", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789:root" }, "Action": [ "sns:Subscribe", "sns:Publish" ], "Resource": "arn:aws:sns:eu-west-1:987654321:NotificationSNS" } ] }
而AWS文档示例中直接使用了账户ID:
{ "Id": "Policy_ID", "Statement": [ { "Sid": "AWSConfigSNSPolicy", "Action": [ "sns:Publish" ], "Effect": "Allow", "Resource": "arn:aws:sns:region:account-id:myTopic", "Principal": { "AWS": [ "account-id1", "account-id2", "account-id3" ] } } ] }
两者的权限效果没有差异:
- AWS在解析权限策略时,会将纯账户ID自动映射为对应账户的根用户ARN(
arn:aws:iam::[account-id]:root)。 - 两种写法都表示授予指定AWS账户下的所有IAM实体(包括IAM用户、角色、服务角色等)访问该SNS主题的权限。需要注意的是,这些实体自身仍需具备对应的IAM权限策略,允许他们执行
sns:Subscribe或sns:Publish操作,才能实际访问主题。
内容的提问来源于stack exchange,提问作者Mooncrater
相关产品推荐
相关产品推荐

