

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

# IAM Identity Center 中的数据保护
<a name="data-protection"></a>

 [责任 AWS 共担模型](https://aws.amazon.com/compliance/shared-responsibility-model/)适用于 AWS IAM 身份中心的数据保护。如本模型所述 AWS ，负责保护运行所有 AWS 云的全球基础架构。您负责维护对托管在此基础结构上的内容的控制。您还负责所用 AWS 服务的安全配置和管理任务。有关数据隐私的更多信息，请参阅[数据隐私常见问题](https://aws.amazon.com/compliance/data-privacy-faq/)。有关欧洲数据保护的信息，请参阅 *AWS Security Blog* 上的 [AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

 我们建议您通过以下方式保护您的数据：
+  在 IAM Identity Center 中启用多重身份验证（MFA）。
+  使用 TLS 与 AWS 资源通信。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+  使用设置 API 和用户活动日志 AWS CloudTrail。有关使用 CloudTrail 跟踪捕获 AWS 活动的信息，请参阅《*AWS CloudTrail 用户指南》*中的[使用跟 CloudTrail 踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+  使用 AWS 加密解决方案以及 AWS 服务中的所有默认安全控制。

 强烈建议您切勿将机密信息或敏感信息（如您客户的电子邮件地址）放入标签或自由格式文本字段（如**名称**字段）。这包括您使用控制台 AWS IAM Identity Center、 AWS CLI API 或使用其他 AWS 服务时 AWS SDKs。在用于名称的标签或自由格式文本字段中输入的任何数据都可能会用于诊断日志。

## 传输中加密
<a name="encryption-in-transit"></a>

 IAM Identity Center 使用传输层安全性协议（TLS）1.2 或 TLS 1.3 加密协议自动加密所有网络间数据，从而保护往返服务的过程中的传输中数据。使用 IAM 进行身份验证并发送到 IAM 身份中心 APIs、身份存储 API 或 OIDC API 的直接 HTTPS 请求使用签[AWS 名版本 4 算法进行签名](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)，以建立安全连接。

## 数据隐私
<a name="data-privacy"></a>

 借助 IAM Identity Center，您保留对组织数据的控制权。您存储在 IAM Identity Center 中的用户和群组身份与其他 AWS 服务（例如[AWS 托管应用程序](https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps.html)）共享，前提是您通过 IAM Identity Center 启用这些身份，并且这些服务需要这些服务。

 有关更多信息，请参阅 [AWS 数据隐私常见问题解答](https://aws.amazon.com/compliance/data-privacy-faq/)。

## 数据留存
<a name="data-retention"></a>

 IAM Identity Center 会存储您的数据，例如用户和组身份以及元数据，直到您从服务中删除它们。当您删除 IAM Identity Center 实例时，其中包含的数据也会被删除。

# 静态加密
<a name="encryption-at-rest"></a>

 IAM Identity Center 使用以下密钥类型提供加密以保护静态数据：
+  **AWS 拥有的密钥 （默认密钥类型）**— IAM Identity Center 默认使用这些密钥来自动加密您的数据。您无法查看、管理、审核其使用情况，也无法将 AWS 拥有的密钥用于其他目的。IAM Identity Center 完全处理密钥管理以保护您的数据安全，您无需采取任何操作。有关更多信息，请参阅《[https://docs.aws.amazon.com/kms/latest/developerguide/overview.html](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)》中的 [AWS 拥有密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。
+  **客户自主管理型密钥** - 在 IAM Identity Center 的组织实例中，您可以选择对称客户自主管理型密钥来对您的员工身份数据（例如用户和组属性）进行静态加密。您创建、拥有并管理这些加密密钥。由于您可以完全控制这层加密，因此可以执行以下任务：
  +  制定和维护密钥策略，将密钥的访问权限限制为只有需要访问权限的 IAM 委托人，例如 IAM Identity Center AWS Organizations 及其管理员。[AWS 托管应用程序](awsapps.md)
  +  制定并维护用于密钥访问（包括跨账户访问）的 IAM 策略 
  +  启用和禁用密钥策略 
  +  轮换加密材料 
  +  审计需要密钥访问权限的数据访问 
  +  添加 标签 
  +  创建密钥别名 
  +  安排密钥删除 

 要了解如何在 IAM Identity Center 中实施客户自主管理型 KMS 密钥，请参阅 [在中实现客户托管的 KMS 密钥 AWS IAM Identity Center](identity-center-customer-managed-keys.md)。有关客户自主管理型密钥的更多信息，请参阅《*AWS Key Management Service 开发人员指南*》中的[客户自主管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**注意**  
 IAM Identity Center 使用 AWS 自有的 KMS 密钥自动启用静态加密，从而免费保护客户数据。但是，使用客户管理的密钥需要 AWS KMS 付费。有关定价的更多信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。

 **实施客户自主管理型密钥的注意事项：**
+  **专用密钥**：我们建议为每个 IAM Identity Center 实例创建一个新的专用客户自主管理型 KMS 密钥，而不是重用现有密钥。这种方法可以更清晰地分离职责，简化访问控制管理，并使安全审计更直接。拥有专用密钥还可以通过将密钥更改的影响限制在单个 IAM Identity Center 实例来降低风险。
+  **在多个实例中使用 IAM 身份中心 AWS 区域**：如果您计划将您的 IAM 身份中心实例复制到其他实例 AWS 区域，则需要使用客户托管的 KMS 密钥进行静态加密。多区域 IAM 身份中心不支持默认 AWS 拥有的 KMS 密钥类型。有关更多信息，请参阅 [跨多个 IAM 身份中心使用 AWS 区域](multi-region-iam-identity-center.md)。

**注意**  
 IAM Identity Center 在加密您的员工身份数据时使用[信封加密](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html#envelope-encryption)。您的 KMS 密钥充当包装密钥的角色，用于加密实际用于加密数据的数据密钥。

有关 AWS KMS 的更多信息，请参阅[什么是 AWS 密钥管理服务？](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)

## IAM Identity Center 加密上下文
<a name="iam-identity-center-encryption-context"></a>

 [加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)是一组可选的非秘密密钥值对，其中包含有关数据的其他上下文信息。 AWS KMS 使用加密上下文作为其他经过身份验证的数据来支持经过身份验证的加密。当您在加密数据的请求中包含加密上下文时，会将加密上下文 AWS KMS 绑定到加密数据。要解密数据，您必须在请求中包含相同的加密上下文。有关加密上下文的更多信息，请参阅《[AWS KMS 开发人员指南](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)》。

 IAM Identity Center 使用以下内容中的加密上下文密钥：aws: sso: instance-arn、aws: identitystore: identitystore-arn 和。 tenant-key-id例如，以下加密上下文可能出现在 AWS KMS I [AM Identity Center API 调用的 API](https://docs.aws.amazon.com/singlesignon/latest/APIReference/welcome.html) 操作中。

```
"encryptionContext": {
    "tenant-key-id": "ssoins-1234567890abcdef",
    "aws:sso:instance-arn": "arn:aws:sso:::instance/ssoins-1234567890abcdef"
}
```

 以下加密上下文可能会出现在[身份存储 AWS KMS API 调用的 API](https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/welcome.html) 操作中。

```
"encryptionContext": {
    "tenant-key-id": "12345678-1234-1234-1234-123456789012",
    "aws:identitystore:identitystore-arn": "arn:aws:identitystore::123456789012:identitystore/d-1234567890"
}
```

## 使用加密上下文控制对客户托管密钥的访问
<a name="using-encryption-context-to-control-access-to-your-customer-managed-key"></a>

 您可以使用密钥策略和 IAM 策略中的加密上下文作为条件来控制对您的对称客户托管密钥的访问。[高级 KMS 密钥策略语句](advanced-kms-policy.md) 中的一些密钥策略模板包含此类条件，以确保密钥仅与特定的 IAM Identity Center 实例一起使用。

## 监控 IAM Identity Center 的加密密钥
<a name="monitoring-your-encryption-keys-for-iam-identity-center"></a>

 当您将客户托管的 KMS 密钥与 IAM 身份中心实例一起使用时，您可以使用[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)或 A [mazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 来跟踪 IAM 身份中心发送到的请求 AWS KMS。中列出了 IAM 身份中心调用的 KMS API 操作[步骤 2：准备 KMS 密钥策略语句](identity-center-customer-managed-keys.md#choose-kms-key-policy-statements)。 CloudTrail 这些 API 操作的事件包含加密上下文，这使您可以监控 IAM Identity Center 实例调用的 AWS KMS API 操作，以访问由您的客户托管密钥加密的数据。

 AWS KMS API 操作 CloudTrail 事件中的加密上下文示例：

```
{
"requestParameters": {
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "encryptionContext": {
            "aws:sso:instance-arn": "arn:aws:sso:::instance/ssoins-xxxxxxxxxxxxxxxx",
            "tenant-key-id": "ssoins-xxxxxxxxxxxxxxxx"
        }
    }
}
```

## AWS 托管应用程序对 IAM 身份中心身份属性的存储、加密和删除
<a name="data-encryption-deletion-considerations"></a>

 您部署的某些 AWS 托管应用程序（例如 S AWS ystems Manager 和 Amazon CodeCatalyst）会将来自 IAM 身份中心的特定用户和群组属性存储在自己的数据存储中。 AWS IAM Identity Center在 IAM Identity Center 中使用客户托管 KMS 密钥进行静态加密不会扩展到存储在 AWS 托管应用程序中的 IAM Identity Center 用户和群组属性。 AWS 托管应用程序对其存储的数据支持不同的加密方法。最后，当您在 IAM Identity Center 中删除用户和群组属性时，这些 AWS 托管应用程序可能会在删除这些信息后继续将其存储在 IAM Identity Center 中。有关存储在应用程序中的数据的加密和安全性，请参阅 AWS 托管应用程序的用户指南。

# 在中实现客户托管的 KMS 密钥 AWS IAM Identity Center
<a name="identity-center-customer-managed-keys"></a>

客户管理的密 AWS 钥是您创建、拥有和管理的密钥管理服务密钥。要在 AWS IAM Identity Center 中实施客户托管的 KMS 密钥进行静态加密，请执行以下步骤：

**重要**  
 某些 AWS 托管应用程序不能与配置了客户托管 KMS 密钥的 AWS IAM 身份中心一起使用。请参阅[AWS 可与 IAM 身份中心配合使用的托管应用程序](awsapps-that-work-with-identity-center.md)。

1.  [步骤 1：确定组织的使用案例](#identify-use-cases) - 要正确定义 KMS 密钥的使用权限，您需要确定整个组织的相关使用案例。KMS 密钥权限由 KMS 密钥策略语句和基于身份的策略组成，它们协同工作以允许适当的 IAM 主体为其特定使用案例使用 KMS 密钥。

1.  [步骤 2：准备 KMS 密钥策略语句](#choose-kms-key-policy-statements) - 根据步骤 1 中确定的使用案例选择相关的 KMS 密钥策略语句模板，并填写必需的标识符和 IAM 主体名称。从基线 KMS 密钥策略语句开始，如果您的安全策略要求，请按照高级 KMS 密钥策略语句中的描述对其进行细化。

1.  [步骤 3：创建客户自主管理型 KMS 密钥](#create-customer-managed-kms-key)-在 KMS 中创建符合 IAM 身份中心要求的 AWS KMS 密钥，并将步骤 2 中准备的 KMS 密钥策略声明添加到 KMS 密钥策略中。

1.  [步骤 4：为 KMS 密钥的跨账户使用配置 IAM 策略](#configure-iam-policies-kms-key) - 根据步骤 1 中确定的使用案例选择相关的 IAM 策略语句模板，并通过填写密钥 ARN 来准备使用它们。然后，通过将准备好的 IAM 策略语句添加到主体的 IAM 策略中，允许每个特定使用案例的 IAM 主体跨账户使用 KMS 密钥。

1.  [步骤 5：在 IAM Identity Center 中配置 KMS 密钥](#configure-kms-key-in-iam-identity-center) - 在您的 IAM Identity Center 实例中启用客户自主管理型 KMS 密钥，以将其用于静态加密。

## 步骤 1：确定组织的使用案例
<a name="identify-use-cases"></a>

 在创建和配置客户自主管理型 KMS 密钥之前，请确定您的使用案例并准备所需的 KMS 密钥权限。有关 KMS 密钥策略的更多信息，请参阅《[AWS KMS 开发人员指南》](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

调用 IAM 身份中心服务的 IAM 委托人 APIs 需要权限。例如，可以通过权限集策略授权授权管理员使用这些 APIs 权限。当使用客户托管密钥配置 IAM 身份中心时，IAM 委托人还必须有权通过 IAM 身份中心服务 APIs使用 KMS API。您在两个地方定义这些 KMS API 权限：KMS 密钥策略和与 IAM 主体关联的 IAM 策略中。

KMS 密钥权限包括如下：

1. 您在 [步骤 3：创建客户自主管理型 KMS 密钥](#create-customer-managed-kms-key) 中创建 KMS 密钥时在密钥上指定的 KMS 密钥策略语句。

1. 您在 [步骤 4：为 KMS 密钥的跨账户使用配置 IAM 策略](#configure-iam-policies-kms-key) 中创建 KMS 密钥后为 IAM 主体指定的 IAM 策略语句。

 下表指定了相关使用案例以及需要使用您的 KMS 密钥权限的 IAM 主体。


|  使用案例  |  需要使用 KMS 密钥权限的 IAM 主体  |  必需/可选  | 
| --- | --- | --- | 
|  AWS IAM 身份中心的使用  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/singlesignon/latest/userguide/identity-center-customer-managed-keys.html)  | 必需 | 
|  在 IAM 身份中心使用 AWS 托管应用程序  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/singlesignon/latest/userguide/identity-center-customer-managed-keys.html)  | 可选 | 
|  在启用 AWS Control Tower 的 AWS IAM 身份中心实例上使用  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/singlesignon/latest/userguide/identity-center-customer-managed-keys.html)  | 可选 | 
|  通过 IA AWS M 身份中心对 Amazon EC2 实例进行单点登录  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/singlesignon/latest/userguide/identity-center-customer-managed-keys.html)  | 可选 | 
|  使用 IAM 委托人调用 IAM Identity Center 服务的任何其他 APIs 用例，例如客户托管的应用程序、权限集配置工作流程或 AWS Lambda 函数  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/singlesignon/latest/userguide/identity-center-customer-managed-keys.html)  | 可选 | 

**注意**  
 表中列出的多个 IAM 委托人需要 AWS KMS API 权限。但是，为了保护您在 IAM 身份中心中的用户和群组数据，只有 IAM 身份中心和身份存储服务可以直接调用 AWS KMS API。

## 步骤 2：准备 KMS 密钥策略语句
<a name="choose-kms-key-policy-statements"></a>

确定与您的组织相关的使用案例后，您可以准备相应的 KMS 密钥策略语句。

1.  选择与您组织的使用案例匹配的 KMS 密钥策略语句。从基线策略模板开始。如果您需要基于安全要求的更具体策略，可以使用 [高级 KMS 密钥策略语句](advanced-kms-policy.md) 中的示例修改策略语句。有关此决策的指导，请参阅 [选择基线与高级 KMS 密钥策略语句的注意事项](considerations-for-customer-managed-kms-keys-advanced.md#kms-policy-considerations-advanced-vs-baseline)。此外，[基线 KMS 密钥和 IAM 策略语句](baseline-KMS-key-policy.md) 中的每个基线部分都包含相关的注意事项。

1.  将相关策略复制到编辑器中，并在 KMS 密钥策略语句中插入所需的标识符和 IAM 主体名称。有关查找引用标识符值的帮助，请参阅 [在哪里可以找到所需的标识符](#find-the-required-identifiers)。

以下是每个使用案例的基线策略模板。使用 KMS 密钥仅需要 AWS IAM 身份中心的第一组权限。我们建议您查看适用的子部分以获取更多使用案例特定信息。
+  [用于 IAM Identity Center 的基线 KMS 密钥策略语句（必需）](baseline-KMS-key-policy.md#baseline-kms-key-policy-statements-for-use-of-iam-identity-center-mandatory) 
+  [用于 AWS 托管应用程序的基准 KMS 密钥和 IAM 策略声明](baseline-KMS-key-policy.md#baseline-kms-key-policy-statements-for-use-of-aws-managed-applications) 
+  [供使用的基准 KMS 密钥声明 AWS Control Tower](baseline-KMS-key-policy.md#baseline-kms-key-policy-statements-for-specific-use-cases) 
+  [基准 KMS 密钥和 IAM 策略声明，用于对 Amazon EC2 实例使用 IAM 身份中心](baseline-KMS-key-policy.md#baseline-kms-key-policy-statements-for-use-of-sso-to-amazon-ec2-windows-instances) 
+  [用于与 IAM Identity Center 配合使用的自定义工作流的基线 KMS 密钥和 IAM 策略语句](baseline-KMS-key-policy.md#baseline-kms-key-policy-statements-for-use-of-custom-workflows-with-iam-identity-center) 

**重要**  
 修改已由 IAM Identity Center 使用的密钥的 KMS 密钥策略时请务必谨慎。虽然 IAM Identity Center 在您初始配置 KMS 密钥时会验证加密和解密权限，但它无法验证后续的策略更改。无意中移除必要的权限可能会中断您的 IAM Identity Center 的正常运行。有关排查 IAM Identity Center 中客户自主管理型密钥相关常见错误的指导，请参阅 [对客户管理的密钥进行故障排除 AWS IAM Identity Center](cmk-related-errors.md)。

**注意**  
 IAM Identity Center 及其关联的 Identity Store 需要服务级权限才能使用您的客户自主管理型 KMS 密钥。此要求扩展到 APIs 使用服务证书调用 IAM Identity Center 服务的 AWS 托管应用程序。对于通过 APIs 正[向访问会话](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)调用 IAM Identity Center 服务的其他用例，只有发起方 IAM 委托人（例如管理员）需要 KMS 密钥权限。值得注意的是，使用 AWS 访问门户和 AWS 托管应用程序的最终用户不需要直接的 KMS 密钥权限，因为这些权限是通过相应的服务授予的。

## 步骤 3：创建客户自主管理型 KMS 密钥
<a name="create-customer-managed-kms-key"></a>

您可以使用 AWS 管理控制台或 KMS 创建客户托管 AWS 密钥 APIs。在创建密钥时，将您在步骤 2 中准备的 KMS 密钥策略语句添加到 KMS 密钥策略中。有关详细说明，包括关于默认 KMS 密钥策略的指南，请参阅《[AWS Key Management Service 开发人员指南](https://docs.aws.amazon.com/kms/latest/developerguide/)》。

密钥必须满足以下要求：
+ KMS 密钥必须与 IAM 身份中心实例位于同一 AWS 区域
+ 您可以选择多区域密钥或单区域密钥。但是，如果您计划同时使用 IAM 身份中心， AWS 区域 则必须创建多区域 KMS 密钥。您无法将单区域 KMS 密钥转换为多区域 KMS 密钥，因此除非您对使用单区域 KMS 密钥有特殊要求，否则我们建议您从多区域 KMS 密钥开始。
+ KMS 密钥必须是配置为“加密和解密”用途的对称密钥
+ KMS 密钥必须与 IAM Identity Center 的组织实例位于同一个 AWS Organizations 管理账户中

**注意**  
如果您计划将此 KMS 密钥复制到要复制您的 IAM 身份中心的区域，我们建议您先完成本节中的设置，然后按照中的指导进行操作 [将 IAM 身份中心复制到其他区域](replicate-to-additional-region.md)

## 步骤 4：为 KMS 密钥的跨账户使用配置 IAM 策略
<a name="configure-iam-policies-kms-key"></a>

使用其他 AWS 账户的 IAM 身份中心服务的 APIs 任何 IAM 委托人（例如 IAM Identity Center 委托管理员）还需要一份允许通过这些账户使用 KMS 密钥的 IAM 政策声明 APIs。

对于在步骤 1 中确定的每个使用案例：

1. 在“基线 KMS 密钥和 IAM 策略语句”中找到相关的 IAM 策略语句模板。

1. 将模板复制到编辑器中，并填写密钥 ARN（在步骤 3 中创建 KMS 密钥后，此 ARN 现已可用）。有关查找密钥 ARN 值的帮助，请参阅 [在哪里可以找到所需的标识符](#find-the-required-identifiers)。

1.  在中 AWS 管理控制台，找到与用例关联的 IAM 委托人的 IAM 策略。此策略的位置因使用案例和授予访问权限的方式而异。
   + 对于在 IAM 中直接授予的访问权限，您可以找到 IAM 主体，例如 IAM 控制台中的 IAM 角色。
   + 对于通过 IAM Identity Center 授予的访问权限，您可以在 IAM Identity Center 控制台中找到相关的权限集。

1. 将特定于使用案例的 IAM 策略语句添加到 IAM 角色并保存更改。

**注意**  
此处所述的 IAM 策略是基于身份的策略。虽然此类策略可以附加到 IAM 用户、组和角色，但我们建议尽可能使用 IAM 角色。有关 IAM 角色与 IAM 用户的更多信息，请参阅 IAM 用户指南。

### 某些 AWS 托管应用程序中的其他配置
<a name="additional-config-in-some-aws-apps"></a>

某些 AWS 托管应用程序要求您配置服务角色以允许应用程序使用 IAM Identity Center 服务 APIs。如果您的组织将 AWS 托管应用程序与 IAM Identity Center 配合使用，请为每个已部署的应用程序完成以下步骤：

1. 查看应用程序的用户指南，确认权限是否已更新，以包含将该应用程序与 IAM Identity Center 一起使用时所需的 KMS 密钥相关权限。

1. 如果是，请按照应用程序用户指南中的说明更新权限，以避免中断应用程序的操作。

**注意**  
 如果您不确定 AWS 托管应用程序是否使用这些权限，我们建议您查看所有已部署的 AWS 托管应用程序的用户指南。对于每个需要此配置的应用程序，您只需执行一次此配置。

## 步骤 5：在 IAM Identity Center 中配置 KMS 密钥
<a name="configure-kms-key-in-iam-identity-center"></a>

**重要**  
在执行此步骤之前：  
确认您的 AWS 托管应用程序与客户托管的 KMS 密钥兼容。有关兼容应用程序的列表，请参阅[可与 IAM Identity Center 一起使用的AWS 托管应用程序](https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps-that-work-with-identity-center.html)。如果您有不兼容的应用程序，请勿继续。
配置使用 KMS 密钥所需的必要权限。如果没有适当的权限，此步骤可能会失败或中断 IAM Identity Center 管理、 AWS 托管应用程序的使用以及其他需要 KMS 密钥权限的使用案例。有关更多信息，请参阅 [步骤 1：确定组织的使用案例](#identify-use-cases)。
确保 AWS 托管应用程序和使用 IAM 角色调用 IAM 身份中心服务的 APIs 客户托管应用程序的权限也允许通过 IAM 身份中心服务使用 KMS 密钥 APIs。某些 AWS 托管应用程序要求您配置权限（例如服务角色）才能使用这些权限 APIs。请参阅每个已部署的 AWS 托管应用程序的用户指南，以确认是否需要添加特定的 KMS 密钥权限。

### 在启用新的 IAM Identity Center 组织实例时指定 KMS 密钥
<a name="specify-kms-key-new-instance"></a>

在启用新的 IAM Identity Center 组织实例时，您可以在设置过程中指定客户自主管理型 KMS 密钥。这可确保实例从一开始就使用您的密钥进行静态加密。开始之前，请参阅 [客户自主管理型 KMS 密钥和高级 KMS 密钥策略的注意事项](considerations-for-customer-managed-kms-keys-advanced.md)。

1. 在**启用 IAM Identity Center **页面上，展开**静态加密**部分。

1. 选择**管理加密**。

1. 选择**客户自主管理型密钥**。

1. 对于 **KMS 密钥**，请执行以下操作之一：

   1. 选择**从您的 KMS 密钥**中选择，然后从下拉列表中选择您创建的密钥。

   1. 选择**输入 KMS 密钥 ARN**，然后输入密钥的完整 ARN。

1. 选择**保存**。

1. 选择**启用**，以完成设置。

有关更多信息，请参阅[启用 IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/enable-identity-center.html)。

### 更改现有 IAM Identity Center 组织实例的密钥配置
<a name="change-existing-instance-kms"></a>

您可以随时将客户自主管理型 KMS 密钥更改为另一个密钥，或切换到 AWS 拥有密钥。

------
#### [ Console ]

 **更改 KMS 密钥配置** 

1. 打开 IAM 身份中心控制台，网址为[ https://console.aws.amazon.com/singlesignon/](https://console.aws.amazon.com/singlesignon/)。

1. 在导航窗格中，选择**设置**。

1. 选择**其他设置**选项卡。

1. 选择**管理加密**。

1. 选择下列选项之一：

   1. **客户自主管理型密钥** - 从下拉列表中选择不同的客户自主管理型密钥，或输入新的密钥 ARN。

   1. **AWS 拥有的密钥**-切换到默认的加密选项。

1. 选择**保存**。

------
#### [ AWS CLI ]

 **将现有 IAM Identity Center 组织实例更改为使用 KMS 客户自主管理型密钥** 

```
aws sso-admin update-instance \
    --instance-arn arn:aws:sso:::instance/ssoins-1234567890abcdef \
    --encryption-configuration \
        KeyType=CUSTOMER_MANAGED_KEY,KmsKeyArn=arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab
```

 **将现有 IAM Identity Center 组织实例更改为使用 AWS 拥有的密钥** 

```
aws sso-admin update-instance \
    --instance-arn arn:aws:sso:::instance/ssoins-1234567890abcdef \
    --encryption-configuration KeyType=AWS_OWNED_KMS_KEY
```

------

 **客户自主管理型密钥注意事项** 
+ 更新用于 IAM Identity Center 操作的 KMS 密钥配置不会影响 IAM Identity Center 中的活动用户会话。 APIs 在此过程中，您可以继续使用 AWS 访问门户、IAM 身份中心控制台和 IAM 身份中心服务。
+ 当切换到新的 KMS 密钥时，IAM Identity Center 会验证其是否可以成功使用该密钥进行加密和解密。如果您在设置密钥策略或 IAM 策略时出错，控制台将显示说明性错误消息，并且将继续使用先前的 KMS 密钥。
+ 默认的年度 KMS 密钥轮换将自动进行。您可以参阅《[AWS KMS 开发人员指南](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)》以获取有关[密钥轮换](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)、[监控 AWS KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-overview.html)和[控制密钥删除访问权限](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys-adding-permission.html)等主题的信息。

**重要**  
 如果您的 IAM Identity Center 实例正在使用的客户自主管理型 KMS 密钥被删除、禁用或因不正确的 KMS 密钥策略而无法访问，您的员工用户和 IAM Identity Center 管理员将无法使用 IAM Identity Center。访问丢失可能是暂时的（可以更正密钥策略）或永久的（已删除的密钥无法恢复），具体取决于情况。我们建议您[限制访问](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys-adding-permission.html)关键操作，例如删除或禁用 KMS 密钥。此外，我们建议您的组织设置[AWS 漏洞访问程序，以确保您的特权用户 AWS 在无法访问](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/ag.sad.5-implement-break-glass-procedures.html) IAM Identity Center 时能够进行访问。

## 在哪里可以找到所需的标识符
<a name="find-the-required-identifiers"></a>

 在为客户自主管理型 KMS 密钥配置权限时，您需要特定的 AWS 资源标识符来完成密钥策略和 IAM 策略语句模板。在 KMS 密钥策略语句中插入所需的标识符（例如，组织 ID）和 IAM 主体名称。

 以下是在 AWS 管理控制台中查找这些标识符的指南。

 **IAM Identity Center Amazon 资源名称（ARN）和 Identity Store ARN** 

 IAM 身份中心实例是一种具有自己唯一 ARN 的 AWS 资源，例如 arn: aws: sso::: instance/ssoins-1234567890abcdef。ARN 遵循服务授权参考中 IAM Identity Center 资源类型部分记录的模式。

 每个 IAM Identity Center 实例都有一个关联的 Identity Store，用于存储用户和组身份。Identity Store 有一个称为 Identity Store ID 的唯一标识符（例如，d-123456789a）。ARN 遵循[服务授权参考](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiamidentitycenterdirectory.html)中 Identity Store 资源类型部分记录的模式。

 您可以在 IAM Identity Center 的“设置”页面上找到 ARN 和 Identity Store ID 值。Identity Store ID 位于“身份源”选项卡中。

 **AWS Organizations ID** 

 如果要在密钥策略中指定组织 ID（例如，o-exampleorg1），可以在 IAM Identity Center 和 Organizations 控制台的“设置”页面找到其值。ARN 遵循服务授权参考中 Organizations 资源类型部分记录的模式。

 **KMS 密钥 ARN** 

 您可以在控制台中找到 KMS 密钥的 ARN。 AWS KMS 在左侧选择“客户自主管理型密钥”，单击要查找 ARN 的密钥，您将在“常规配置”部分看到它。ARN 遵循服务授权参考 AWS KMS 资源类型部分中记录的模式。

 有关中的密钥策略 AWS KMS 和疑难解答 AWS KMS 权限的更多信息，请参阅《 AWS Key Management Service 开发人员指南》。有关 IAM 策略及其 JSON 表示的更多信息，请参阅 IAM 用户指南。

# 基线 KMS 密钥和 IAM 策略语句
<a name="baseline-KMS-key-policy"></a>

此处提供的基线 KMS 密钥和基于身份的策略可作为常见需求的基础。我们还建议您查看 [高级 KMS 密钥策略语句](advanced-kms-policy.md)，其中提供更细粒度的访问控制，例如确保 KMS 密钥仅可由特定的 IAM Identity Center 实例或 AWS 托管应用程序访问。在使用高级 KMS 密钥策略语句之前，请查看 [选择基线与高级 KMS 密钥策略语句的注意事项](considerations-for-customer-managed-kms-keys-advanced.md#kms-policy-considerations-advanced-vs-baseline)。

以下部分提供了每个使用案例的基线策略语句。展开与您的用例相匹配的部分，然后复制 KMS 密钥策略声明。然后，返回到[步骤 2：准备 KMS 密钥策略语句](identity-center-customer-managed-keys.md#choose-kms-key-policy-statements)。

## 用于 IAM Identity Center 的基线 KMS 密钥策略语句（必需）
<a name="baseline-kms-key-policy-statements-for-use-of-iam-identity-center-mandatory"></a>

在 [步骤 2：准备 KMS 密钥策略语句](identity-center-customer-managed-keys.md#choose-kms-key-policy-statements) 中使用以下 KMS 密钥策略语句模板，允许 IAM Identity Center、其关联的 Identity Store 和 IAM Identity Center 管理员使用 KMS 密钥。
+ 在管理员策略声明的委托人元素中，使用 “arn: aws: iam:: 111122223333: root” 的格式指定 IAM Identity Center 管理账户（即 AWS 组织管理账户和委托管理账户）的账户委托人。 AWS 
+ 在 PrincipalArn 元素中，将示例 ARNs 替换为 IAM 身份中心管理员的 IAM 角色。

  您可以指定下列之一：
  + 特定的 IAM 角色 ARN：

     ` "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/ap-southeast-2/AWSReservedSSO_permsetname_12345678"` 
  + 通配符模式（推荐）：

     ` "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/ap-southeast-2/AWSReservedSSO_permsetname_*"` 

  使用通配符（`*`）可以防止在权限集被删除和重新创建时丢失访问权限，因为 Identity Center 会为重新创建的权限集生成新的唯一标识符。有关实现示例，请参阅[自定义信任策略示例](referencingpermissionsets.md#custom-trust-policy-example)。
+ 在 SourceAccount 元素中，指定 IAM 身份中心账户 ID。
+ Identity Store 有自己的服务主体 `identitystore.amazonaws.com`，必须允许其使用 KMS 密钥。
+ 这些政策声明允许您在特定 AWS 账户中的 IAM 身份中心实例使用 KMS 密钥。要限制对特定 IAM Identity Center 实例的访问，请参阅 [高级 KMS 密钥策略语句](advanced-kms-policy.md)。每个 AWS 账户只能有一个 IAM 身份中心实例。

KMS 密钥策略语句

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowIAMIdentityCenterAdminToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:root",
          "arn:aws:iam::444455556666:root"
        ]
      },
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKeyWithoutPlaintext"
      ],
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_Admin_*",
            "arn:aws:iam::444455556666:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_DelegatedAdmin_*"
          ]
        },
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "*"
        }
      }
    },
    {
      "Sid": "AllowIAMIdentityCenterAdminToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:root",
          "arn:aws:iam::444455556666:root"
        ]
      },
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKeyWithoutPlaintext"
      ],
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_Admin_*",
            "arn:aws:iam::444455556666:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_DelegatedAdmin_*"
          ]
        },
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        }
      }
    },
    {
      "Sid": "AllowIAMIdentityCenterAdminToDescribeTheKMSKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:root",
          "arn:aws:iam::444455556666:root"
        ]
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_Admin_*",
            "arn:aws:iam::444455556666:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_DelegatedAdmin_*"
          ]
        }
      }
    },
    {
      "Sid": "AllowIAMIdentityCenterToUseTheKMSKey",
      "Effect": "Allow",
      "Principal": {
        "Service": "sso.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:ReEncryptTo",
        "kms:ReEncryptFrom",
        "kms:GenerateDataKeyWithoutPlaintext"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:sso:instance-arn": "*"
        },
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        }
      }
    },
    {
      "Sid": "AllowIdentityStoreToUseTheKMSKey",
      "Effect": "Allow",
      "Principal": {
        "Service": "identitystore.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:ReEncryptTo",
        "kms:ReEncryptFrom",
        "kms:GenerateDataKeyWithoutPlaintext"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        },
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        }
      }
    },
    {
      "Sid": "AllowIAMIdentityCenterAndIdentityStoreToDescribeKMSKey",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "identitystore.amazonaws.com",
          "sso.amazonaws.com"
        ]
      },
      "Action": "kms:DescribeKey",
      "Resource": "*"
    }
  ]
}
```

在 [步骤 4：为 KMS 密钥的跨账户使用配置 IAM 策略](identity-center-customer-managed-keys.md#configure-iam-policies-kms-key) 中使用以下 IAM 策略语句模板，允许 IAM Identity Center 管理员使用 KMS 密钥。
+ 将 `Resource` 元素中的示例密钥 ARN 替换为您的实际 KMS 密钥 ARN。有关查找引用标识符值的帮助，请参阅 [在哪里可以找到所需的标识符](identity-center-customer-managed-keys.md#find-the-required-identifiers)。
+ 这些 IAM 政策声明向 IAM 委托人授予 KMS 密钥访问权限，但不限制哪些 AWS 服务可以发出请求。KMS 密钥策略通常提供这些服务限制。但是，您可以向此 IAM 策略添加加密上下文，以限制对特定 Identity Center 实例的使用。有关详细信息，请参阅[高级 KMS 密钥策略语句](advanced-kms-policy.md)。

IAM Identity Center 委托管理员所需的 IAM 策略语句

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [{
      "Sid": "IAMPolicyToAllowIAMIdentityCenterAdminToUseKMSkey",
      "Effect": "Allow",
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:DescribeKey"
      ],
      "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    {
      "Sid": "IAMPolicyToAllowIAMIdentityCenterAdminToListKeyAliases",
      "Effect": "Allow",
      "Action": "kms:ListAliases",
      "Resource": "*"
    }
  ]
}
```

## 用于 AWS 托管应用程序的基准 KMS 密钥和 IAM 策略声明
<a name="baseline-kms-key-policy-statements-for-use-of-aws-managed-applications"></a>

**注意**  
某些 AWS 托管应用程序不能与配置了客户托管 KMS 密钥的 IAM 身份中心一起使用。更多信息，请参阅[可与 IAM Identity Center 配合使用的AWS 托管应用程序](https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps-that-work-with-identity-center.html)。

使用以下 KMS 密钥策略声明模板[步骤 2：准备 KMS 密钥策略语句](identity-center-customer-managed-keys.md#choose-kms-key-policy-statements)允许 AWS 托管应用程序及其管理员使用 KMS 密钥。
+ 在 AWS Organizations 身份证和 SourceOrgId 条件中插入您的 PrincipalOrg身份证。有关查找引用标识符值的帮助，请参阅 [在哪里可以找到所需的标识符](identity-center-customer-managed-keys.md#find-the-required-identifiers)。
+ 这些政策声明允许您的任何 AWS 托管应用程序和 AWS 组织中的任何 IAM 委托人（应用程序管理员）通过 IAM Identity Center 和 Identity kms: Store 使用 Decrypt。要将这些策略语句限制为特定的 AWS 托管应用程序、账户或 IAM Identity Center 实例，请参阅 [高级 KMS 密钥策略语句](advanced-kms-policy.md)。

  您可以通过将 ` *` 替换为特定的 IAM 主体来限制对特定应用程序管理员的访问。为防止在重新创建权限集时 IAM 角色名称发生更改，请使用 [自定义信任策略示例](referencingpermissionsets.md#custom-trust-policy-example) 中的方法。有关更多信息，请参阅 [选择基线与高级 KMS 密钥策略语句的注意事项](considerations-for-customer-managed-kms-keys-advanced.md#kms-policy-considerations-advanced-vs-baseline)。

KMS 密钥策略语句

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowAppAdminsInTheSameOrganizationToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "o-a1b2c3d4e5"
        },
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "*"
        }
      }
    },
    {
      "Sid": "AllowAppAdminsInTheSameOrganizationToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "o-a1b2c3d4e5"
        },
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        }
      }
    },
    {
      "Sid": "AllowManagedAppsToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "*"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        },
        "StringEquals": {
          "aws:SourceOrgID": "o-a1b2c3d4e5"
        }
      }
    },
    {
      "Sid": "AllowManagedAppsToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        },
        "StringEquals": {
          "aws:SourceOrgID": "o-a1b2c3d4e5"
        }
      }
    }
  ]
}
```

在 [步骤 4：为 KMS 密钥的跨账户使用配置 IAM 策略](identity-center-customer-managed-keys.md#configure-iam-policies-kms-key) 中使用以下 IAM 策略语句模板，允许 AWS 托管应用程序的管理员从成员账户使用 KMS 密钥。
+ 将 Resource 元素中的示例 ARN 替换为您的实际 KMS 密钥 ARN。有关查找引用标识符值的帮助，请参阅 [在哪里可以找到所需的标识符](identity-center-customer-managed-keys.md#find-the-required-identifiers)。
+ 某些 AWS 托管应用程序要求您为 IAM 身份中心服务配置权限 APIs。在 IAM Identity Center 中配置客户自主管理型密钥之前，请验证这些权限是否也允许使用 KMS 密钥。有关特定的 KMS 密钥权限要求，请参阅您部署的每个 AWS 托管应用程序的文档。

 AWS 托管应用程序管理员需要的 IAM 政策声明：

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [{
    "Sid": "AllowIAMIdentityCenterAdminToUseTheKMSKeyViaIdentityCenterAndIdentityStore",
    "Effect": "Allow",
    "Action": "kms:Decrypt",
    "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "Condition": {
      "StringLike": {
        "kms:ViaService": [
          "sso.*.amazonaws.com",
          "identitystore.*.amazonaws.com"
        ]
      }
    }
  }]
}
```

## 供使用的基准 KMS 密钥声明 AWS Control Tower
<a name="baseline-kms-key-policy-statements-for-specific-use-cases"></a>

使用中的[步骤 2：准备 KMS 密钥策略语句](identity-center-customer-managed-keys.md#choose-kms-key-policy-statements)以下 KMS 密钥声明模板允许 Cont AWS rol Tower 管理员使用 KMS 密钥。
+ 在委托人元素中，指定用于访问 IAM 身份中心服务 APIs的 IAM 委托人。有关 IAM 主体的更多信息，请参阅《*IAM 用户指南*》中的[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。
+ 这些政策声明允许 Cont AWS rol Tower 管理员通过您的任何 IAM 身份中心实例使用 KMS 密钥。但是，Cont AWS rol Tower 限制访问同一组织中 IAM 身份中心的 AWS 组织实例。由于这一限制，如中所述，进一步将 KMS 密钥限制为特定的 IAM Identity Center 实例没有任何实际好处[高级 KMS 密钥策略语句](advanced-kms-policy.md)。
+ 要帮助防止 IAM 角色名称在重新创建权限集时发生更改，请使用中[自定义信任策略示例](referencingpermissionsets.md#custom-trust-policy-example)描述的方法。

KMS 密钥策略语句：

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowControlTowerAdminRoleToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/AWSControlTowerAdmin"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "*"
        }
      }
    },
    {
      "Sid": "AllowControlTowerAdminRoleToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/AWSControlTowerAdmin"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        }
      }
    }
  ]
}
```

AWS Control Tower 不支持委托管理，因此，您无需为其管理员配置 IAM 策略。

**重要**  
前面的政策声明涵盖了 AWS Control Tower 服务管理的操作，例如自动注册账户，其中 AWS Control Tower 扮`AWSControlTowerAdmin`演该角色。但是，对于客户发起的操作，例如通过 Account Factory 配置账户或 AWS Control Tower APIs直接致电，则 AWS Control Tower 使用[前向访问会话 (FAS)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)，并在客户自己的 IAM 角色下运行。这意味着您用于启动这些操作的 IAM 角色还需要客户托管的 KMS 密钥的`kms:Decrypt`权限。  
在上述声明旁边添加以下 KMS 密钥策略`AWSControlTowerAdmin`声明。替换为您用于*MyControlTowerRole*与之交互的 IAM 角色的 ARN AWS Control Tower，例如 IAM Identity Center 权限集角色（例如`AWSReservedSSO_PermissionSetName_*`）、用于自动化的自定义 IAM 角色或用于调 AWS Control Tower 用或的任何其他角色。 AWS Service Catalog APIs

针对客户发起的 AWS Control Tower 操作的 KMS 密钥政策声明：

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowCustomerRoleToUseTheKMSKeyViaIdentityCenterForControlTower",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyControlTowerRole"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "*"          
        }
      }
    },
    {
      "Sid": "AllowCustomerRoleToUseTheKMSKeyViaIdentityStoreForControlTower",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyControlTowerRole"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        }
      }
    }
  ]
}
```

## 基准 KMS 密钥和 IAM 策略声明，用于对 Amazon EC2 实例使用 IAM 身份中心
<a name="baseline-kms-key-policy-statements-for-use-of-sso-to-amazon-ec2-windows-instances"></a>

在中使用[步骤 2：准备 KMS 密钥策略语句](identity-center-customer-managed-keys.md#choose-kms-key-policy-statements)以下 KMS 密钥策略声明模板，允许 Amazon EC2 实例的单点登录 (SSO) 用户跨账户使用 KMS 密钥。
+ 在 Principal 字段中指定用于访问 IAM Identity Center 的 IAM 主体。有关 IAM 主体的更多信息，请参阅《*IAM 用户指南*》中的[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。
+ 此策略语句允许您的任何 IAM Identity Center 实例使用 KMS 密钥。要限制对特定 IAM Identity Center 实例的访问，请参阅 [高级 KMS 密钥策略语句](advanced-kms-policy.md)。
+ 为了有助于防止在重新创建权限集时 IAM 角色名称发生更改，请使用“自定义信任策略示例”中描述的方法。

KMS 密钥政策语句：

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowIAMIdentityCenterPermissionSetRoleToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_MyPermissionSet_1a2b3c4d5e6f7g8h"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "*"

        }
      }
    },
    {
      "Sid": "AllowIAMIdentityCenterPermissionSetRoleToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_MyPermissionSet_1a2b3c4d5e6f7g8h"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        }
      }
    }
  ]
}
```

使用中的[步骤 4：为 KMS 密钥的跨账户使用配置 IAM 策略](identity-center-customer-managed-keys.md#configure-iam-policies-kms-key)以下 IAM 策略声明模板允许 EC2 实例的 SSO 使用 KMS 密钥。

将 IAM 政策声明附加到 IAM 身份中心中用于允许 SSO 访问 Amazon EC2 实例的现有权限集。有关 IAM 策略示例，请参阅《*AWS Systems Manager 用户指南*》中的[远程桌面协议连接](https://docs.aws.amazon.com/systems-manager/latest/userguide/fleet-manager-remote-desktop-connections.html#rdp-iam-policy-examples)。
+ 将 Resource 元素中的示例 ARN 替换为您的实际 KMS 密钥 ARN。有关查找引用标识符值的帮助，请参阅 [在哪里可以找到所需的标识符](identity-center-customer-managed-keys.md#find-the-required-identifiers)。

权限集 IAM 策略：

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [{
    "Sid": "IAMPolicyToAllowKMSKeyUseViaIdentityCenterAndIdentityStore",
    "Effect": "Allow",
    "Action": "kms:Decrypt",
    "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "Condition": {
      "StringLike": {
        "kms:ViaService": [
          "sso.*.amazonaws.com",
          "identitystore.*.amazonaws.com"
        ]
      }
    }
  }]
}
```

## 用于与 IAM Identity Center 配合使用的自定义工作流的基线 KMS 密钥和 IAM 策略语句
<a name="baseline-kms-key-policy-statements-for-use-of-custom-workflows-with-iam-identity-center"></a>

使用以下 KMS 密钥策略声明模板[步骤 2：准备 KMS 密钥策略语句](identity-center-customer-managed-keys.md#choose-kms-key-policy-statements)允许 AWS Organizations 管理账户或委托管理账户中的自定义工作流程（例如客户托管的应用程序）使用 KMS 密钥。请注意，客户托管应用程序的 SAML 联合不需要 KMS 密钥权限。
+ 在委托人元素中，指定用于访问 IAM 身份中心服务 APIs的 IAM 委托人。有关 IAM 主体的更多信息，请参阅《*IAM 用户指南*》中的[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。
+ 这些策略语句允许您的工作流通过您的任何 IAM Identity Center 实例使用 KMS 密钥。要限制对特定 IAM Identity Center 实例的访问，请参阅 [高级 KMS 密钥策略语句](advanced-kms-policy.md)。
+ 要帮助防止 IAM 角色名称在重新创建权限集时发生更改，请使用中[自定义信任策略示例](referencingpermissionsets.md#custom-trust-policy-example)描述的方法。

KMS 密钥策略语句：

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowCustomWorkflowToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyCustomWorkflowRole"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "*"
        }
      }
    },
    {
      "Sid": "AllowCustomWorkflowToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyCustomWorkflowRole"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        }
      }
    }
  ]
}
```

在 [步骤 4：为 KMS 密钥的跨账户使用配置 IAM 策略](identity-center-customer-managed-keys.md#configure-iam-policies-kms-key) 中使用以下 IAM 策略语句模板，允许与自定义工作流关联的 IAM 主体跨账户使用 KMS 密钥。将 IAM 策略语句添加到 IAM 主体。
+ 将 Resource 元素中的示例 ARN 替换为您的实际 KMS 密钥 ARN。有关查找引用标识符值的帮助，请参阅 [在哪里可以找到所需的标识符](identity-center-customer-managed-keys.md#find-the-required-identifiers)。

IAM 策略语句（仅跨账户使用时需要）：

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [{
    "Sid": "AllowCustomWorkflowToUseTheKMSKeyViaIdentityCenterAndIdentityStore",
    "Effect": "Allow",
    "Action": "kms:Decrypt",
    "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "Condition": {
      "StringLike": {
        "kms:ViaService": [
          "sso.*.amazonaws.com",
          "identitystore.*.amazonaws.com"
        ]
      }
    }
  }]
}
```

## 常见用例的 KMS 密钥策略声明示例
<a name="kms-key-policy-examples-for-common-use-cases"></a>

### 带有委派管理员和托 AWS 管应用程序的 IAM 身份中心
<a name="example-identity-center-del-admin-aws-apps"></a>

本节包含 KMS 密钥策略声明示例，您可以将其用于具有委派管理员和托 AWS 管应用程序的 IAM Identity Center 实例。

**重要**  
KMS 密钥策略声明假设您的 IAM Identity Center 实例未用于任何其他需要 KMS 密钥权限的用例。要进行确认，您可以查看所有[用例](identity-center-customer-managed-keys.md#identify-use-cases)。另外，要确认您的 AWS 托管应用程序是否需要其他配置，请参阅 [某些 AWS 托管应用程序中的其他配置](identity-center-customer-managed-keys.md#additional-config-in-some-aws-apps) 

复制表格下方的 KMS 密钥策略声明并将其添加到您的 KMS 密钥策略中。此示例使用以下示例值：
+  `111122223333`-IAM 身份中心实例的账户 ID 
+  `444455556666`-委托管理账户 ID 
+  `o-a1b2c3d4e5`- AWS 组织标识 
+  ` arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_Admin_*`-根据权限集配置的 IAM 身份中心管理员的 IAM 角色的通配符模式。*Admin*这样的角色包含主区域的区域代码（本例中为 us-east-1）。
+  ` arn:aws:iam::444455556666:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_DelegatedAdmin_*`-IAM Identity Center 委托管理员的 IAM 角色的通配符模式，该角色是根据权限集预置的。*DelegatedAdmin*这样的角色包含主区域的区域代码（本例中为 us-east-1）。

如果 IAM 角色不是从权限集生成的，则 IAM 角色将看起来像普通角色，例如`arn:aws:iam::111122223333:role/idcadmin`。

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowIAMIdentityCenterAdminToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:root",
          "arn:aws:iam::444455556666:root"
        ]
      },
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKeyWithoutPlaintext"
      ],
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_Admin_*",
            "arn:aws:iam::444455556666:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_DelegatedAdmin_*"
          ]
        },
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "*"
        }
      }
    },
    {
      "Sid": "AllowIAMIdentityCenterAdminToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:root",
          "arn:aws:iam::444455556666:root"
        ]
      },
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKeyWithoutPlaintext"
      ],
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_Admin_*",
            "arn:aws:iam::444455556666:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_DelegatedAdmin_*"
          ]
        },
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        }
      }
    },
    {
      "Sid": "AllowIAMIdentityCenterAdminToDescribeTheKMSKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:root",
          "arn:aws:iam::444455556666:root"
        ]
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_Admin_*",
            "arn:aws:iam::444455556666:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_DelegatedAdmin_*"
          ]
        }
      }
    },
    {
      "Sid": "AllowIAMIdentityCenterToUseTheKMSKey",
      "Effect": "Allow",
      "Principal": {
        "Service": "sso.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:ReEncryptTo",
        "kms:ReEncryptFrom",
        "kms:GenerateDataKeyWithoutPlaintext"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:sso:instance-arn": "*"
        },
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        }
      }
    },
    {
      "Sid": "AllowIdentityStoreToUseTheKMSKey",
      "Effect": "Allow",
      "Principal": {
        "Service": "identitystore.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:ReEncryptTo",
        "kms:ReEncryptFrom",
        "kms:GenerateDataKeyWithoutPlaintext"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        },
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        }
      }
    },
    {
      "Sid": "AllowIAMIdentityCenterAndIdentityStoreToDescribeKMSKey",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "identitystore.amazonaws.com",
          "sso.amazonaws.com"
        ]
      },
      "Action": "kms:DescribeKey",
      "Resource": "*"
    },
 
   {
      "Sid": "AllowAppAdminsInTheSameOrganizationToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "o-a1b2c3d4e5"
        },
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "*"
        }
      }
    },
    {
      "Sid": "AllowAppAdminsInTheSameOrganizationToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "o-a1b2c3d4e5"
        },
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        }
      }
    },
    {
      "Sid": "AllowManagedAppsToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "*"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        },
        "StringEquals": {
          "aws:SourceOrgID": "o-a1b2c3d4e5"
        }
      }
    },
    {
      "Sid": "AllowManagedAppsToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        },
        "StringEquals": {
          "aws:SourceOrgID": "o-a1b2c3d4e5"
        }
      }
    }
  ]
}
```

# 高级 KMS 密钥策略语句
<a name="advanced-kms-policy"></a>

 使用高级 KMS 密钥策略语句为客户自主管理型 KMS 密钥实施更细粒度的访问控制。这些策略在 [基线 KMS 密钥和 IAM 策略语句](baseline-KMS-key-policy.md) 的基础上，通过添加加密上下文条件和特定于服务的限制来构建。在决定是否使用高级 KMS 密钥策略语句之前，请务必查看相关的注意事项。

## 使用加密上下文限制访问
<a name="using-encryption-context-to-restrict-access"></a>

 您可以通过在密钥策略语句中指定加密上下文条件，将 KMS 密钥使用限制为特定的 IAM Identity Center 实例。基线密钥策略语句已包含带有通用值的此上下文。将“\$1”通配符替换为特定的 Identity Center 实例 ARN 和 Identity Store ARN，以确保密钥仅与您预期的实例一起工作。您还可以将相同的加密上下文条件添加到为 KMS 密钥跨账户使用而配置的 IAM 策略中。

身份中心

```
"StringEquals": {
    "kms:EncryptionContext:aws:sso:instance-arn": "arn:aws:sso:::instance/ssoins-1234567890abcdef"
}
```

Identity Store

```
"StringEquals": {
    "kms:EncryptionContext:aws:identitystore:identitystore-arn": "arn:aws:identitystore::111122223333:identitystore/d-1234567890"
}
```

 如果您在查找这些标识符时需要帮助，请参阅[在哪里可以找到所需的标识符](identity-center-customer-managed-keys.md#find-the-required-identifiers)。

**注意**  
您只能将客户自主管理型 KMS 密钥与 IAM Identity Center 的组织实例一起使用。客户托管的密钥必须位于 AWS 组织的管理账户中，这有助于确保该密钥用于单个 IAM Identity Center 实例。但是，加密上下文机制为单实例使用提供了独立的技术保障。您还可以在用于 Identity Center 和 Identity Store 服务主体的 KMS 密钥策略语句中使用 `aws:SourceArn` 条件键。

### 实施加密上下文条件的注意事项
<a name="considerations-for-implementing-encryption-context-conditions"></a>

在实施加密上下文条件之前，请查看这些要求：
+  **DescribeKey 行动。**加密上下文不能应用于 “kms:DescribeKey” 操作，IAM Identity Center 管理员可以使用该操作。配置 KMS 密钥策略时，请排除此特定操作的加密上下文，以确保 IAM Identity Center 实例的正常运行。
+  **新实例设置。**如果您正在使用客户自主管理型 KMS 密钥启用新的 IAM Identity Center 实例，请参阅 [客户自主管理型 KMS 密钥和高级 KMS 密钥策略的注意事项](considerations-for-customer-managed-kms-keys-advanced.md)。
+  **身份源更改。**将身份源更改为 Active Directory 或从 Active Directory 更改时，需要特别注意加密上下文。请参阅[更改身份源的注意事项](manage-your-identity-source-considerations.md)。

## 策略模板
<a name="advanced-policy-templates"></a>

 根据您的安全要求从这些高级策略模板中选择。在细粒度访问控制与其引入的管理开销之间取得平衡。

此处涵盖的主题：
+  [用于特定 IAM Identity Center 实例只读使用的 KMS 策略语句](#kms-policy-statements-for-read-only-use-of-a-specific-iam-identity-center-instance)。本节展示了使用加密上下文对 IAM Identity Center 进行只读访问。
+  [完善了用于 AWS 托管应用程序的 KMS 密钥策略声明](#refined-kms-key-policy-statements-for-use-of-aws-managed-applications)。 本节演示如何使用加密上下文和应用程序信息（例如应用程序服务主体、应用程序 ARN 和 AWS 账户 ID）完善 AWS 托管应用程序的 KMS 密钥策略。

## 用于特定 IAM Identity Center 实例只读使用的 KMS 策略语句
<a name="kms-policy-statements-for-read-only-use-of-a-specific-iam-identity-center-instance"></a>

 此策略允许[安全审计员](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/SecurityAudit.html)和其他仅需要对 IAM Identity Center 进行读取访问的人员使用 KMS 密钥。

要使用此策略：

1. 将示例只读管理员 IAM 主体替换为您的实际管理员 IAM 主体

1. 将示例 IAM Identity Center 实例 ARN 替换为您的实际实例 ARN

1. 将示例 Identity Store ARN 替换为您的实际 Identity Store ARN

1. 如果使用[委托管理](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html)，请参阅 [步骤 4：为 KMS 密钥的跨账户使用配置 IAM 策略](identity-center-customer-managed-keys.md#configure-iam-policies-kms-key)

如果您需要帮助来查找这些标识符的值，请参阅[在哪里可以找到所需的标识符](identity-center-customer-managed-keys.md#find-the-required-identifiers)。

使用您的值更新模板后，返回到 [步骤 2：准备 KMS 密钥策略语句](identity-center-customer-managed-keys.md#choose-kms-key-policy-statements)，以根据需要准备其他 KMS 密钥策略语句。

单独的 “ kms:解密” 操作并不能限制只读操作的访问权限。IAM 策略必须对 IAM 身份中心服务强制执行只读访问权限 APIs。

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowReadOnlyAccessToIdentityCenterAPI",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyAdminRole"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "arn:aws:sso:::instance/ssoins-1234567890abcdef"
        }
      }
    },
    {
      "Sid": "AllowReadOnlyAccessToIdentityStoreAPI",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyAdminRole"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "arn:aws:identitystore::111122223333:identitystore/d-1234567890"
        }
      }
    }
  ]
}
```

## 完善了用于 AWS 托管应用程序的 KMS 密钥策略声明
<a name="refined-kms-key-policy-statements-for-use-of-aws-managed-applications"></a>

 这些策略模板可以更精细地控制哪些 AWS 托管应用程序可以使用您的 KMS 密钥。

**注意**  
 某些 AWS 托管应用程序不能与配置了客户托管 KMS 密钥的 IAM 身份中心一起使用。请参阅[可与 IAM Identity Center 搭配使用的AWS 托管应用程序](https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps-that-work-with-identity-center.html)。

[用于 AWS 托管应用程序的基准 KMS 密钥和 IAM 策略声明](baseline-KMS-key-policy.md#baseline-kms-key-policy-statements-for-use-of-aws-managed-applications)允许来自同一 AWS 组织中任何账户的任何 AWS 托管应用程序使用 KMS 密钥。使用这些精细化策略通过以下方式限制访问：
+ 应用程序服务主体
+ 应用程序实例 ARNs
+ AWS account IDs
+ 特定 IAM Identity Center 实例的加密上下文

**注意**  
服务主体是服务的唯一标识符，通常格式为 servicename.amazonaws.com（例如，亚马逊 EMR 的 elasticmapreduce.amazonaws.com）。 AWS 

### 按账户限制
<a name="restrict-by-account"></a>

此 KMS 密钥策略声明模板允许特定 AWS 账户中的 AWS 托管应用程序通过特定的 IAM Identity Center 实例使用 KMS 密钥。

要使用此策略：

1. 将示例服务主体替换为您的实际应用程序服务主体

1. 将示例账户 IDs 替换为部署 AWS 托管应用程序 IDs 的实际账户

1. 将示例 Identity Store ARN 替换为您的实际 Identity Store ARN

1. 将示例 IAM Identity Center 实例 ARN 替换为您的实际实例 ARN

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowServiceInSpecificAccountsToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": {
        "Service": "myapp.amazonaws.com"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": [
            "111122223333",
            "444455556666"
          ]
        },
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "arn:aws:sso:::instance/ssoins-1234567890abcdef"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
    },
    {
      "Sid": "AllowServiceInSpecificAccountsToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": {
        "Service": "myapp.amazonaws.com"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": [
            "111122223333",
            "444455556666"
          ]
        },
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "arn:aws:identitystore::111122223333:identitystore/d-1234567890"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
    }
  ]
}
```

### 按应用程序实例限制
<a name="restrict-by-application-instance"></a>

此 KMS 密钥策略声明模板允许特定的 AWS 托管应用程序实例通过特定的 IAM Identity Center 实例使用 KMS 密钥。

要使用此策略：

1. 将示例服务主体替换为您的实际应用程序服务主体

1. 将示例应用程序 ARN 替换为您的实际应用程序实例 ARN

1. 将示例 Identity Store ARN 替换为您的实际 Identity Store ARN

1. 将示例 IAM Identity Center 实例 ARN 替换为您的实际实例 ARN

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowSpecificAppInstanceToUseTheKMSKeyViaIdentityCenter",
      "Effect": "Allow",
      "Principal": {
        "Service": "myapp.amazonaws.com"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceARN": "arn:aws:myapp:us-east-1:111122223333:application/my-application"
        },
        "StringLike": {
          "kms:ViaService": "sso.*.amazonaws.com",
          "kms:EncryptionContext:aws:sso:instance-arn": "arn:aws:sso:::instance/ssoins-1234567890abcdef"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
    },
    {
      "Sid": "AllowSpecificAppInstanceToUseTheKMSKeyViaIdentityStore",
      "Effect": "Allow",
      "Principal": {
        "Service": "myapp.amazonaws.com"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceARN": "arn:aws:myapp:us-east-1:111122223333:application/my-application"
        },
        "StringLike": {
          "kms:ViaService": "identitystore.*.amazonaws.com",
          "kms:EncryptionContext:aws:identitystore:identitystore-arn": "arn:aws:identitystore::111122223333:identitystore/d-1234567890"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
    }
  ]
}
```

# 客户自主管理型 KMS 密钥和高级 KMS 密钥策略的注意事项
<a name="considerations-for-customer-managed-kms-keys-advanced"></a>

在 IAM Identity Center 中实施客户自主管理型 KMS 密钥时，请考虑这些影响加密配置的设置、安全性和持续维护的因素。

## 选择基线与高级 KMS 密钥策略语句的注意事项
<a name="kms-policy-considerations-advanced-vs-baseline"></a>

在决定是否使用 [高级 KMS 密钥策略语句](advanced-kms-policy.md) 使 KMS 密钥权限更具体时，请考虑管理开销和组织的安全需求。更具体的策略语句提供了对谁可以使用密钥以及用于什么目的的更细粒度控制；但是，随着 IAM Identity Center 配置的发展，它们需要持续维护。例如，如果您将 KMS 密钥的使用限制在特定的 AWS 托管应用程序部署，则每当您的组织想要部署或取消部署应用程序时，都需要更新密钥策略。限制较少的策略可减少管理负担，但可能会授予比安全要求更广泛的权限。

## 使用客户自主管理型 KMS 密钥启用新 IAM Identity Center 实例的注意事项
<a name="considerations-for-enabling-new-instance"></a>

 如果您使用 [高级 KMS 密钥策略语句](advanced-kms-policy.md) 中描述的加密上下文将 KMS 密钥的使用限制为特定的 IAM Identity Center 实例，则此处注意事项适用。

 使用客户托管的 KMS 密钥启用新的 IAM 身份中心实例时，IAM 身份中心和身份存储 ARNs 要等到设置后才可用。您有以下选项：
+  暂时使用通用 ARN 模式，然后在实例启用 ARNs 后将其替换为完整模式。请记住根据需要在 StringEquals 和 StringLike运算符之间切换。
  +  对于 IAM Identity Center SPN："arn:\$1\$1Partition\$1:sso:::instance/\$1"。
  +  对于 Identity Store SPN："arn:\$1\$1Partition\$1:identitystore::\$1\$1Account\$1:identitystore/\$1"。
+  临时在 ARN 中使用 "purpose:KEY\$1CONFIGURATION"。这仅适用于实例启用，并且必须替换为实际 ARN，您的 IAM Identity Center 实例才能正常运行。这种方法的优点是您不会忘记在实例启用后替换它。
  +  对于 IAM Identity Center SPN，使用："arn:\$1\$1Partition\$1:sso:::instance/purpose:KEY\$1CONFIGURATION"
  +  对于 Identity Store SPN，使用："arn:\$1\$1Partition\$1:identitystore::\$1\$1Account\$1:identitystore/purpose:KEY\$1CONFIGURATION"
**重要**  
 不要将此配置应用于已在现有 IAM Identity Center 实例中使用的 KMS 密钥，因为这可能会中断其正常操作。
+  在实例启用之前，从 KMS 密钥策略中省略加密上下文条件。