如何限制AWS EC2实例角色仅在带指定标签的EBS卷上使用KMS密钥?
问题解答
你的IAM策略配置无法实现预期需求,原因是:当实例角色调用KMS操作时,策略中的aws:ResourceTag/name条件指向的是KMS密钥本身的标签,而非你要限制的EBS卷标签,这和你的需求完全不符。
要实现仅允许带有my-volume标签的EBS卷使用该KMS密钥,需要调整IAM策略的条件部分,结合EBS卷的加密上下文和标签验证,正确配置如下:
{ "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "arn:aws:kms:us-east-1:ACCOUNT_ID:key/KMS_KEY_ID", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:ebs:volume-id": "${aws:ResourceArn}" }, "StringEquals": { "aws:ResourceTag/name": "my-volume" } } }
配置说明:
kms:EncryptionContext:aws:ebs:volume-id:确保KMS操作的加密上下文包含EBS卷的ARN,关联到目标EBS资源。aws:ResourceTag/name: "my-volume":验证该EBS卷是否带有指定标签,满足条件才允许KMS操作。
另外需要注意:
- 确保实例角色本身拥有对目标EBS卷的相关操作权限(如
ebs:AttachVolume等),否则无法触发KMS操作的上下文传递。 - KMS密钥策略仍需保留允许该实例角色调用KMS操作的基础权限(即你最初写的密钥策略去掉
aws:ResourceTag条件部分),否则IAM策略的允许会被密钥策略的拒绝覆盖。
内容的提问来源于stack exchange,提问作者user21190291
相关产品推荐
相关产品推荐

