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

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

使用 IAM 策略控制 API 访问

如果您使用 IAM 策略AWS 服务根据 IP 地址控制访问权限,则可能需要更新策略以包括 IPv6 地址范围。本指南解释了 IPv4 和之间的区别, IPv6 并介绍了如何更新您的 IAM 策略以支持这两个协议。实施这些更改可以帮助您在提供支持的同时保持对AWS资源的安全访问 IPv6。

什么是 IPv6?

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

有关更多信息,请参阅 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 的访问权限, APIs 并阻止配置范围之外的 IP 地址访问 Secrets Manager APIs。

秘密经理。 {region} .amazonaws.com 适用于 Secrets Manager 的双栈终端节点同时支持和。 APIs IPv6 IPv4

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

谁应该执行此更改?

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

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

谁不应该执行此更改?

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

添加 IPv6 到 IAM 策略中

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

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

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

以下是 IAM 用户指南中AWS基于源 IP 参考策略拒绝访问的内容。Condition元素NotIpAddress中的 to 列出了两个 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,并使用已 IPv6 启用位于 amazonaws.com 端点的终端节点的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仅为-only。您可以使用以下 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