控制对多区域密钥的访问 - AWS Key Management Service

控制对多区域密钥的访问

您可以在合规性、灾难恢复和备份场景中使用多区域密钥,这些场景在使用单区域密钥的情况下更为复杂。但是,由于多区域密钥的安全属性与单区域密钥的安全属性明显不同,我们建议在授权创建、管理和使用多区域密钥时务必谨慎。

注意

Resource 字段中包通配符的现有 IAM 策略语句现在同时应用于单区域密钥和多区域密钥。要将其限制为单区域 KMS 密钥或多区域密钥,请使用 kms:MultiRegion 条件键。

使用您的授权工具防止在单区域足够的任何情况下创建和使用多区域密钥。允许委托人仅将多区域密钥复制到需要它们的 AWS 区域。仅向需要多区域密钥的委托人授予多区域密钥权限,并且仅为需要它们的任务授予其权限。

您可以使用密钥策略、IAM 策略和授权来允许 IAM 委托人在您的 AWS 账户 中管理和使用多区域密钥。每个多区域密钥都是一个独立的资源,具有唯一的密钥 ARN 和密钥策略。您需要为每个密钥建立和维护密钥策略,并确保新的和现有的 IAM 策略实施您的授权策略。

多区域密钥的授权基础知识

为多区域密钥设计密钥策略和 IAM 策略时,请考虑以下原则。

  • 密钥策略 — 每个多区域密钥都是一个独立的 KMS 密钥资源,具有自己的密钥策略。您可以将相同或不同的密钥策略应用于相关多区域密钥集中的每个密钥。密钥策略不是多区域密钥的共享属性。AWS KMS 不会在相关的多区域密钥之间复制或同步密钥策略。

    当您在 AWS KMS 控制台中创建副本密钥时,为方便起见,控制台将显示主密钥的当前密钥策略。您可以使用此密钥策略、对其进行编辑或删除和替换。但是,即使您接受主密钥策略不变,AWS KMS 也不会同步策略。例如,如果您更改主密钥的密钥策略,则副本密钥的密钥策略将保持不变。

  • 默认密钥策略 — 当您通过使用 CreateKeyReplicateKey 操作创建多区域密钥时,将会应用默认密钥策略,除非您在请求中指定密钥策略。这与应用于单区域密钥的默认密钥策略相同。

  • IAM 策略 — 与所有 KMS 密钥一样,只要当密钥策略允许时,您才可以使用 IAM 策略来控制对多区域密钥的访问。IAM 策略在默认情况下适用于所有 AWS 区域。但是,您可以使用条件键,例如 aws:RequestedRegion,以限制对特定区域的权限。

    要创建主密钥和副本密钥,委托人必须对应用于创建密钥的区域的 IAM 策略具有 kms:CreateKey 权限。

  • 授权 — AWS KMS 授权是区域性的。每个授权都允许对一个 KMS 密钥的权限。您可以使用授权来允许对多区域主密钥或副本密钥的权限。但是,您不能使用单个授权来允许对多个 KMS 密钥的权限,即使它们是相关的多区域密钥。

  • 密钥 ARN — 每个多区域密钥都有一个唯一的密钥 ARN。相关多区域密钥的密钥 ARN 具有相同的分区、账户和密钥 ID,但区域不同。

    要将 IAM 策略语句应用于特定的多区域密钥,请使用其密钥 ARN 或包含该区域的密钥 ARN 模式。要将 IAM 策略语句应用于所有相关多区域密钥,请在 ARN 的区域元素中使用通配符 (*),如下例所示。

    { "Effect": "Allow", "Action": [ "kms:Describe*", "kms:List*" ], "Resource": { "arn:aws:kms:*::111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab" } }

    若要将策略语句应用于 AWS 账户 中的所有多区域密钥,您可以使用 kms:MultiRegion 策略条件或其中包含独特 mrk- 前缀的密钥 ID 模式。

  • 服务相关角色 — 创建多区域主密钥的委托人必须具有 iam:CreateServiceLinkedRole 权限。

    为了同步相关多区域密钥的共享属性,AWS KMS 会代入 IAM 服务相关角色。在您创建多区域主密钥的任何时候,AWS KMS 都会在 AWS 账户 中创建服务相关角色。(如果角色存在,AWS KMS 将重新创建它,这没有任何有害影响。) 该角色在所有区域中都有效。要允许 AWS KMS 创建(或重新创建)服务相关角色,创建多区域主密钥的委托人必须具有 iam:CreateServiceLinkedRole 权限。

授权多区域密钥管理员和用户

创建和管理多区域密钥的委托人需要在主区域和副本区域中具有以下权限:

  • kms:CreateKey

  • kms:ReplicateKey

  • kms:UpdatePrimaryRegion

  • iam:CreateServiceLinkedRole

创建主密钥

创建多区域主密钥,委托人需要对在主密钥区域中有效的 IAM 策略具有 kms:CreateKeyiam:CreateServiceLinkedRole 权限。具有这些权限的委托人可以创建单区域和多区域密钥,除非您限制其权限。

iam:CreateServiceLinkedRole 权限允许 AWS KMS 创建 AWSServiceRoleForKeyManagementServiceMultiRegionKeys 角色以同步相关多区域密钥的共享属性

例如,此 IAM 策略允许委托人创建任何类型的 KMS 密钥。

{ "Version": "2012-10-17", "Statement":{ "Action": [ "kms:CreateKey", "iam:CreateServiceLinkedRole" ], "Effect":"Allow", "Resource":"*" } }

要允许或拒绝创建多区域主密钥的权限,请使用 kms:MultiRegion 条件键。有效值为 true(多区域密钥)或 false(单区域密钥)。例如,以下 IAM 策略语句使用 Deny 操作与 kms:MultiRegion 条件键来防止委托人创建多区域密钥。

{ "Version": "2012-10-17", "Statement":{ "Action":"kms:CreateKey", "Effect":"Deny", "Resource":"*", "Condition": { "Bool": "kms:MultiRegion": true } } }

复制密钥

要创建多区域副本密钥,委托人需要以下权限:

允许这些权限时请谨慎。它们允许委托人创建 KMS 密钥和授权其使用的密钥策略。kms:ReplicateKey 权限还授权跨 AWS KMS 内的区域边界传输密钥材料。

要限制可在其中复制多区域密钥的 AWS 区域,请使用 kms:ReplicaRegion 条件键。它只限制 kms:ReplicateKey 权限。否则,会没有效果。例如,以下密钥策略允许委托人复制该主密钥,但仅限在指定区域中进行。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Administrator" }, "Action": "kms:ReplicateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:ReplicaRegion": [ "us-east-1", "eu-west-3", "ap-southeast-2" ] } } }

更新主区域

授权的委托人可以将副本密钥转换为主密钥,从而将以前的主密钥更改为副本密钥。该操作称为更新主区域。要更新主区域,委托人需要在这两个区域中具有 kms:UpdatePrimaryRegion 权限。您可以在密钥策略或 IAM 策略中提供这些权限。

  • 主密钥上的 kms:UpdatePrimaryRegion。此权限必须在主密钥区域中有效。

  • 副本密钥上的 kms:UpdatePrimaryRegion。此权限必须在副本密钥区域中有效。

例如,以下密钥策略向可以担任管理员角色的用户授予更新 KMS 密钥的主区域的权限。此 KMS 密钥可以是此操作中的主密钥或副本密钥。

{ "Effect": "Allow", "Resource": "*", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Administrator" }, "Action": "kms:UpdatePrimaryRegion" }

要限制可以托管主密钥的 AWS 区域,请使用 kms:PrimaryRegion 条件键。例如,以下 IAM 策略语句允许委托人在 AWS 账户 中更新多区域密钥的主区域,但仅当新的主区域是指定区域之一时才可以。

{ "Effect": "Allow", "Action": "kms:UpdatePrimaryRegion", "Resource": { "arn:aws:kms:*:111122223333:key/*" }, "Condition": { "StringEquals": { "kms:PrimaryRegion": [ "us-west-2", "sa-east-1", "ap-southeast-1" ] } } }

使用和管理多区域密钥

默认情况下,有权在 AWS 账户 和区域中使用和管理 KMS 密钥的委托人也有权使用和管理多区域密钥。但是,您可以使用 kms:MultiRegion 条件键以仅允许单区域密钥或仅允许多区域密钥。或者使用 kms:MultiRegionKeyType 条件键以仅允许多区域主密钥或仅允许副本密钥。两个条件键都能控制对 CreateKey 操作以及任何使用现有 KMS 密钥的操作(例如 EncryptEnableKey)的访问权限。

以下示例 IAM 策略语句使用 kms:MultiRegion 条件键,以防委托人使用或管理任何多区域密钥。

{ "Effect": "Deny", "Action": "kms:*", "Resource": "*", "Condition": { "Bool": "kms:MultiRegion": true } }

此示例 IAM 策略语句使用 kms:MultiRegionKeyType 条件,以允许委托人计划和取消删除密钥,但仅限于多区域副本密钥。

{ "Effect": "Allow", "Action": [ "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": { "arn:aws:kms:us-west-2:111122223333:key/*" }, "Condition": { "StringEquals": "kms:MultiRegionKeyType": "REPLICA" } }

授权 AWS KMS 同步多区域密钥

为了支持多区域密钥、AWS KMS 使用 IAM 服务相关角色。这个角色为 AWS KMS 授予同步共享属性所需的权限。您可以查看记录 AWS KMS 在您的 AWS CloudTrail 日志中同步共享属性的 SynchronizeMultiRegionKey CloudTrail 事件。

关于多区域密钥的服务相关角色

服务相关角色是一种 AWS 角色,该角色可向一个 服务提供代表您调用其他 AWS 服务的权限。该角色旨在使您能够更轻松地使用多项集成式 AWS 服务的功能,而无需创建和维护复杂的 IAM 策略。

对于多区域密钥,AWS KMS 使用 AWSKeyManagementServiceMultiRegionKeysServiceRolePolicy 策略创建 AWSServiceRoleForKeyManagementServiceMultiRegionKeys 服务相关角色。此策略将授予角色 kms:SynchronizeMultiRegionKey 权限,从而允许它同步多区域密钥的共享属性。

由于 AWSServiceRoleForKeyManagementServiceMultiRegionKeys 服务相关角色仅信任 mrk.kms.amazonaws.com,所以只有 AWS KMS 可以代入此服务相关角色。此角色仅限于 AWS KMS 同步多区域共享属性所需的操作。它不会向 AWS KMS 提供任何额外权限。例如,AWS KMS 无权创建、复制或删除任何 KMS 密钥。

有关 AWS 服务如何使用服务相关角色的更多信息,请参阅 IAM 用户指南中的使用服务相关角色

创建服务相关角色

如果 AWSServiceRoleForKeyManagementServiceMultiRegionKeys 服务相关角色不存在,当您创建多区域密钥时,AWS KMS 会在您的 AWS 账户 中自动创建该角色。您无法直接创建或重新创建此服务相关角色。

编辑服务相关角色描述

您无法在 AWSServiceRoleForKeyManagementServiceMultiRegionKeys 服务相关角色中编辑角色名称或策略语句,但可以编辑角色描述。有关说明,请参阅 IAM 用户指南中的编辑服务相关角色

删除服务相关角色

AWS KMS 不会从您的 AWS 账户 中删除 AWSServiceRoleForKeyManagementServiceMultiRegionKeys 服务相关角色,且您无法将其删除。然而,AWS KMS 不会代入 AWSServiceRoleForKeyManagementServiceMultiRegionKeys 角色或使用其任何权限,除非您在 AWS 账户 和区域中拥有多区域密钥。