如何在我的 Auto Scaling 组中使用另一个账户与我共享的加密 AMI?

2 分钟阅读
0

我想在我的 AWS Auto Scaling 组中使用另一个 AWS 账户与我共享的加密亚马逊机器映像 (AMI)。AMI 使用 AWS Key Management Service (AWS KMS) 客户自主管理型密钥进行加密。

简短描述

AWS KMS 密钥的 AWS KMS 密钥策略必须允许您账户的 AWS Identity and Access Management (IAM) 身份使用 AMI 启动实例。要启动实例,Auto Scaling 组使用服务相关角色 (SLR) 授予的权限。

要在您的 Auto Scaling 组中使用加密的 AMI,KMS 密钥策略必须提供对以下角色的访问权限:

  • 与您账户中的 Auto Scaling 组关联的 SLR。
  • 您账户中的 IAM 身份,用于创建允许 SLR 使用密钥的授权

解决方法

要在您的 Auto Scaling 组中使用加密的 AMI,请完成以下步骤:

  1. 修改与加密 AMI 的 KMS 密钥关联的 KMS 密钥策略。
  2. 为 SLR 创建使用密钥的授权。

修改 KMS 密钥策略

完成以下步骤:

  1. 在与您共享加密 AMI 的账户中,打开 AWS KMS 控制台,然后选择 KMS 密钥。

  2. Key Policy(密钥策略)部分中,为账户的 Auto Scaling 组中使用的 SLR 添加以下权限:

    kms:Encrypt
    kms:Decrypt
    kms:ReEncrypt*
    kms:GenerateDataKey*
    kms:DescribeKey
  3. 要在您的账户中创建授权,您必须向密钥策略添加 kms:CreateGrantkms:ListGrantskms:RevokeGrant 权限。该策略还必须包括 Allow use of the keyAllow attachment of persistent resources 语句。

    以下是密钥策略的示例。将 SOURCE_ACCOUNT 替换为共享加密 AMI 的账户 ID,将 DESTINATION_ACCOUNT 替换为您的账户 ID:

    {
        "Version": "2012-10-17",
        "Id": "key-consolepolicy-3",
        "Statement": [
            {
                "Sid": "Enable IAM User Permissions",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::SOURCE_ACCOUNT:root"
                },
                "Action": "kms:*",
                "Resource": "*"
            },
            {
                "Sid": "Allow access for Key Administrators",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::SOURCE_ACCOUNT:user/AdminUser"
                },
                "Action": [
                    "kms:Create*",
                    "kms:Describe*",
                    "kms:Enable*",
                    "kms:List*",
                    "kms:Put*",
                    "kms:Update*",
                    "kms:Revoke*",
                    "kms:Disable*",
                    "kms:Get*",
                    "kms:Delete*",
                    "kms:TagResource",
                    "kms:UntagResource",
                    "kms:ScheduleKeyDeletion",
                    "kms:CancelKeyDeletion"
                ],
                "Resource": "*"
            },
            {
                "Sid": "Allow use of the key",
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::DESTINATION_ACCOUNT:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling",
                        "arn:aws:iam::SOURCE_ACCOUNT:user/AdminUser"
                    ]
                },
                "Action": [
                    "kms:Encrypt",
                    "kms:Decrypt",
                    "kms:ReEncrypt*",
                    "kms:GenerateDataKey*",
                    "kms:DescribeKey"
                ],
                "Resource": "*"
            },
            {
                "Sid": "Allow attachment of persistent resources",
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::DESTINATION_ACCOUNT:user/DESTINATION_USER",
                        "arn:aws:iam::SOURCE_ACCOUNT:user/AdminUser"
                    ]
                },
                "Action": [
                    "kms:CreateGrant",
                    "kms:ListGrants",
                    "kms:RevokeGrant"
                ],
                "Resource": "*"
            }
        ]
    }
    

    **注意:**当您使用 AWS 管理控制台创建 KMS 密钥并将外部账户 ID 作为用户包括在内时,密钥策略会自动应用 kms:GrantIsForAWSResourcekms:GrantIsForAWSResource 条件密钥不允许用户为 SLR 创建授权。确保密钥策略在 Allow attachment of persistent resources 语句中不包含此条件密钥。

为 SLR 创建授权

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误消息,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

该授权允许您账户中的 SLR 使用源账户的 KMS 密钥执行加密操作。

在您的账户中,从密钥策略中指定的 DESTINATION_USER 运行 create-grant AWS CLI 命令:

aws kms create-grant --key-id [X] \
--grantee-principal [Y] \
--operations Decrypt Encrypt GenerateDataKey GenerateDataKeyWithoutPlaintext \
ReEncryptFrom ReEncryptTo CreateGrant DescribeKey

**注意:**将 [X] 替换为源账户 KMS 密钥 ARN,将 [Y] 替换为您账户的 SLR ARN。

相关信息

使用加密卷时所需的 AWS KMS 密钥策略

AWS 官方
AWS 官方已更新 4 个月前