

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

# 基准 KMS 密钥策略
<a name="baseline-KMS-key-policy"></a>

以下 KMS 密钥策略涵盖了最常见的部署场景：具有委派管理员和托 AWS 管应用程序（包括 AWS Control Tower Amazon EC2 实例的 SSO）的 IAM 身份中心实例和自定义工作流程。在为 IAM Identity Center 创建客户托管的 KMS 密钥时，请使用此策略作为起点。如果您需要更精细的访问控制，例如将密钥限制为特定的 IAM Identity Center 实例或应用程序，请参阅[高级 KMS 密钥策略语句](advanced-kms-policy.md)。请注意，如果使用多区域密钥，则应在所有副本上使用相同的策略，以帮助确保一致的授权。

要使用此策略，请将以下占位符值替换为您自己的占位符值：
+ `{{111122223333}}`— 您的 AWS IAM 身份中心实例（ AWS Organizations 管理账户）的账户 ID。
+ `{{444455556666}}`— 您的委托管理 AWS 账户的账户 ID。如果您不使用委托管理，请移除此委托人。

 由于 AWS IAM Identity Center 要求将 KMS 密钥与服务放在同一个 AWS 账户中，因此以下语句使用`${aws:ResourceOrgID}`和`${aws:ResourceAccount}`变量而不是文字值。如果您愿意，可以将这些变量替换为您的 AWS 组织 ID 和 AWS 账户 ID。

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Sid": "AllowIdentityCenterAdminAccounts",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::{{111122223333}}:root",
          "arn:aws:iam::{{444455556666}}:root"
        ]
      },
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "AllowIdentityCenterAndIdentityStoreToDescribeKey",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "identitystore.amazonaws.com",
          "sso.amazonaws.com"
        ]
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "${aws:ResourceAccount}"
        }
      }
    },
    {
      "Sid": "AllowIdentityCenterAndIdentityStoreToUseKey",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "identitystore.amazonaws.com",
          "sso.amazonaws.com"
        ]
      },
      "Action": [
        "kms:Decrypt",
        "kms:ReEncryptTo",
        "kms:ReEncryptFrom",
        "kms:GenerateDataKeyWithoutPlaintext"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "${aws:ResourceAccount}"
        },
        "ForAnyValue:StringEquals": {
          "kms:EncryptionContextKeys": [
            "aws:sso:instance-arn",
            "aws:identitystore:identitystore-arn"
          ]
        }
      }
    },
    {
      "Sid": "AllowOrgPrincipalsViaIdentityCenterAndIdentityStore",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "${aws:ResourceOrgID}"
        },
        "StringLike": {
          "kms:ViaService": [
            "sso.*.amazonaws.com",
            "identitystore.*.amazonaws.com"
          ]
        },
        "ForAnyValue:StringEquals": {
          "kms:EncryptionContextKeys": [
            "aws:sso:instance-arn",
            "aws:identitystore:identitystore-arn"
          ]
        }
      }
    },
    {
      "Sid": "AllowManagedApps",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        },
        "StringEquals": {
          "aws:SourceOrgID": "${aws:ResourceOrgID}"
        },
        "StringLike": {
          "kms:ViaService": [
            "identitystore.*.amazonaws.com",
            "sso.*.amazonaws.com"
          ]
        },
        "ForAnyValue:StringEquals": {
          "kms:EncryptionContextKeys": [
            "aws:sso:instance-arn",
            "aws:identitystore:identitystore-arn"
          ]
        }
      }
    }
  ]
}
```

本政策包含五项声明。下表描述了每条语句的作用。


| 语句 | 用途 | 
| --- | --- | 
| AllowIdentityCenterAdminAccounts | 向 IAM Identity Center 管理账户和委托管理账户授予完整 KMS 密钥权限。这包括密钥管理操作，例如修改密钥策略和安排密钥删除。如果这些账户中的管理员在基于身份的策略中拥有所需的权限，则可以管理和使用密钥。 | 
| AllowIdentityCenterAndIdentityStoreToDescribeKey | 允许 IAM 身份中心和身份存储服务委托人检索密钥元数据。这是在不执行加密或解密的情况下验证密钥的服务操作所必需的。该aws:SourceAccount条件有助于确保只有您的 IAM 身份中心实例才能使用您的 KMS 密钥。 | 
| AllowIdentityCenterAndIdentityStoreToUseKey | 允许 IAM Identity Center 和 Identity Store 服务委托人使用密钥进行加密操作，例如加密、解密和重新加密数据。该aws:SourceAccount条件有助于确保只有您的 IAM 身份中心实例才能使用您的 KMS 密钥。 | 
| AllowOrgPrincipalsViaIdentityCenterAndIdentityStore | 允许 AWS 组织中的 IAM 委托人通过 IAM 身份中心和身份存储服务解密数据。这包括使用转发访问会话 (FAS) 与 IAM Identity Cent AWS er 集成的服务进行交互的应用程序管理员。 | 
| AllowManagedApps | 允许 AWS 托管应用程序通过 IAM 身份中心和身份存储解密受您的 KMS 密钥保护的数据。 | 

使用以下 IAM 政策声明[步骤 4：为 KMS 密钥的跨账户使用配置 IAM 策略](identity-center-customer-managed-keys.md#configure-iam-policies-kms-key)，允许委托的管理员通过 IAM 身份中心服务使用 KMS 密钥 APIs。将示例密钥 ARN 替换为实际的 KMS 密钥 ARN。示例中的通配符区域可容纳多区域 KMS 密钥的所有副本。

对于 IAM Identity Center 管理以外的跨账户用例，例如 Amazon EC2 实例的 SSO 或 AWS 托管应用程序的管理，请将范围`AllowCrossAccountKMSKeyUse`缩小到`kms:Decrypt`仅限并删除该`AllowListKMSKeyAliases`声明。

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