使用 VPC 端点控制对 AWS KMS 资源的访问 - AWS Key Management Service

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

使用 VPC 端点控制对 AWS KMS 资源的访问

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

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

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

注意

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

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

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

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

要使用类似这样的策略,请将占位符 AWS 账户 ID 和 VPC 终端节点 ID 替换为您账户中的有效值。

{ "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 执行管理功能,则可以使用这样的策略。

要使用类似这样的策略,请将占位符 AWS 账户 ID 和 VPC 终端节点 ID 替换为您账户中的有效值。

{ "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": "*", } ] }