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

更改密钥策略

要在 AWS KMS 中更改客户主密钥 (CMK) 的权限,请更改 CMK 的密钥策略

当更改密钥策略时,请注意以下规则:

  • 您可以在密钥策略中添加或删除 IAM 用户、IAM 角色和 AWS 账户(根用户),并更改允许或拒绝这些委托人执行的操作。有关在密钥策略中指定委托人和权限的方法的更多信息,请参阅使用密钥策略

     

  • 您无法向密钥策略添加 IAM 组,但可以添加多位 IAM 用户。有关更多信息,请参阅允许多位 IAM 用户访问 CMK

     

  • 如果向密钥策略添加外部 AWS 账户,您还必须使用外部账户中的 IAM 策略向这些账户中的 IAM 用户、组或角色授予权限。有关更多信息,请参阅允许外部 AWS 账户访问 CMK

     

  • 所生成的密钥策略文档不能超过 32 KB(32,768 字节)。

如何更改密钥策略

您可以通过三种不同的方式更改密钥策略,以下各部分将分别介绍每一种方式。

使用 AWS 管理控制台默认视图

您可以使用控制台中名为默认视图的图形界面来更改密钥策略。

如果以下步骤与您在此控制台中看到的内容不一致,可能意味着,此密钥策略不是由此控制台创建的。也可能意味着,修改此密钥策略的方式不受控制台的默认视图的支持。在这种情况下,请按照使用 AWS 管理控制台策略视图使用 AWS KMS API中的步骤操作。

注意

AWS KMS 最近引入了新的控制台,使您可以更轻松地组织和管理 KMS 资源。它在除了 AWS GovCloud (US)之外 AWS KMS 支持的所有 AWS 区域中可用。我们建议您通过 https://console.amazonaws.cn/kms 试用新的 AWS KMS 控制台。

原始控制台将在短时间内保持可用状态,以便您有时间熟悉新控制台。要使用原始控制台,请在 IAM 控制台中选择加密密钥,或者转到 。请通过在任意控制台中或者在此页面的右下角选择 Feedback (反馈) 来分享您的反馈。

使用控制台默认视图更改密钥策略(新控制台)
  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.amazonaws.cn/kms

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

  3. 在导航窗格中,选择 Customer managed keys (客户托管密钥)。(您无法更改 AWS 托管密钥的密钥策略。)

  4. 选择要更改其密钥策略的 CMK 的别名或密钥 ID。

  5. 向下滚动至 Key policy (密钥策略) 选项卡。

  6. 确定要更改的内容。

    • 要添加或删除密钥管理员以及允许或阻止密钥管理员删除 CMK,请使用此页面的 Key administrators (密钥管理员) 部分中的控件。密钥管理员管理 CMK,包括启用和禁用它、设置密钥策略以及启用密钥轮换

    • 要添加或删除密钥用户以及允许或禁止外部 AWS 账户使用 CMK,请使用此页面的 Key users (密钥用户) 部分中的控件。密钥用户可以在加密操作(如加密、解密、重新加密和生成数据密钥)中使用 CMK。

使用控制台默认视图更改密钥策略(原始控制台)
  1. 登录 AWS 管理控制台,然后转至 。

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

  3. 选择您要更改其密钥策略的 CMK 的别名。

  4. 确定要更改的内容。

    • 要添加或删除密钥管理员,并允许或禁止密钥管理员删除 CMK,请使用密钥管理员区域(位于页面中的密钥策略部分)中的控件。

    • 要添加或删除密钥用户,以及允许或禁止外部 AWS 账户使用 CMK,请使用此页面密钥策略部分中密钥用户区域中的控件。

使用 AWS 管理控制台策略视图

您可以使用控制台的策略视图更改密钥策略文档。

注意

AWS KMS 最近引入了新的控制台,使您可以更轻松地组织和管理 KMS 资源。它在除了 AWS GovCloud (US)之外 AWS KMS 支持的所有 AWS 区域中可用。我们建议您通过 https://console.amazonaws.cn/kms 试用新的 AWS KMS 控制台。

原始控制台将在短时间内保持可用状态,以便您有时间熟悉新控制台。要使用原始控制台,请在 IAM 控制台中选择加密密钥,或者转到 。请通过在任意控制台中或者在此页面的右下角选择 Feedback (反馈) 来分享您的反馈。

使用控制台策略视图更改密钥策略文档(新控制台)
  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.amazonaws.cn/kms

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

  3. 在导航窗格中,选择 Customer managed keys (客户托管密钥)。(您无法更改 AWS 托管 CMK 的密钥策略。

  4. 选择要更改的 CMK 的别名或密钥 ID。

  5. 向下滚动至 Key policy (密钥策略) 选项卡。

  6. Key Policy (密钥策略) 部分中,选择 Switch to policy view (切换到策略视图)

  7. 编辑密钥策略文档,然后选择 Save changes (保存更改)

使用控制台策略视图更改密钥策略文档(原始控制台)
  1. 登录 AWS 管理控制台,然后转至 。

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

  3. 选择您想要编辑其密钥策略文档的 CMK 的别名。

  4. 密钥策略行中,选择切换到策略视图

    
                  切换到控制台中的策略视图
  5. 编辑密钥策略文档,然后选择保存更改

使用 AWS KMS API

您可以使用 AWS KMS API 更改密钥策略文档。以下步骤使用 AWS KMS HTTP API。您可以使用 AWS 开发工具包AWS 命令行工具执行相同的操作,这通常会比使用 HTTP API 简单。有关其他开发工具包和工具的操作和语法,请查阅该特定开发工具包或工具的参考文档。有关使用AWS SDK for Java的示例代码,请参阅使用密钥策略

更改密钥策略文档 (KMS API)

  1. 使用 GetKeyPolicy 检索现有的密钥策略文档,然后将该密钥策略文档保存为一个文件。

  2. 在您的首选文本编辑器中打开该密钥策略文档,编辑该密钥策略文档,然后保存文件。

  3. 使用 PutKeyPolicy 将已更新的密钥策略文档应用到 CMK。

允许多位 IAM 用户访问 CMK

IAM 组不是密钥策略中的有效委托人。要允许多位 IAM 用户访问 CMK,请执行以下操作之一:

  • 将每位 IAM 用户添加到密钥策略中。此方法要求您在授权用户列表每次发生更改时更新密钥策略。

  • 确保密钥策略包含启用 IAM 策略以允许访问 CMK 的语句。然后,创建一个 IAM 策略以允许访问 CMK,再将该策略附加到 IAM 组(其中包含经授权的 IAM 用户)。使用此方式,您不需要在授权用户列表发生更改时更改任何策略。相反,您只需在相应的 IAM 组中添加或删除这些用户。

有关 AWS KMS 密钥策略和 IAM 策略如何协同工作的更多信息,请参阅密钥访问故障排除

允许外部 AWS 账户访问 CMK

您可以允许一个 AWS 账户中的 IAM 用户或角色访问另一个账户中的 CMK。例如,假定账户 111122223333 中的用户或角色需要使用账户 444455556666 中的 CMK。要允许该操作,您必须做两件事情:

  1. 更改账户 444455556666 中的 CMK 的密钥策略。

  2. 为账户 111122223333 中的用户或角色添加 IAM 策略(或更改现有策略)。

单独执行其中任何一个步骤,都不能授予跨账户访问 CMK 的权限 — 您必须完成两个步骤。

更改 CMK 的密钥策略以允许使用外部账户

要允许一个 AWS 账户中的 IAM 用户或角色使用另一个账户中的 CMK,您首先要将外部账户(根用户)添加到 CMK 的密钥策略中。请注意,请勿将单个 IAM 用户或角色添加到密钥策略中,只有外部账户才能拥有这些用户或角色。

确定您想要向外部账户授予的权限:

有关将外部账户添加到密钥策略文档的 Principal 元素的 JSON 语法示例,请参阅允许密钥用户使用 CMK 的默认控制台密钥策略中的策略语句

添加或更改 IAM 策略以允许访问另一个 AWS 账户中的 CMK

将外部账户添加到 CMK 的密钥策略后,请为外部账户中的用户或角色添加 IAM 策略(或更改现有策略)。在此场景中,账户 111122223333 中的用户或角色需要使用账户 444455556666 中的 CMK。要允许该操作,请在账户 111122223333 中创建 IAM 策略以允许访问账户 444455556666 中的 CMK,然后将该策略附加到账户 111122223333 中的用户或角色。以下示例显示了一个策略,该策略允许访问账户 444455556666 中的 CMK。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUseOfCMKInAccount444455556666", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d" }, { "Sid": "AllowUseofCMKToCreateEncryptedResourcesInAccount444455556666", "Effect": "Allow", "Action": "kms:CreateGrant", "Resource": "arn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ] }

该策略允许账户 111122223333 中的用户和角色直接使用账户 444455556666 中的 CMK 进行加密和解密,并将自己的一部分权限委派给某些与 AWS KMS 集成的 AWS 服务,尤其是使用授权的服务。请注意有关该策略的以下详细信息:

  • 该策略允许使用账户 444455556666 中的特定 CMK,该 CMK 由其 Amazon 资源名称 (ARN)(位于策略语句的 Resource 元素中)标识。当您使用 IAM 策略授予对 CMK 的访问权限时,请始终在策略的 Resource 元素中列出特定的 CMK ARN。否则,您可能会无意中授予对多于预期数量的 CMK 的访问权限。

  • IAM 策略不包含 Principal 元素,这不同于 KMS 密钥策略。在 IAM 策略中,附加了策略的身份即是委托人的身份。

  • 策略可向密钥用户授予权限以允许集成服务使用 CMK,但这些用户本身仍然需要拥有相应权限才能使用这些集成服务。有关授权用户访问与 AWS KMS 集成的 AWS 服务的详细信息,请查阅有关集成服务的文档。另请注意,对于账户 111122223333 中的用户或角色,账户 444455556666 中的 CMK 将不会在创建加密资源时显示在 AWS 管理控制台中以供选择,即使用户或角色已附加此类策略也是如此。控制台不会显示其他账户中的 CMK。

有关使用 IAM 策略的更多信息,请参阅使用 IAM 策略