

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

# 高级 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 密钥策略中省略加密上下文条件。