KMS 密钥 | 创建 - AMS 高级更改类型参考

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

KMS 密钥 | 创建

使用预定义的密钥策略申请 KMS 密钥。

完整分类:部署 | 高级堆栈组件 | KMS 密钥 | 创建

更改类型详情

更改类型 ID

ct-1d84keiri1jhg

当前版本

1.0

预期执行时长

60 分钟

AWS 批准

必需

客户批准

可选

执行模式

自动

附加信息

创建 KMS 密钥

AMS 控制台中此更改类型的屏幕截图:

Create KMS key change type with description, ID, version, and execution mode details.

它是如何工作的:

  1. 导航到 “创建 RFC” 页面:在 AMS 控制台的左侧导航窗格中,单击RFCs打开 RFCs 列表页面,然后单击 “创建 R FC”。

  2. 在默认的 “浏览更改类型” 视图中选择常用更改类型 (CT),或者在 “按类别选择” 视图中选择 CT。

    • 按更改类型浏览:您可以单击 “快速创建” 区域中的常用 CT,立即打开 “运行 RFC” 页面。请注意,您不能使用快速创建来选择较旧的 CT 版本。

      要进行排序 CTs,请使用卡片视图或表格视图中的所有更改类型区域。在任一视图中,选择一个 CT,然后单击 “创建 RFC” 打开 “运行 RFC” 页面。如果适用,“创建 RFC” 按钮旁边会出现 “使用旧版本创建” 选项。

    • 按类别选择:选择类别、子类别、项目和操作,CT 详细信息框将打开,并显示 “使用旧版本创建” 选项(如果适用)。单击 “创建 RFC” 打开 “运行 RFC” 页面。

  3. 在 “运行 RFC” 页面上,打开 CT 名称区域以查看 CT 详细信息框。必须填写主题(如果您在 “浏览更改类型” 视图中选择 CT,则会为您填写此主题)。打开其他配置区域以添加有关 RFC 的信息。

    执行配置区域中,使用可用的下拉列表或输入所需参数的值。要配置可选的执行参数,请打开其他配置区域。

  4. 完成后,单击 “运行”。如果没有错误,则会显示成功创建的 RFC 页面,其中包含已提交的 RFC 详细信息和初始运行输出。

  5. 打开运行参数区域以查看您提交的配置。刷新页面以更新 RFC 的执行状态。(可选)取消 RFC 或使用页面顶部的选项创建一个 RFC 的副本。

它是如何工作的:

  1. 使用 Inline Create(您发出包含所有 RFC 和执行参数的create-rfc命令)或模板创建(创建两个 JSON 文件,一个用于 RFC 参数,一个用于执行参数),然后以这两个文件作为输入发出create-rfc命令。这里描述了这两种方法。

  2. 提交带有返回的 RFC ID 的 RFC: aws amscm submit-rfc --rfc-id ID 命令。

    监控 RFC: aws amscm get-rfc --rfc-id ID 命令。

要检查更改类型版本,请使用以下命令:

aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=CT_ID
注意

您可以将任何CreateRfc参数与任何 RFC 一起使用,无论它们是否属于变更类型的架构的一部分。例如,要在 RFC 状态更改时收到通知,请将此行添加到请求的 RFC 参数部分(不是执行参数)。--notification "{\"Email\": {\"EmailRecipients\" : [\"email@example.com\"]}}"有关所有 CreateRfc 参数的列表,请参阅《AMS 变更管理 API 参考》。

内联创建

使用内联提供的执行参数(内联提供执行参数时使用转义引号)发出 create RFC 命令,然后提交返回的 RFC ID。例如,你可以用这样的东西替换内容:

仅限必填参数:

aws amscm create-rfc --title my-app-key --change-type-id ct-1d84keiri1jhg --change-type-version 1.0 --execution-parameters '{"Description":"KMS key for my-app","VpcId":"VPC_ID","Name":"my-app-key","StackTemplateId":"stm-enf1j068fhg34vugt","TimeoutInMinutes":60,"Parameters":{"Description":"KMS key for my-app"}}'

模板创建

  1. 将此更改类型的执行参数 JSON 架构输出到文件中;此示例将其命名为 CreateKmsKeyAutoParams .json。

    aws amscm get-change-type-version --change-type-id "ct-1d84keiri1jhg" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > CreateKmsKeyAutoParams.json
  2. 修改并保存 CreateKmsKeyAutoParams 文件。以下是示例。

    向@@ 用户或角色授予解密已创建的 CMK 的权限。执行参数示例:

    { "Description": "KMS key for my-app", "VpcId": "VPC_ID”, "Name": "my-app-key-decrypt", "StackTemplateId": "stm-enf1j068fhg34vugt", "TimeoutInMinutes": 60, "Parameters": { "IAMPrincipalsRequiringDecryptPermissions": [ "ARN:role/roleA", "ARN:user/userB", "ARN:role/instanceProfileA" ], "Description": "KMS key for my-app" } }

    有关生成的策略,请参阅向 IAM 用户或角色授予使用 CML 进行解密的权限

    向@@ 用户或角色授予使用创建的 CMK 进行加密的权限。执行参数示例:

    { "Description": "KMS key for my-app", "VpcId": "VPC_ID", "Name": "my-app-key-encrypt", "Tags": [ { "Key": "Name", "Value": "my-app-key" } ], "StackTemplateId": "stm-enf1j068fhg34vugt", "TimeoutInMinutes": 60, "Parameters": { "IAMPrincipalsRequiringEncryptPermissions": [ "ARN:role/roleA", "ARN:user/userB", "ARN:role/instanceProfileA" ], "Description": "KMS key for my-app" } }

    有关生成的策略,请参阅向 IAM 用户或角色授予使用 CML 进行加密的权限

    向用户、角色或账户授予使用创建的 CMK 创建授权的权限。执行参数示例:

    { "Description": "KMS key for my-app", "VpcId": "VPC_ID", "Name": "my-app-key-create-grants", "StackTemplateId": "stm-enf1j068fhg34vugt", "TimeoutInMinutes": 60, "Parameters": { "IAMPrincipalsRequiringGrantsPermissions": [ "arn:aws:iam::999999999999:role/roleA", "888888888888" ], "Description": "KMS key for my-app" } }

    有关生成的策略,请参阅授予使用 CMK 为 IAM 用户、角色或账户创建授权的权限

    仅允许与 AWS KMS 集成的 AWS 服务执行 GRANT 操作。执行参数示例:

    { "Description": "KMS key for my-app", "VpcId": "VPC_ID", "Name": "my-app-key-limit-to-services", "StackTemplateId": "stm-enf1j068fhg34vugt", "TimeoutInMinutes": 60, "Parameters": { "IAMPrincipalsRequiringGrantsPermissions": [ "arn:aws:iam::999999999999:role/roleA" ], "LimitGrantsToAWSResources": "true", "Description": "KMS key for my-app" } }

    有关生成的策略,请参阅仅允许与 AWS KMS 集成的 AWS 服务执行授权操作

    在加密@@ 操作中强制使用加密上下文密钥。执行参数示例:

    { "Description": "KMS key for my-app", "VpcId": "VPC_ID", "Name": "my-app-key-encryption-keys", "StackTemplateId": "stm-enf1j068fhg34vugt", "TimeoutInMinutes": 60, "Parameters": { "EnforceEncryptionContextKeys": "true", "Description": "KMS key for my-app" } }

    有关生成的策略,请参阅在加密操作中强制使用加密上下文密钥

    在加密操作中强制使用特定的加密上下文密钥列表。执行参数示例:

    { "Description": "KMS key for my-app", "VpcId": "VPC_ID", "Name": "my-app-key-encryption-list", "StackTemplateId": "stm-enf1j068fhg34vugt", "TimeoutInMinutes": 60, "Parameters": { "AllowedEncryptionContextKeys": [ "Name", "Application" ], "Description": "KMS key for my-app" } }

    有关生成的策略,请参阅在加密操作中强制使用特定的加密上下文密钥列表

    允许 AWS 服务访问创建的 CMK。执行参数示例:

    { "Description" : "KMS key for my-app", "VpcId" : "VPC_ID", "Name" : "my-app-key-allow-aws-service-access", "StackTemplateId" : "stm-enf1j068fhg34vugt", "TimeoutInMinutes" : 60, "Parameters" : { "AllowServiceRolesAccessKMSKeys": [ "ec2.us-east-1.amazonaws.com", "ecr.us-east-1.amazonaws.com" ], "Description": "KMS key for my-app" } }

    有关生成的策略,请参阅允许 AWS 服务访问创建的 CMK

  3. 将 RFC 模板 JSON 文件输出到一个文件中;此示例将其命名为 CreateKmsKeyAutoRfc .json:

    aws amscm create-rfc --generate-cli-skeleton > CreateKmsKeyAutoRfc.json
  4. 修改并保存 CreateKmsKeyAutoRfc .json 文件。例如,你可以用这样的东西替换内容:

    { "ChangeTypeId": "ct-1d84keiri1jhg", "ChangeTypeVersion": "1.0", "Title": "Create KMS Key" }
  5. 创建 RFC,指定 CreateKmsKeyAuto Rfc 文件和文件: CreateKmsKeyAutoParams

    aws amscm create-rfc --cli-input-json file://CreateKmsKeyAutoRfc.json --execution-parameters file://CreateKmsKeyAutoParams.json

    您在响应中收到新 RFC 的 ID,并可以使用它来提交和监控 RFC。在您提交之前,RFC 仍处于编辑状态且无法启动。

  • 此 CT 会创建一个用于创建 KMS 密钥的 CloudFormation 堆栈DeletionPolicy: Retain。根据设计,即使您删除堆栈,创建的 KMS 密钥仍将保留。如果您确定要删除 KMS 密钥,请使用更改类型 ct-2zxya20wmf5bf、管理 | 高级堆栈组件 | KM S 密钥 | 删除(需要查看)创建 RFC。

  • 此更改类型为 ExecutionMode =Automated,因此此更改类型不需要 AMS 操作人员进行手动审查,其执行速度应比 KMS Key: Create(需要审查)更快;但是,如果您遇到异常情况,手动版本可能更适合您。请参阅 KMS 密钥 | 创建(需要查看)

  • 此 CT 有一个新参数 AllowServiceRolesAccessKMSKeys,它为指定的 AWS 服务提供对 KMS 密钥的访问权限。之所以进行此更改,是因为缺乏 KMS 密钥的权限,Autoscaling 组服务角色无法使用加密 EBS 卷启动 EC2 实例。

  • 要了解有关 AWS KMS 密钥的更多信息,请参阅 AWS 密钥管理服务 (KMS) 、AWS 密钥管理 FAQs服务和 AWS 密钥管理服务概念。

KMS 密钥创建生成的策略

根据您创建 KMS 密钥的方式,您创建了策略。这些示例策略与中提供的各种 KMS 密钥创建方案相匹配创建 KMS 密钥

向 IAM 用户或角色授予使用 CML 进行解密的权限

生成的示例策略授予 IAM 用户、角色或实例配置文件使用 CMK 进行解密的权限:

{ "Sid": "Allow decrypt using the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::999999999999:role/roleA", "arn:aws:iam::999999999999:user/userB", "arn:aws:iam::999999999999:role/instanceProfileA" ] }, "Action": [ "kms:DescribeKey", "kms:Decrypt" ], "Resource": "*" }

有关使用 KMS 密钥创建此策略的执行参数 Create 更改类型,请参阅 创建 KMS 密钥

向 IAM 用户或角色授予使用 CML 进行加密的权限

生成的示例策略授予 IAM 用户、角色或实例配置文件使用 CMK 进行加密的权限:

{ "Sid": "Allow encrypt using the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::999999999999:role/roleA", "arn:aws:iam::999999999999:user/userB", "arn:aws:iam::999999999999:role/instanceProfileA" ] }, "Action": [ "kms:DescribeKey", "kms:Encrypt", "kms:ReEncrypt*", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext" ], "Resource": "*" }

有关使用 KMS 密钥创建此策略的执行参数 Create 更改类型,请参阅 创建 KMS 密钥

授予使用 CMK 为 IAM 用户、角色或账户创建授权的权限

由此产生的策略示例:

{ "Sid": "Allow grants", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::999999999999:role/roleA", "arn:aws:iam::888888888888:root" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*" }

有关使用 KMS 密钥创建此策略的执行参数 Create 更改类型,请参阅 创建 KMS 密钥

仅允许与 AWS KMS 集成的 AWS 服务执行授权操作

由此产生的策略示例:

{ "Sid": "Allow grants", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::999999999999:role/roleA" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*" }, { "Sid": "Deny if grant is not for AWS resource", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "false" } } } } }

有关使用 KMS 密钥创建此策略的执行参数 Create 更改类型,请参阅 创建 KMS 密钥

在加密操作中强制使用加密上下文密钥

由此产生的策略示例:

{ "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "kms:CreateGrant", "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*", "kms:ReEncrypt" ], "Resource": "*", "Condition": { "Null": { "kms:EncryptionContextKeys": "true" } } }

有关使用 KMS 密钥创建此策略的执行参数 Create 更改类型,请参阅 创建 KMS 密钥

在加密操作中强制使用特定的加密上下文密钥列表

由此产生的策略示例:

{ "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "kms:CreateGrant", "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*", "kms:ReEncrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContextKeys": [ "Name", "Application" ] } } }

有关使用 KMS 密钥创建此策略的执行参数 Create 更改类型,请参阅 创建 KMS 密钥

允许 AWS 服务访问创建的 CMK

由此产生的策略示例:

{ "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:ListGrants", "kms:CreateGrant", "kms:DescribeKey", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "ec2.us-west-2.amazonaws.com", "ecr.us-east-1.amazonaws.com" ], "kms:CallerAccount": "111122223333" } } }

有关使用 KMS 密钥创建此策略的执行参数 Create 更改类型,请参阅 创建 KMS 密钥

执行输入参数

有关执行输入参数的详细信息,请参见变更架构类型 ct-1d84keiri1jhg

示例:必填参数

{ "Description" : "Test description", "VpcId" : "vpc-12345678901234567", "Name" : "TestStack", "StackTemplateId" : "stm-enf1j068fhg34vugt", "TimeoutInMinutes" : 60, "Parameters" : { "Description" : "Test key" } }

示例:所有参数

{ "Description" : "Test description", "VpcId" : "vpc-12345678", "Name" : "TestStack", "Tags" : [ { "Key" : "foo", "Value" : "bar" } ], "StackTemplateId" : "stm-enf1j068fhg34vugt", "TimeoutInMinutes" : 60, "Parameters" : { "Alias" : "testkey", "EnableKeyRotation" : "true", "Description" : "Test key", "PendingWindow" : 30, "IAMPrincipalsRequiringDecryptPermissions" : [ "arn:aws:iam::123456789012:user/myuser", "arn:aws:iam::123456789012:role/myrole" ], "IAMPrincipalsRequiringEncryptPermissions" : [ "arn:aws:iam::123456789012:user/myuser", "arn:aws:iam::123456789012:role/myrole" ], "IAMPrincipalsRequiringGrantsPermissions" : [ "arn:aws:iam::123456789012:user/myuser", "arn:aws:iam::123456789012:role/myrole", "987654321098" ], "LimitGrantsToAWSResources" : "true", "EnforceEncryptionContextKeys" : "true", "AllowedEncryptionContextKeys" : [ "App" ], "AllowServiceRolesAccessKMSKeys": [ "ec2.us-east-1.amazonaws.com" ] } }