使用 IAM 策略控制 API 访问 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 IAM 策略控制 API 访问

如果使用 IAM 策略根据 IP 地址控制 Amazon Web Services 服务 的访问权限,则可能需要更新策略以包括 IPv6 地址范围。本指南解释 IPv4 与 IPv6 之间的差异,并描述如何更新您的 IAM 策略以同时支持这两种协议。实施这些更改有助于您在支持 IPv6 的同时保持对 Amazon 资源的安全访问。

什么是 IPv6?

IPv6 是下一代 IP 标准,旨在最终取代 IPv4。之前的版本 IPv4 使用 32 位寻址方案来支持 43 亿台设备。而 IPv6 可使用 128 位寻址来支持大约 340 万亿万亿(或 2 的 128 次方)台设备。

有关更多信息,请参阅 VPC IPv6 网页

以下是 IPv6 地址的示例:

2001:cdba:0000:0000:0000:0000:3257:9652 # This is a full, unabbreviated IPv6 address. 2001:cdba:0:0:0:0:3257:9652 # The same address with leading zeros in each group omitted 2001:cdba::3257:965 # A compressed version of the same address.

IAM 双堆栈(IPv4 和 IPv6)策略

您可使用 IAM 策略来控制对 Secrets Manager API 的访问,并阻止配置范围之外的 IP 地址访问 Secrets Manager API。

适用于 Secrets Manager API 的 secretsmanager.{region}.amazonaws.com 双堆栈端点同时支持 IPv6 和 IPv4。

如果需要同时支持 IPv4 和 IPv6,请更新您的 IP 地址筛选策略以处理 IPv6 地址。否则,您可能无法通过 IPv6 连接到 Secrets Manager。

谁应该执行此更改?

如果您将双寻址与包含 aws:sourceIp 的策略结合使用,则此更改会影响您。双寻址意味着网络支持 IPv4 和 IPv6。

如果您使用双寻址,请更新当前使用 IPv4 格式地址的 IAM 策略,使其包含 IPv6 格式的地址。

谁不应该执行此更改?

如果您使用 IPv4 网络,则此更改不会影响您。

将 IPv6 添加到 IAM 策略

IAM 策略使用 aws:SourceIp 条件键控制从特定 IP 地址的访问。如果您的网络使用双寻址(IPv4 和 IPv6),请更新您的 IAM 策略以包括 IPv6 地址范围。

在策略的 Condition 元素中,将 IpAddressNotIpAddress 运算符用于 IP 地址条件。不要使用字符串运算符,因为它们无法处理各种有效的 IPv6 地址格式。

这些示例使用 aws:SourceIp。对于 VPC,请改为使用 aws:VpcSourceIp

以下是来自 IAM 用户指南基于源 IP 拒绝访问 Amazon 参考策略。Condition 元素中的 NotIpAddress 列出两个 IPv4 地址范围:192.0.2.0/24203.0.113.0/24,这两个地址范围将被拒绝访问 API。

JSON
{ "Version":"2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "192.0.2.0/24", "203.0.113.0/24" ] }, "Bool": { "aws:ViaAWSService": "false" } } } }

要更新此策略,请更改 Condition 元素以包括 IPv6 地址范围 2001:DB8:1234:5678::/642001:cdba:3257:8593::/64

注意

请勿移除现有的 IPv4 地址。向后兼容性将需要这些地址。

"Condition": { "NotIpAddress": { "aws:SourceIp": [ "192.0.2.0/24", <<DO NOT REMOVE existing IPv4 address>> "203.0.113.0/24", <<DO NOT REMOVE existing IPv4 address>> "2001:DB8:1234:5678::/64", <<New IPv6 IP address>> "2001:cdba:3257:8593::/64" <<New IPv6 IP address>> ] }, "Bool": { "aws:ViaAWSService": "false" } }

要针对 VPC 更新此策略,请使用 aws:VpcSourceIp 而非 aws:SourceIp

"Condition": { "NotIpAddress": { "aws:VpcSourceIp": [ "10.0.2.0/24", <<DO NOT REMOVE existing IPv4 address>> "10.0.113.0/24", <<DO NOT REMOVE existing IPv4 address>> "fc00:DB8:1234:5678::/64", <<New IPv6 IP address>> "fc00:cdba:3257:8593::/64" <<New IPv6 IP address>> ] }, "Bool": { "aws:ViaAWSService": "false" } }

验证您的客户端是否支持 IPv6

如果您使用 secretsmanager.{region}.amazonaws.com 端点,请验证您可以连接到该端点。下面的步骤介绍了如何执行验证。

此示例使用 Linux 和 curl 版本 8.6.0,并使用位于 amazonaws.com 端点、已启用 IPv6 的端点的 Amazon Secrets Manager 服务

注意

secretsmanager.{region}.amazonaws.com 不同于典型的双堆栈命名约定。有关 Secrets Manager 端点的完整列表,请参阅 Amazon Secrets Manager 端点

将您的 Amazon Web Services 区域 更改到服务所在的区域。在此示例中,我们使用的是美国东部(弗吉尼亚州北部)- us-east-1 端点。

  1. 使用以下 dig 命令确定端点是否使用 IPv6 地址进行解析。

    $ dig +short AAAA secretsmanager.us-east-1.amazonaws.com > 2600:1f18:e2f:4e05:1a8a:948e:7c08:c1c3
  2. 使用以下 curl 命令确定客户端网络是否可以建立 IPv6 连接。404 响应代码表示连接成功,而 0 响应代码表示连接失败。

    $ curl --ipv6 -o /dev/null --silent -w "\nremote ip: %{remote_ip}\nresponse code: %{response_code}\n" https://secretsmanager.us-east-1.amazonaws.com > remote ip: 2600:1f18:e2f:4e05:1a8a:948e:7c08:c1c3 > response code: 404

如果已识别远程 IP 并且响应代码不是 0,则表示已使用 IPv6 成功与端点建立网络连接。远程 IP 应该是 IPv6 地址,因为操作系统应该选择对客户端有效的协议。

如果远程 IP 为空或响应代码为 0,则表示客户端网络或端点的网络路径仅支持 IPv4。您可以使用以下 curl 命令验证此配置。

$ curl -o /dev/null --silent -w "\nremote ip: %{remote_ip}\nresponse code: %{response_code}\n" https://secretsmanager.us-east-1.amazonaws.com > remote ip: 3.123.154.250 > response code: 404