AWS KMS服务主体账户隔离:任意账户SNS能否访问我的密钥?
关于KMS服务主体策略的权限范围问题
你提供的KMS策略语句如下:
{ "Sid": "Allow use of the key by SNS", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "kms:DescribeKey", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*" }
核心结论
这个策略不会允许任意AWS账户的SNS服务访问你的KMS密钥,只有代表你当前AWS账户内资源发起请求的SNS服务,才能获得授权。
具体解释
当KMS策略中指定服务类型主体(如sns.amazonaws.com)时,AWS会验证请求的上下文:只有当SNS是在执行你账户内的操作(比如加密你账户下的SNS主题消息)时,这个服务主体的身份才会被KMS认可。其他账户的SNS服务无法仅凭这个服务主体标识,就访问你的KMS密钥——服务主体的权限是和请求关联的AWS账户绑定的。
额外建议
如果要进一步缩小权限范围,只允许特定的SNS主题使用该密钥,可以在策略中添加Condition条件,通过aws:SourceArn指定目标主题的ARN,示例如下:
{ "Sid": "Allow use of the key by specific SNS topic", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "kms:DescribeKey", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:sns:us-east-1:123456789012:your-topic-name" } } }
内容的提问来源于stack exchange,提问作者Sujith C P
相关产品推荐
相关产品推荐

