使用交叉账户KMS CMK创建AWS Secret Manager

时间:2019-06-05 06:05:57

标签: amazon-web-services aws-kms aws-secrets-manager

如何使用来自其他帐户的KMS CMK启用AWS Secret Manager的静态加密?

1 个答案:

答案 0 :(得分:1)

无法使用AWS管理控制台使用交叉帐户密钥对 AWS Secret Manager 进行加密,相反,您必须使用AWS CLI

如果要创建密钥并将其共享给另一个帐户

首先使用密钥策略创建KMS CMK密钥,该策略将提供对共享帐户的正确访问。有很多关于此的教程。

在此,我们授予对AccountA根目录的密钥访问权限。此外,我们还限制了自动扩展和密钥管理器使用密钥。

{
    "Sid": "Allow use of the key for SSM only",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::AccountA:root"
    },
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*"
    ],
    "Resource": "*",
    "Condition": {
        "StringLike": {
            "kms:ViaService": [
                "secretsmanager.*.amazonaws.com",
                "autoscaling.*.amazonaws.com"
            ]
        }
    }
},
{
    "Sid": "Allow reading of key metadata",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::AccountA:root"
    },
    "Action": "kms:DescribeKey",
    "Resource": "*"
},
{
    "Sid": "Allow attachment of persistent resources",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::AccountA:root"
    },
    "Action": [
        "kms:CreateGrant",
        "kms:ListGrants",
        "kms:RevokeGrant"
    ],
    "Resource": "*"
}

现在,帐户根必须授予用户或角色访问权限以使用密钥。授予访问权限的典型IAM策略如下所示。该策略应与帐户A中的角色或用户相关联。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor2",
        "Effect": "Allow",
        "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*"
        ],
        "Resource": [
            "arn:aws:kms:<KEY>"
        ]
    }
]

}

现在您已经可以使用KMS ket,因此,请继续以下步骤。

如果您已经拥有其他帐户的KMS CMK

首先检查密钥是否可访问

aws kms describe-key --key-id arn:aws:kms:<KEY_ID>

如果没有响应,则意味着您无权访问密钥,请检查密钥策略并确保所有访问权限均得到正确授予。

如果您有权访问密钥,请使用AWS CLI来使用密钥。

重新分配给现有机密

aws secretsmanager update-secret --secret-id <secret id> --kms-key-id <KMS key id>

或者使用密钥创建新的秘密

aws secretsmanager create-secret --name <NameOfTheSecret> \
--description "Test Description" \
--kms-key-id <KMS Key Id>