如何编写AWS SCP强制RDS使用指定KMS CMK加密?
解决AWS SCP强制RDS使用指定KMS CMK加密的问题
你的原策略存在两个关键问题:
- 参数引用错误:你通过
aws:RequestTag/kms:KeyId标签指定KMS密钥,但RDS创建实例时,加密密钥是通过请求参数rds:KmsKeyId传递的,而非标签。 - 条件逻辑不严谨:
StringNotEqualsIfExists的组合逻辑无法同时覆盖「未加密」「使用默认密钥」「使用非指定密钥」三种违规场景,导致默认加密操作无法被拦截。
修正后的SCP策略
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireRDSEncryptionWithSpecifiedCMK", "Effect": "Deny", "Action": [ "rds:CreateDBInstance", "rds:CreateDBInstanceReadReplica" ], "Resource": "*", "Condition": { "Or": [ // 拦截未开启存储加密的请求 { "Bool": { "rds:StorageEncrypted": "false" } }, // 拦截开启加密但未指定KMS密钥(使用AWS默认密钥)的请求 { "Null": { "rds:KmsKeyId": "true" } }, // 拦截开启加密但使用非指定CMK的请求 { "StringNotEquals": { "rds:KmsKeyId": "arn:aws:kms:region:account-id:key/key-id" } } ] } } ] }
策略说明
该策略通过Or条件组合,拒绝以下三类违规操作:
- 未开启RDS存储加密的创建请求
- 开启加密但未指定KMS密钥(自动使用AWS管理的默认密钥)的创建请求
- 开启加密但使用的KMS密钥与指定ARN不匹配的创建请求
只有同时满足「开启存储加密」且「使用指定KMS CMK」的请求才能通过,完全实现你需要的强制加密要求。
内容的提问来源于stack exchange,提问作者Beginner
相关产品推荐
相关产品推荐

