使用 IAM 策略控制 API 访问 - AWS Secrets Manager

使用 IAM 策略控制 API 访问

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

什么是 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 拒绝访问 AWS 参考策略。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 的端点的 AWS Secrets Manager 服务

注意

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

将您的 AWS 区域 更改到服务所在的区域。在此示例中,我们使用的是美国东部(弗吉尼亚州北部)- 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