使用 VPC 终端节点控制对 Amazon KMS 资源的访问 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 VPC 终端节点控制对 Amazon KMS 资源的访问

当请求来自 VPC 或使用 VPC 终端节点时,您可以控制对 Amazon KMS 资源和操作的访问权限。为此,请在密钥策略IAM policy 中使用以下全局条件键之一。

  • 使用 aws:sourceVpce 条件键基于 VPC 终端节点授予或限制访问。

  • 使用 aws:sourceVpc 条件键基于托管私有终端节点的 VPC 授予或限制访问。

注意

根据您的 VPC 终端节点创建密钥策略和 IAM policy 时要小心。如果政策声明要求请求来自特定 VPC 或 VPC 终端节点,则代表您使用 Amazon KMS 资源的集成 Amazon 服务发出的请求可能会失败。有关帮助信息,请参阅 在具有 Amazon KMS 权限的策略中使用 VPC 终端节点条件

此外,当请求来自 Amazon VPC 终端节点时,aws:sourceIP 条件键也不起作用。要限制对 VPC 终端节点的请求,请使用 aws:sourceVpceaws:sourceVpc 条件键。有关更多信息,请参阅《Amazon PrivateLink 指南》中的 VPC 终端节点和 VPC 终端节点服务的身份和访问管理

您可以使用这些全局条件密钥来控制对 Amazon KMS keys (KMS 密钥)、别名的访问权限,以及对此类操作的访问权限 CreateKey,这些操作不依赖于任何特定资源。

例如,以下示例密钥策略允许用户仅在请求使用指定的 VPC 终端节点时,才使用 KMS 密钥执行某些加密操作。当用户向发出请求时 Amazon KMS,会将请求中的 VPC 终端节点 ID 与策略中的aws:sourceVpce条件键值进行比较。如果它们不匹配,则请求会被拒绝。

要使用类似的策略,请将占位符 Amazon Web Services 账户 ID 和 VPC 终端节点 IDs 替换为账户的有效值。

{ "Id": "example-key-1", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM policies", "Effect": "Allow", "Principal": {"AWS":["111122223333"]}, "Action": ["kms:*"], "Resource": "*" }, { "Sid": "Restrict usage to my VPC endpoint", "Effect": "Deny", "Principal": "*", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1234abcdf5678c90a" } } } ] }

您还可以使用 aws:sourceVpc 条件键基于 VPC 终端节点所在的 VPC 限制对您的 KMS 密钥的访问。

以下示例密钥策略仅允许来自 vpc-12345678 的命令管理 KMS 密钥。另外,它只允许来自 vpc-2b2b2b2b 的命令使用 KMS 密钥执行加密操作。如果应用程序在一个 VPC 中运行,但您使用第二个隔离的 VPC 执行管理功能,则可以使用这样的策略。

要使用类似的策略,请将占位符 Amazon Web Services 账户 ID 和 VPC 终端节点 IDs 替换为账户的有效值。

{ "Id": "example-key-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow administrative actions from vpc-12345678", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Create*","kms:Enable*","kms:Put*","kms:Update*", "kms:Revoke*","kms:Disable*","kms:Delete*", "kms:TagResource", "kms:UntagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-12345678" } } }, { "Sid": "Allow key usage from vpc-2b2b2b2b", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Encrypt","kms:Decrypt","kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-2b2b2b2b" } } }, { "Sid": "Allow read actions from everywhere", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Describe*","kms:List*","kms:Get*" ], "Resource": "*", } ] }