

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 IAM 政策控制 API 存取
<a name="ip-access"></a>

如果您使用 IAM 政策 AWS 服務 根據 IP 地址控制對 的存取，您可能需要更新政策以包含 IPv6 地址範圍。本指南說明 IPv4 和 IPv6 之間的差異，並說明如何更新 IAM 政策以支援這兩個通訊協定。實作這些變更可協助您在支援 IPv6 的同時，維護對 AWS 資源的安全存取。

## 什麼是 IPv6？
<a name="what-is-ipv6"></a>

IPv6 是新一代 IP 標準，旨在最終取代 IPv4。舊版 IPv4 使用 32 位元定址機制來支援 43 億部裝置。IPv6 會改用 128 位元定址，以支援大約 340 兆兆億 （或第 128 個電源為 2) 的裝置。

如需詳細資訊，請參閱 [VPC IPv6 網頁](https://aws.amazon.com/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) 政策
<a name="ipv6-access"></a>

您可以使用 IAM 政策來控制對 Secrets Manager APIs存取，並防止設定範圍以外的 IP 地址存取 Secrets Manager APIs。

*Secrets Manager API 的 Secretsmanager.\$1region\$1.amazonaws.com* 雙堆疊端點支援 IPv6 和 IPv4。 APIs 

如果您需要同時支援 IPv4 和 IPv6，請更新 IP 地址篩選政策以處理 IPv6 地址。否則，您可能無法透過 IPv6 連線至 Secrets Manager。

### 誰應該進行此變更？
<a name="customers-impacted"></a>

如果您搭配包含 的政策使用雙定址，則此變更會影響您`aws:sourceIp`。*雙重定址*表示網路同時支援 IPv4 和 IPv6。

如果您使用雙定址，請更新目前使用 IPv4 格式地址的 IAM 政策，以包含 IPv6 格式地址。

### 誰不應進行此變更？
<a name="customers-not-impacted"></a>

如果您*只*使用 IPv4 網路，此變更不會影響您。

## 將 IPv6 新增至 IAM 政策
<a name="updating-for-ipv6"></a>

IAM 政策使用 `aws:SourceIp`條件金鑰來控制來自特定 IP 地址的存取。如果您的網路使用雙定址 (IPv4 和 IPv6)，請更新您的 IAM 政策以包含 IPv6 地址範圍。

在政策的 `Condition`元素中，針對 IP 地址條件使用 `IpAddress`和 `NotIpAddress`運算子。請勿使用字串運算子，因為它們無法處理各種有效的 IPv6 地址格式。

這些範例使用 `aws:SourceIp`。對於 VPCs，請`aws:VpcSourceIp`改用 。

以下是 *IAM 使用者指南*中的[AWS 根據來源 IP 參考政策拒絕對 的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html)。`Condition` 元素`NotIpAddress`中列出兩個 IPv4 地址範圍的 `192.0.2.0/24`和 `203.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::/64`和 `2001: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
<a name="testing-connection"></a>

如果您使用 *secretsmanager.\$1region\$1.amazonaws.com* 端點，請確認您可以連線到它。下列步驟說明如何執行驗證。

此範例使用 Linux 和 curl 8.6.0 版，並使用 服務，該[AWS Secrets Manager 服務](https://docs.aws.amazon.com/general/latest/gr/secretsmanager.html)具有位於 **amazonaws.com** 端點的已啟用 IPv6 的端點。

**注意**  
**secretsmanager.\$1region\$1.amazonaws.com 與典型的雙堆疊命名慣例**[https://docs.aws.amazon.com/general/latest/gr/rande.html#dual-stack-endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#dual-stack-endpoints)不同。如需 Secrets Manager 端點的完整清單，請參閱 [AWS Secrets Manager 端點](asm_access.md#endpoints)。  
將 AWS 區域 變更為您的服務所在的相同區域。在此範例中，我們使用美國東部 (維吉尼亞北部) – `us-east-1` 端點。

1. 使用以下`dig`命令判斷端點是否以 IPv6 地址解析。

   ```
   $ dig +short AAAA secretsmanager.us-east-1.amazonaws.com 
   
   > 2600:1f18:e2f:4e05:1a8a:948e:7c08:c1c3
   ```

1. 使用以下`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
```