基准 KMS 密钥和 IAM 策略声明 - AWS IAM Identity Center

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

基准 KMS 密钥和 IAM 策略声明

此处提供的基准 KMS 密钥和基于身份的策略可作为常见要求的基础。我们还建议您查看高级 KMS 密钥策略声明提供更精细的访问控制的内容,例如确保只有特定的 IAM Identity Center 实例或 AWS 托管应用程序才能访问 KMS 密钥。在使用高级 KMS 密钥策略声明之前,请查看选择基准与高级 KMS 密钥策略声明的注意事项

以下各节提供了每个用例的基准政策声明。复制与您的用例相匹配的 KMS 密钥策略声明,然后返回到步骤 2:准备 KMS 密钥策略声明

使用 IAM 身份中心的基准 KMS 密钥策略声明(必填)

在中使用步骤 2:准备 KMS 密钥策略声明以下 KMS 密钥策略声明模板允许 IAM Identity Center、其关联的身份存储和 IAM 身份中心管理员使用 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 会为重新创建的权限集生成新的唯一标识符。有关实现示例,请参阅自定义信任策略示例

  • 在 SourceAccount 元素中,指定 IAM 身份中心账户 ID。

  • Identity Store 有自己的服务主体identitystore.amazonaws.com,必须允许该主体使用 KMS 密钥。

  • 这些政策声明允许您在特定 AWS 账户中的 IAM 身份中心实例使用 KMS 密钥。要限制对特定 IAM 身份中心实例的访问权限,请参阅高级 KMS 密钥策略声明。每个 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_AdminPermissionSet_*", "arn:aws:iam::444455556666:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_DelegatedAdminSet_*" ] }, "StringLike": { "kms:EncryptionContext:aws:sso:instance-arn": "*", "kms:ViaService": "sso.*.amazonaws.com" } } }, { "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_AdminPermissionSet_*", "arn:aws:iam::444455556666:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_DelegatedAdminSet_*" ] }, "StringLike": { "kms:EncryptionContext:aws:identitystore:identitystore-arn": "*", "kms:ViaService": "identitystore.*.amazonaws.com" } } }, { "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_AdminPermissionSet_*", "arn:aws:iam::444455556666:role/aws-reserved/sso.amazonaws.com/us-east-1/AWSReservedSSO_DelegatedAdminSet_*" ] } } }, { "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": "AllowIAMIdentityStoreToUseTheKMSKey", "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 策略以下 IAM 策略声明模板允许 IAM 身份中心管理员使用 KMS 密钥。

  • Resource元素中的示例密钥 ARN 替换为实际的 KMS 密钥 ARN。有关查找引用标识符值的帮助,请参阅找到所需的标识符

  • 这些 IAM 政策声明向 IAM 委托人授予 KMS 密钥访问权限,但不限制哪些 AWS 服务可以发出请求。KMS 密钥策略通常提供这些服务限制。但是,您可以向此 IAM 策略添加加密上下文,将使用限制为特定 Identity Center 实例。有关详细信息,请参阅高级 KMS 密钥策略声明

IAM 身份中心的委托管理员需要的 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 策略声明

注意

某些 AWS 托管应用程序不能与配置了客户托管 KMS 密钥的 IAM 身份中心一起使用。有关更多信息,请参阅与 IAM 身份中心配合使用的AWS 托管应用程序

使用以下 KMS 密钥策略声明模板步骤 2:准备 KMS 密钥策略声明允许 AWS 托管应用程序及其管理员使用 KMS 密钥。

  • 在 AWS Organizations 身份证和 SourceOrgId 条件中插入您的 PrincipalOrg身份证件。有关查找引用标识符值的帮助,请参阅找到所需的标识符

  • 这些政策声明允许您的任何 AWS 托管应用程序和 AWS 组织中的任何 IAM 委托人(应用程序管理员)通过 IAM Identity Center 和 Identity kms: Store 使用 Decrypt。要将这些政策声明限制在特定的 AWS 托管应用程序、账户或 IAM Identity Center 实例上,请参阅高级 KMS 密钥策略声明

    您可以通过替换为特定的 IAM 委托人来限制特定应用程序管理员*的访问权限。要防止 IAM 角色名称在重新创建权限集时发生更改,请使用中的自定义信任策略示例方法。有关更多信息,请参阅 选择基准与高级 KMS 密钥策略声明的注意事项

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 策略以下 IAM 策略声明模板允许 AWS 托管应用程序的管理员使用成员账户中的 KMS 密钥。

  • 将资源元素中的示例 ARN 替换为实际的 KMS 密钥 ARN。有关查找引用标识符值的帮助,请参阅找到所需的标识符

  • 某些 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

使用中的步骤 2:准备 KMS 密钥策略声明以下 KMS 密钥声明模板允许 Cont AWS rol Tower 管理员使用 KMS 密钥。

  • 在委托人元素中,指定用于访问 IAM 身份中心服务 APIs的 IAM 委托人。有关 IAM 委托人的更多信息,请参阅 I AM 用户指南中的指定委托人

  • 这些政策声明允许 Cont AWS rol Tower 管理员通过您的任何 IAM 身份中心实例使用 KMS 密钥。但是,Cont AWS rol Tower 限制访问同一组织中 IAM 身份中心的 AWS 组织实例。由于这一限制,如中所述,进一步将 KMS 密钥限制为特定的 IAM Identity Center 实例没有任何实际好处高级 KMS 密钥策略声明

  • 要帮助防止 IAM 角色名称在重新创建权限集时发生更改,请使用中自定义信任策略示例描述的方法。

KMS 密钥策略语句:

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

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

用于亚马逊弹性计算云 Windows 实例的 IAM 身份中心的基准 KMS 密钥和 IAM 策略声明

在中使用以下 KMS 密钥策略声明模板,步骤 2:准备 KMS 密钥策略声明允许单点登录 (SSO) 到亚马逊 EC2 Windows 实例的用户跨账户使用 KMS 密钥。

  • 在委托人字段中指定用于访问 IAM 身份中心的 IAM 委托人。有关 IAM 委托人的更多信息,请参阅 I AM 用户指南中的指定委托人

  • 本政策声明允许您的任何 IAM 身份中心实例使用 KMS 密钥。要限制对特定 IAM 身份中心实例的访问权限,请参阅高级 KMS 密钥策略声明

  • 要帮助防止 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:EncryptionContext:aws:sso:instance-arn": "*", "kms:ViaService": "sso.*.amazonaws.com" } } }, { "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 策略以下 IAM 策略声明模板允许 EC2 Windows 实例的 SSO 使用 KMS 密钥。

将 IAM 政策声明附加到 IAM 身份中心中用于允许 SSO 访问亚马逊 EC2 Windows 实例的现有权限集。有关 IAM 策略示例,请参阅 S AWS ystems Manager 用户指南中的远程桌面协议连接

  • 将资源元素中的示例 ARN 替换为实际的 KMS 密钥 ARN。有关查找引用标识符值的帮助,请参阅找到所需的标识符

权限集 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" ] } } }] }

基准 KMS 密钥和 IAM 策略声明,以便在 IAM 身份中心使用自定义工作流程

使用以下 KMS 密钥策略声明模板步骤 2:准备 KMS 密钥策略声明允许 AWS Organizations 管理账户或委托管理账户中的自定义工作流程(例如客户托管的应用程序)使用 KMS 密钥。

  • 在委托人元素中,指定用于访问 IAM 身份中心服务 APIs的 IAM 委托人。有关 IAM 委托人的更多信息,请参阅 I AM 用户指南中的指定委托人

  • 这些政策声明允许您的工作流程通过任何 IAM Identity Center 实例使用 KMS 密钥。要限制对特定 IAM 身份中心实例的访问权限,请参阅高级 KMS 密钥策略声明

  • 要帮助防止 IAM 角色名称在重新创建权限集时发生更改,请使用中自定义信任策略示例描述的方法。

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:EncryptionContext:aws:sso:instance-arn": "*", "kms:ViaService": "sso.*.amazonaws.com" } } }, { "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": "*" } } } ] }

在中使用以下 IAM 策略声明模板步骤 4:为跨账户使用 KMS 密钥配置 IAM 策略,允许与自定义工作流程关联的 IAM 委托人跨账户使用 KMS 密钥。将 IAM 策略声明添加到 IAM 委托人。

  • 将资源元素中的示例 ARN 替换为实际的 KMS 密钥 ARN。有关查找引用标识符值的帮助,请参阅找到所需的标识符

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" ] } } }] }