AWS SNS如何为多个SourceOwner账号配置差异化访问策略
解答
这个跨账号差异化权限需求完全可以实现,核心调整思路是将原主题策略中单条统一授权的语句拆分为两条独立的授权规则,分别针对主账号、外部合作账号配置对应权限范围即可,无需额外接入其他服务。
实现逻辑
AWS SNS主题策略和IAM策略一致,同一个策略文档下支持配置多条独立的授权语句(Statement),每条语句可单独指定授权主体、允许的操作、生效条件,多条语句的权限按叠加逻辑生效,刚好匹配分账号配置不同操作权限的需求。
你当前的配置是将两个账号放在同一条语句的生效条件中,绑定了完全相同的操作列表,因此无法做权限拆分。
修正后的Serverless框架配置
直接替换配置文件中原有WebhookOutSNSPolicy模块内容即可:
################################################ # Policy for SNS Topic WebhookOutNotification # ################################################ WebhookOutSNSPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Version: '2012-10-17' Statement: # 主账号111111111111:授予全部SNS操作权限 - Effect: Allow Principal: AWS: '*' Action: - sns:GetTopicAttributes - sns:SetTopicAttributes - sns:AddPermission - sns:RemovePermission - sns:DeleteTopic - sns:Subscribe - sns:ListSubscriptionsByTopic - sns:Publish - sns:Receive Condition: StringEquals: aws:SourceOwner: 111111111111 Resource: !Ref WebhookOutNotification # 外部合作账号222222222222:仅授予消息发布权限 - Effect: Allow Principal: AWS: '*' Action: sns:Publish Condition: StringEquals: aws:SourceOwner: 222222222222 Resource: !Ref WebhookOutNotification Topics: - !Ref WebhookOutNotification
部署后控制台生效策略参考
配置部署完成后,在AWS控制台查看到的SNS主题策略结构如下,完全匹配你的权限要求:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "sns:GetTopicAttributes", "sns:SetTopicAttributes", "sns:AddPermission", "sns:RemovePermission", "sns:DeleteTopic", "sns:Subscribe", "sns:ListSubscriptionsByTopic", "sns:Publish", "sns:Receive" ], "Resource": "arn:aws:sns:eu-west-3:301239487173:sbx-180420-webhook-out", "Condition": { "StringEquals": { "aws:SourceOwner": "111111111111" } } }, { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:eu-west-3:301239487173:sbx-180420-webhook-out", "Condition": { "StringEquals": { "aws:SourceOwner": "222222222222" } } } ] }
配置说明
- 不需要调整现有
WebhookOutNotification主题的基础配置,仅修改主题策略部分即可完成权限变更 - 外部账号权限严格遵循最小授权原则:除
sns:Publish(向主题发布消息)外,无任何其他主题操作权限,无法修改主题配置、查看订阅列表、删除主题或调整策略 - 后续如果需要接入其他合作账号,仅需新增独立的Statement条目单独配置允许的操作范围即可,不会影响已有账号的权限生效
内容的提问来源于stack exchange,提问作者Mitsukk
相关产品推荐
相关产品推荐

