

# 将 IAM 策略升级到 IPv6
<a name="security_iam_cwim_security-ipv6-upgrade"></a>

网络监测仪客户使用 IAM 策略来设置允许的 IP 地址范围，以阻止配置范围之外的任何 IP 地址访问网络监测仪 API。

*internetmonitor.{{region}}.api.aws* 端点正在升级为支持双栈配置（IPv4 和 IPv6）。

未更新为支持处理 IPv6 地址的 IP 地址筛选策略可能导致客户端无法访问网络监测仪 API。

## 受 IPv6 升级影响的客户
<a name="customers-impacted"></a>

使用双栈配置且策略中包含 *aws:sourceIp* 筛选条件的客户会受到本次升级的影响。双栈配置意味着网络同时支持 IPv4 和 IPv6。

如果您使用双栈配置，则必须更新当前使用 IPv4 格式地址配置的 IAM 策略，使其包含 IPv6 格式的地址。

以下总结了建议的操作，具体取决于您的情况。要确认 SDK 使用的端点，请参阅[识别代码使用的网络监测仪端点](#IMConfirmSDKEndpoint)。


| 端点 | 使用带 `aws:sourceIp` 条件的 IAM 策略？ | 推荐操作 | 
| --- | --- | --- | 
| `internetmonitor.region.amazonaws.com`（非双栈） | 是 | 要限制为仅允许 IPv4 访问，则无需执行进一步的操作。如果预计未来将需要 IPv6 支持，则可以采取措施确保同时兼容 IPv4 和 IPv6。<br />为确保未来的兼容性，请在 2024 年 11 月 1 日当天或之后更新 SDK，然后通过设置 `useDualstackEndpoint=true` 来更新应用程序以使用双栈端点。有关更多信息，请参阅 [Dual-stack and FIPS endpoints](https://docs.amazonaws.cn/sdkref/latest/guide/feature-endpoints.html)。<br />如果您选择同时使用 IPv4 和 IPv6，则还必须更新 IAM 策略中的 IP 地址筛选条件 (`aws:sourceIp`)，使其包括 IPv6 地址。 | 
| `internetmonitor.region.amazonaws.com`（非双栈） | 否 | 要限制为仅允许 IPv4 访问，则无需执行进一步的操作。如果预计未来将需要 IPv6 支持，则可以采取措施确保同时兼容 IPv4 和 IPv6。<br />为确保未来的兼容性，请在 2024 年 11 月 1 日当天或之后更新 SDK，然后通过设置 `useDualstackEndpoint=true` 来更新应用程序以使用双栈端点。有关更多信息，请参阅 [Dual-stack and FIPS endpoints](https://docs.amazonaws.cn/sdkref/latest/guide/feature-endpoints.html)。 | 
| `internetmonitor.region.api.aws` | 是 | 为确保未来同时兼容 IPv4 和 IPv6，请更新 SDK，然后通过设置 `useDualstackEndpoint=true` 来更新应用程序以使用双栈端点。有关更多信息，请参阅 [Dual-stack and FIPS endpoints](https://docs.amazonaws.cn/sdkref/latest/guide/feature-endpoints.html)。<br />更改为同时使用 IPv4 和 IPv6 时，还必须更新 IAM 策略中的 IP 地址筛选条件 (`aws:sourceIp`)，使其包括 IPv6 地址。<br />如果想限制为仅允许 IPv4 访问，请设置 `useDualstackEndpoint=false`。有关更多信息，请参阅 [Dual-stack and FIPS endpoints](https://docs.amazonaws.cn/sdkref/latest/guide/feature-endpoints.html)。 | 
| `internetmonitor.region.api.aws` | 否 | 为确保未来同时兼容 IPv4 和 IPv6，请更新 SDK，然后通过设置 `useDualstackEndpoint=true` 来更新应用程序以使用双栈端点。有关更多信息，请参阅 [Dual-stack and FIPS endpoints](https://docs.amazonaws.cn/sdkref/latest/guide/feature-endpoints.html)。<br />如果想限制为仅允许 IPv4 访问，请设置 `useDualstackEndpoint=false`。有关更多信息，请参阅 [Dual-stack and FIPS endpoints](https://docs.amazonaws.cn/sdkref/latest/guide/feature-endpoints.html)。 | 

有关访问问题的帮助，请联系 [Amazon Web Services 支持](https://support.console.aws.amazon.com/support/home/?nc1=f_dr#/case/create)。

## 什么是 IPv6？
<a name="security_iam_cwim_security-ipv6-upgrade.what-is-ipv6"></a>

IPv6 是下一代 IP 标准，旨在最终取代 IPv4。IPv4 使用 32 位寻址方案，最多支持 43 亿个设备。IPv6 使用 128 位寻址方案，最多可支持大约 340 万亿（即 2 的 128 次方）个设备。

以下是 IPv6 地址的示例：

```
2001:cdba:0000:0000:0000:0000:3257:9652
2001:cdba:0:0:0:0:3257:9652
2001:cdba::3257:965
```

IPv6 提供了更大的地址空间、更高的路由效率以及对新互联网服务的更好支持。通过更新到双栈配置并支持 IPv6，网络监测仪可以提高性能和可扩展性。按照本节中的步骤更新配置并利用双栈支持的优势。

## 识别代码使用的网络监测器端点
<a name="security_iam_cwim_security-ipv6-upgrade.identify-endpoint"></a>

如果您使用网络监测仪 SDK，请首先验证代码正在使用的端点：IPv4 端点还是双栈（IPv4 和 IPv6）端点。如果未将 SDK 与网络监测仪结合使用，则可跳过本节。

您可以运行以下代码示例来确定正在使用的网络监测仪端点。在此例中，我们将在美国东部（弗吉尼亚州北部）区域中使用适用于 Go 的网络监测仪 SDK。

```
package main

import (
    "fmt"
    "log"
    
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/internetmonitor"
)

func main() {
    // Create a new session with the default configuration
    sess := session.Must(session.NewSession(&aws.Config{
        Region: aws.String("us-east-1"),
    }))

    // Create a new Internet Monitor client
    internetMonitorClient := internetmonitor.New(sess)

    // Get the endpoint URL
    endpoint := internetMonitorClient.Endpoint

    fmt.Printf("Internet Monitor endpoint URL: %s\n", endpoint)
}
```

当您运行此代码时，将会返回网络监测仪端点。如果您看到以下响应，则表示您使用的网络监测仪域仅支持 IPv4。您可以确定这一点，是因为端点 URL 格式中包含 `amazonaws.com`。

```
Internet Monitor endpoint URL: https://internetmonitor.us-east-1.amazonaws.com
```

如果您看到以下响应，则表示您使用的域正在升级为支持双栈（IPv4 和 IPv6）。此处您可以确定这一点，是因为端点 URL 中包含 `api.aws`。但请注意，在升级完成之前，此端点仅支持 IPv4。

```
Internet Monitor endpoint URL: https://internetmonitor.us-east-1.api.aws
```



## 更新 IAM 策略以支持 IPv6
<a name="security_iam_cwim_security-ipv6-upgrade.updating-for-ipv6"></a>

IAM 策略使用 `aws:SourceIp` 筛选条件来设置允许的 IP 地址范围。

双栈配置同时支持 IPv4 和 IPv6 流量。如果您的网络使用双栈配置，则必须确保用于 IP 地址筛选的所有 IAM 策略已更新为包括 IPv6 地址范围。

例如，此策略允许 `Condition` 元素中列出的 IPv4 地址范围 `192.0.2.0.*` 和 `203.0.113.0.*`。

```
# https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html
{
    "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 地址范围，如以下示例所示：

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

**重要**  
请勿删除策略中现有的 IPv4 地址。向后兼容性将需要这些地址。

有关使用 IAM 管理访问权限的更多信息，请参阅《Amazon Identity and Access Management 用户指南》**中的[托管策略与内联策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_managed-vs-inline.html)。

## 更新策略后测试网络
<a name="security_iam_cwim_security-ipv6-upgrade.testing-connection"></a>

更新 IAM 策略以包括对 IPv6 地址的支持后，我们建议您测试网络是否能够访问 IPv6 端点。本节提供了多个示例，具体取决于您使用的操作系统。

### 使用 Linux/Unix 或 Mac OS X 测试网络
<a name="security_iam_cwim_security-ipv6-upgrade.testing-unix"></a>

如果使用的是 Linux/Unix 或 Mac OS X，可以使用以下 curl 命令来测试您的网络是否能够访问 IPv6 端点。

`curl -v -s -o /dev/null http://ipv6.ec2-reachability.amazonaws.com/`

如果通过 IPv6 建立了连接，则连接的 IP 地址会显示与以下类似的信息：

```
* About to connect() to aws.amazon.com port 443 (#0)
*   Trying IPv6 address... connected
* Connected to aws.amazon.com (IPv6 address) port 443 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.18.1 (x86_64-unknown-linux-gnu) libcurl/7.18.1 OpenSSL/1.0.1t zlib/1.2.3
> Host: aws.amazon.com
```

### 使用 Windows 测试网络
<a name="security_iam_cwim_security-ipv6-upgrade.testing-windows"></a>

如果使用的是 Windows，则使用如下所示的 `ping` 命令来测试您的网络能否通过 IPv6 或 IPv4 访问双栈端点：

`ping aws.amazon.com`

如果 `ping` 通过 IPv6 访问该端点，则该命令会返回 IPv6 地址。

## 验证客户端是否可以支持 IPv6
<a name="security_iam_cwim_security-ipv6-upgrade.verify"></a>

我们建议您在切换到使用 *internetmonitor.{region}.api.aws* 端点前，首先验证客户端是否能够访问其他已启用 IPv6 的 Amazon Web Services 服务端点。以下步骤介绍如何使用现有的 IPv6 端点进行验证。

此例使用 Linux 和 curl 版本 8.6.0，并使用 [Amazon Athena 服务](https://docs.amazonaws.cn/general/latest/gr/athena.html)，后者在 *api.aws* 域具有启用了 IPv6 的端点。

**注意**  
将您的 Amazon Web Services 区域切换到客户端所在的区域。在此示例中，我们使用的是美国东部（弗吉尼亚州北部）- `us-east-1` 端点。

使用以下示例验证客户端是否能够访问启用 IPv6 的 Amazon 端点。

1. 使用以下命令验证 Athena 端点是否使用 IPv6 地址进行解析。

   ```
   dig +short AAAA athena.us-east-1.api.aws
   2600:1f18:e2f:4e05:1a8a:948e:7c08:d2d6
   2600:1f18:e2f:4e03:4a1e:83b0:8823:4ce5
   2600:1f18:e2f:4e04:34c3:6e9a:2b0d:dc79
   ```

1. 现在，使用以下命令确定客户端网络是否能够使用 IPv6 建立连接：

   ```
   curl --ipv6 -o /dev/null --silent -w "\nremote ip: %{remote_ip}\nresponse code: %{response_code}\n" https://athena.us-east-1.api.aws
   
   remote ip: 2600:1f18:e2f:4e05:1a8a:948e:7c08:d2d6
   response code: 404
   ```

   如果已识别远程 IP 地址**并且**响应代码不是 `0`，则表示已使用 IPv6 成功与端点建立网络连接。

   如果远程 IP 地址为空或响应代码为 `0`，则表示客户端网络或端点的网络路径仅支持 IPv4。您可使用以下 curl 命令执行此操作：

   ```
   curl -o /dev/null --silent -w "\nremote ip: %{remote_ip}\nresponse code: %{response_code}\n" https://athena.us-east-1.api.aws
   
   remote ip: 3.210.103.49
   response code: 404
   ```

   如果运行此命令，已识别远程 IP 地址**并且**响应代码不是 `0`，则表示已使用 IPv4 成功与端点建立网络连接。