允许其他帐户中的用户使用 CMK - AWS Key Management Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

允许其他帐户中的用户使用 CMK

您可以允许 IAM 用户或角色 AWS 客户使用 客户主密钥 (CMK) AWS 账户。您可以在创建 CMK 或更改现有 CMK.

警告

谨慎使用您的 CMKs. 尽可能遵循 最小特权 原则。只允许用户访问 CMKs 他们只需要他们需要的操作。

此外,在使用不熟悉的 CMK,尤其是 CMK 不同的客户。恶意用户可能会允许您使用 CMK 以获取有关您或您帐户的信息。

有关使用策略保护您帐户中资源的信息,请参阅 最佳实践 IAM 政策.

允许使用 CMK 给另一个客户的用户和角色,您必须使用两种不同类型的策略:

  • 关键政策 为 CMK 必须授予外部客户(或外部客户中的用户和角色)使用 CMK. 关键政策在于拥有 CMK.

  • IAM 政策 在外部帐户中,必须授权其用户和角色使用关键策略权限。这些策略在外部帐户中设置,并授予该帐户中的用户和角色权限。

关键政策决定了 能够 能够访问 CMK. 的 IAM 政策决定了 能够访问 CMK. 无论是密钥策略还是 IAM 策略单独起作用都不够,您必须更改它们。

要编辑密钥策略,您可以使用 AWS 管理控制台中的策略视图或者使用 CreateKeyPutKeyPolicy 操作。在创建 CMK,见 创建 CMKs 其他客户可以使用的.

有关编辑 IAM 策略时的帮助信息,请参阅 在 AWS KMS 中使用 IAM 策略

例如,说明关键策略和 IAM 政策共同合作, CMK 不同的客户,查看 示例 2 用户假定角色使用 CMK 不同的 AWS 账户.

您可以查看生成的跨客户 AWS KMS 运营部门 CMK 在您的 AWS CloudTrail 日志. 使用 CMKs 其他帐户将同时登录呼叫者帐户和CMK所有者帐户。

步骤 1. 在本地客户中添加关键政策声明

关键政策 CMK 是主要决定谁能够访问 CMK 以及他们可以执行哪些操作。关键政策始终在拥有 CMK. 与 IAM 策略不同,密钥策略不指定资源。资源是 CMK 与关键政策相关的。

授予外部客户使用 CMK,在指定外部客户的关键策略中添加一项声明。在密钥策略的 Principal 元素中,输入外部账户的 Amazon 资源名称 (ARN)。

当您在密钥策略中指定外部账户时,外部账户中的 IAM 管理员可以使用 IAM 策略来将这些权限委派给外部账户中的任何用户和角色。他们还可以决定用户和角色可以执行在密钥策略中指定的哪些操作。

例如,假设您想允许帐户444455556666使用对称 CMK 账户111122223333。为此,在关键政策中添加如下示例中的政策声明 CMK 账户111122223333。此政策声明允许外部帐户444455556666使用 CMK 用于对称 CMKs.

{ "Sid": "Allow an external account to use this CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

您可以在密钥策略中指定特定的外部用户和角色,而不是向外部账户授予权限。但是,这些用户和角色不能使用 CMK 直到 IAM 外部帐户中的管理员附加适当的 IAM 对其身份的政策。IAM 策略可以向在密钥策略中指定的所有或部分外部用户和角色授予权限。并且,它们可以允许执行在密钥策略中指定的所有或部分操作。

在密钥策略中指定身份会限制外部账户中的 IAM 管理员可以提供的权限。但是,它使两个账户的策略管理变得更加复杂。例如,假定您需要添加用户或角色。您必须将该身份添加到拥有 CMK 并创造 IAM 身份帐户中的政策。

要在密钥策略中指定特定外部用户或角色,请在 Principal 元素中输入外部账户中的用户或角色的 Amazon 资源名称 (ARN)。

例如,以下示例关键政策声明允许 ExampleRole 和示例使用帐户444455556666的 CMK 账户111122223333。此关键政策声明允许外部客户444455556666使用 CMK 用于对称 CMKs.

{ "Sid": "Allow an external account to use this CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/ExampleRole", "arn:aws:iam::444455556666:user/ExampleUser" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }
注意

请不要在任何允许权限的关键策略语句中将委托人设置为星号 (*)。星号向每个 AWS 账户中的每个身份授予 CMK 的使用权限,除非另一个策略语句明确拒绝此权限。其他 AWS 账户中的用户只需要他们自己账户中的相应 IAM 权限便能使用 CMK。

您还需要确定您想要向外部账户授予哪些权限。有关权限列表 CMKs,见 AWS KMS API权限: 操作和资源参考.

您可以授予外部帐户使用 CMK 在 密码操作 并使用 CMK 有 AWS 与 AWS KMS. 要执行此操作,请使用 AWS 管理控制台的密钥用户部分。有关详细信息,请参阅 创建 CMKs 其他客户可以使用的

要在密钥策略中指定其他权限,请编辑密钥策略文档。例如,您可能想要授予用户进行加密和加密的权限,或者,您还需要授予用户查看 CMK 但不要使用它。要编辑密钥策略文档,您可以使用 AWS 管理控制台中的策略视图或者使用 CreateKeyPutKeyPolicy 操作。

步骤 2. 添加 IAM 外部客户中的政策

拥有 CMK 设置权限的有效范围。但是,外部帐户中的用户和角色不能使用 CMK 直到您附上 IAM 授权这些权限,或使用授权管理访问 CMK. IAM 策略在外部账户中设置。

如果密钥策略向外部账户授予权限,则可以将 IAM 策略附加到账户中的任何用户或角色。但是,如果密钥策略向指定的用户或角色授予权限,则 IAM 策略只能将这些权限授予全部或部分指定用户和角色。如果 IAM 政策 CMK 访问其他外部用户或角色,这没有影响。

密钥策略还限制 IAM 策略中的操作。IAM 策略可以委派在密钥策略中指定的所有或部分操作。如果 IAM 策略列出未在密钥策略中指定的操作,则这些权限无效。

以下示例 IAM 政策允许委托人使用 CMK 在客户 111122223333 密码操作。要向账户 444455556666 中的用户和角色授予此权限,请向账户 444455556666 中的用户或角色附加策略

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Use Of CMK In Account 111122223333", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

请注意有关该策略的以下详细信息:

  • 与密钥策略不同,IAM 策略语句不包含 Principal 元素。在 IAM 策略中,委托人是附加了策略的身份。

  • Resource 元素 IAM 政策确定 CMK 委托人可以使用。要指定 CMK,添加 主要ARNResource 元素。

  • 您可以指定多个 CMK 在 Resource 元素。但是,如果您不具体说明 CMKs 在 Resource 元素,您可能会无意中获得 CMKs 超出您的预期。

  • 允许外部用户使用 CMK 有 AWS 与 AWS KMS, 您可能需要为关键政策或 IAM 政策。有关详细信息,请参阅 使用外部 CMKs 有 AWS 服务

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

创建 CMKs 其他客户可以使用的

当您使用 创建键 操作创建 CMK,您可以使用 Policy 参数以指定 关键政策 允许外部帐户或外部用户和角色使用 CMK. 您还必须在外部账户中添加 IAM 策略,以将这些权限委派给此账户的用户和角色,即使在密钥策略中指定了用户和角色也是如此。您可以随时使用 &link-kms-api; 操作更改密钥策略。

当您创建一个 CMK 在 AWS 管理控制台,您还制定了其关键政策。当您在 主要管理员主要用户 章节, AWS KMS 将这些身份的政策声明添加到 CMK的关键政策。

密钥用户部分还允许您将外部账户添加为密钥用户。


                将外部客户添加到关键策略的 CMK.

当您输入外部账户的账户 ID 时,AWS KMS 向密钥策略添加两个语句。此操作仅影响密钥策略。外部帐户中的用户和角色不能使用 CMK 直到您附上 IAM 政策 给他们部分或全部权限。

第一个政策声明允许外部客户使用 CMK 密码操作。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

第二个政策声明允许外部客户创建、查看和撤销对 CMK,但只有当请求来自 AWS 与 AWS KMS. 这些权限允许 AWS 服务,例如加密用户数据以使用 CMK.

这些权限专为 CMKs 加密用户数据 AWS 服务,例如 Amazon WorkMail. 这些服务通常使用授权来获得使用 CMK 代表用户。有关详细信息,请参阅 使用外部 CMKs 有 AWS 服务

{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }

如果这些权限未满足您的需求,您可以在控制台策略视图中或使用 &link-kms-api; 操作来编辑它们。您可以指定特定的外部用户和角色,而不是向外部账户授予权限。您可以更改策略指定的操作。您可以使用全局和 AWS KMS 策略条件来细化权限。

使用外部 CMKs 有 AWS 服务

您可以给其他帐户中的用户授予使用 CMK 与 AWS KMS. 例如,外部帐户中的用户可以使用您的 CMK 至 在 Amazon S3 存储桶加密他们存储的密钥 AWS Secrets Manager.

关键策略必须授予外部用户或外部用户的帐户使用 CMK. 此外,您需要将 IAM 策略附加到某个身份,此身份向用户授予使用 AWS 服务的权限。

此外,该服务可能要求用户在密钥策略中具有其他权限。例如,它可能需要创建、列出和撤销 CMK. 或者,它可能需要特定的 IAM 策略。有关详细信息,请参阅服务的文档。

最后, CMKs 显示在 AWS 管理控制台 不包括 CMKs 外部客户。即使用户或角色有权使用它们,也是如此。若要使用外部客户的 CMK,用户必须输入ID或ARN CMK. 有关详细信息,请参阅该服务的控制台文档。