AWS Key Management Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

创建密钥

您可以在 AWS 管理控制台中或使用 CreateKey 操作来创建客户主密钥 (CMK)。

创建 CMK(控制台)

您可以使用 AWS 管理控制台创建客户主密钥 (CMK)。

注意

AWS KMS 最近引入了新的控制台,使您可以更轻松地组织和管理 KMS 资源。我们建议您在 https://console.amazonaws.cn/kms 中尝试。请通过在任意控制台中或者在此页面的右下角选择 Feedback (反馈) 来分享您的反馈。

原始控制台将在短时间内保持可用状态,以便您有时间熟悉新控制台。要使用原始控制台,请访问 https://console.amazonaws.cn/iam/home#encryptionKeys

创建新的 CMK(新控制台)
  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.amazonaws.cn/kms

  2. 要更改 AWS 区域,请使用页面右上角的区域选择器。

  3. 在导航窗格中,选择 Customer managed keys (客户托管密钥)

  4. 选择 Create key

  5. 键入 CMK 的别名。别名名称不能以 aws/ 开头。aws/ 前缀由 Amazon Web Services 预留,用于在您的账户中表示 AWS 托管 CMK。

    别名是一个显示名称,您可以使用它来标识 CMK。我们建议您选择一个别名,用来指示您计划保护的数据类型或计划与 CMK 搭配使用的应用程序。

    在 AWS 管理控制台中创建 CMK 时需要别名。当您使用 CreateKey 操作时,别名是可选的。

  6. (可选) 为 CMK 键入描述。

    我们建议您选择一个描述,用来说明您计划保护的数据类型或计划与 CMK 配合使用的应用程序。

  7. 选择 Next

  8. (可选) 键入标签键和一个可选标签值。要向 CMK 添加多个标签,请选择 Add tag

    在将标签添加到 AWS 资源时,AWS 可生成成本分配报告,其中按标签汇总了使用情况和成本。有关标记 CMK 的信息,请参阅标记密钥

  9. 选择 Next

  10. 选择可管理 CMK 的 IAM 用户和角色。

    注意

    IAM 策略可以向其他 IAM 用户和角色授予管理 CMK 的权限。

  11. (可选)要阻止选定 IAM 用户和角色删除此 CMK,请在页面底部的 Key deletion (密钥删除) 部分中,清除 Allow key administrators to delete this key (允许密钥管理员删除此密钥) 复选框。

  12. 选择 Next

  13. 选择可将 CMK 用于加密操作的 IAM 用户和角色。

    注意

    默认情况下,AWS 账户(根用户)拥有完全权限。因此,任何 IAM 策略还可为用户和角色提供在加密操作中使用 CMK 的权限。

  14. (可选)您可以允许其他 AWS 账户将此 CMK 用于加密操作。为此,请在页面底部的 Other AWS accounts (其他 AWS 账户) 部分中,选择 Add another AWS account (添加其他 AWS 账户) 并输入外部账户的 AWS 账户标识号。要添加多个外部账户,请重复此步骤。

    注意

    要允许外部账户中的委托人使用 CMK,外部账户的管理员必须创建提供这些权限的 IAM 策略。有关更多信息,请参阅允许外部 AWS 账户访问 CMK

  15. 选择 Next

  16. 查看通过您的选择创建的密钥策略文档。您也可以对其进行编辑。

  17. 选择 Finish 以创建 CMK。

提示

要以编程方式和在命令行界面操作中使用您的新 CMK,您需要密钥 ID 或密钥 ARN。有关详细说明,请参阅 查找密钥 ID 和 ARN

创建新的 CMK(原始控制台)
  1. 登录 AWS 管理控制台,然后转至 https://console.amazonaws.cn/iam/home#encryptionKeys

  2. 对于 Region (区域),选择适当的 AWS 区域。请勿使用导航栏中的区域选择器(右上角)。

  3. 选择 Create key

  4. 键入 CMK 的别名。别名名称不能以 aws 开头。aws 前缀由 Amazon Web Services 预留,用于在您的账户中标识 AWS 托管 CMK

    别名是一个显示名称,您可以使用它来标识 CMK。我们建议您选择一个别名,用来指示您计划保护的数据类型或计划与 CMK 搭配使用的应用程序。

    在 AWS 管理控制台中创建 CMK 时需要别名。当您使用 CreateKey 操作时,别名是可选的。

  5. (可选) 为 CMK 键入描述。

    我们建议您选择一个描述,用来说明您计划保护的数据类型或计划与 CMK 配合使用的应用程序。

  6. 选择 Next Step

  7. (可选)键入标签键和一个可选标签值。要向 CMK 添加多个标签,请选择 Add tag

  8. 选择 Next Step

  9. 选择哪些 IAM 用户和角色可以管理此 CMK。

    注意

    默认情况下,AWS 账户(根用户)拥有完全权限。因此,任何附加策略允许适当权限的 IAM 用户和角色也可以管理 CMK。

  10. (可选)要阻止您在上一步中选择的 IAM 用户和角色删除此 CMK,请清除页面底部的允许密钥管理员删除此密钥对应的框。

  11. 选择 Next Step

  12. 选择哪些 IAM 用户和角色可通过 AWS KMS API 使用此 CMK 加密和解密数据。

    注意

    默认情况下,AWS 账户(根用户)拥有完全权限。因此,任何附加策略允许适当权限的 IAM 用户和角色也可以使用此 CMK。

  13. (可选)您可以使用页面底部的控件指定可以使用此 CMK 加密和解密数据的其他 AWS 账户。为此,请选择添加外部账户,然后键入目标 AWS 账户 ID。根据需要重复此步骤,以添加多个外部账户。

    注意

    外部账户的管理员还必须为用户创建 IAM 策略,以允许访问此 CMK。有关更多信息,请参阅允许外部 AWS 账户访问 CMK

  14. 选择 Next Step

  15. 选择 Finish 以创建 CMK。

提示

要以编程方式和在命令行界面操作中使用您的新 CMK,您需要密钥 ID 或密钥 ARN。有关详细说明,请参阅 查找密钥 ID 和 ARN

创建 CMK(KMS API)

CreateKey 操作将创建新的 AWS KMS 客户主密钥 (CMK)。这些示例使用 AWS Command Line Interface (AWS CLI),但您可以使用任何受支持的编程语言。

该操作没有必需参数。但是,如果您要创建一个没有密钥材料的密钥,Origin 参数就是必需的。您可能还需要使用 Policy 参数指定密钥策略。您可以随时更改密钥策略 (PutKeyPolicy) 并添加可选元素,例如描述标签

以下示例显示的是在没有任何参数的情况下调用 CreateKey 操作。

$ aws kms create-key { "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1502910355.475, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333" } }

如果您不为新 CMK 指定密钥策略,则 CreateKey 应用的默认密钥策略将与您在使用控制台创建新 CMK 时应用的默认密钥策略不同。

例如,这个对 GetKeyPolicy 操作的调用会返回 CreateKey 应用的密钥策略。它向 AWS 账户根用户授予对 CMK 的访问权限,并允许其为 CMK 创建 AWS Identity and Access Management (IAM) 策略。有关 CMK 的 IAM 策略和密钥策略的详细信息,请参阅AWS KMS 的身份验证和访问控制

$ aws kms get-key-policy --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --policy-name default --output text { "Version" : "2012-10-17", "Id" : "key-default-1", "Statement" : [ { "Sid" : "Enable IAM User Permissions", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : "kms:*", "Resource" : "*" } ] }