增强KMS保护

参考资料:https://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/resource-control-policies.html

先决条件:使用客户管理密钥(而非 AWS 自有密钥)

RCP 目前仅支持 KMS、Secrets Manager、SQS、STS 和 S3。 因此,要保护跨其他服务(如 DynamoDB)的数据,我们需要创新思维。 如果这些资源是用 KMS 加密的,我们就可以在 RCP 中使用 KMS 来创建一个数据边界:

第一段:如果委托人不属于我们的组织,也不是 AWS 服务,则拒绝数据解密(进而拒绝读取)。

第二段:仅允许KMS解密组织内的资源,我们还可以添加一项声明,以防止出现confused deputy issues.。

第三段:确保不会饶过锁定管理的 KMS 密钥策略(基于资源的策略)创建 KMS 密钥。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EnforceEncryptionReadPerimeter",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:PrincipalOrgID": "<ORG_ID_HERE>"
                },
                "BoolIfExists": {
                    "aws:PrincipalIsAWSService": "false"
                }
            }
        },
        {
            "Sid": "EnforceConfusedDeputyProtection",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:SourceOrgID": "ORG_ID_HERE"
                },
                "Null": {
                    "aws:SourceAccount": "false"
                },
                "Bool": {
                    "aws:PrincipalIsAWSService": "true"
                }
            }
        },
         {
            "Sid": "EnforceKMSEncryption",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "kms:PutKeyPolicy",
                "kms:CreateKey"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                	"kms:BypassPolicyLockoutSafetyCheck": true
                }
            }
        }
    ]
}

{
    "Version": "2012-10-17",
    "Statement": [
       
    ]
}

最后更新于