View a markdown version of this page

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

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

基准 KMS 密钥策略

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

要使用此策略,请将以下占位符值替换为您自己的占位符值:

  • 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 策略,允许委托的管理员通过 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": "*" } ] }