IAM ポリシーによる API アクセスコントロール - AWS Secrets Manager

IAM ポリシーによる API アクセスコントロール

IAM ポリシーを使用して IP アドレスに基づいて AWS のサービス へのアクセスを制御する場合は、IPv6 アドレス範囲を含めるようにポリシーを更新する必要が生じる場合があります。このガイドでは、IPv4 と IPv6 の違いと、両方のプロトコルをサポートするように IAM ポリシーを更新する方法について説明します。これらの変更を実装することで、IPv6 をサポートしながら AWS リソースへの安全なアクセスを維持できます。

IPv6 とは

IPv6 は、最終的に IPv4 を IPv6 に置き換えることを意図した次世代の IP 規格です。以前のバージョンの IPv4 は、32 ビットのアドレス指定方式を使用して 43 億台のデバイスをサポートしていました。IPv6 は代わりに 128 ビットのアドレス指定を使用して、約 340 兆 x1 兆倍 x1 兆倍 (つまり 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 の両方をサポートする必要がある場合は、IPv6 アドレスを処理するように、IP アドレスフィルタリングポリシーを更新します。それ以外の場合は、IPv6 経由で Secrets Manager に接続できなくなる場合があります。

この変更を行うべき状況

この変更は、aws:sourceIp を含むポリシーでデュアルアドレス指定を使用する場合に影響します。デュアルアドレス指定とは、ネットワークが IPv4 と IPv6 の両方をサポートすることを意味します。

デュアルアドレス指定を使用する場合は、現在 IPv4 形式のアドレスを使用している IAM ポリシーを、IPv6 形式のアドレスを含むように更新する必要があります。

この変更を行うべきではない状況

この変更は、IPv4 ネットワークのみを使用する場合には影響しません。

IAM ポリシーに IPv6 を追加する

IAM ポリシーは、aws:SourceIp 条件キーを使用して、特定の IP アドレスからのアクセスを制御します。ネットワークでデュアルアドレス指定 (IPv4 および IPv6) を使用している場合は、IAM ポリシーを更新して IPv6 アドレス範囲を含めます。

ポリシーの Condition 要素で、IP アドレス条件に IpAddress および NotIpAddress 演算子を使用します。さまざまな有効な IPv6 アドレス形式を処理できないため、文字列演算子を使用しないでください。

以下の例では、aws:SourceIp を使用します。VPC の場合は、代わりに aws:VpcSourceIp を使用します。

以下は、「IAM ユーザーガイド」のソース IP リファレンスポリシーに基づいて AWS へのアクセスを拒否します。2 つの IPv4 アドレス範囲、192.0.2.0/24 および 203.0.113.0/24 を一覧表示する Condition 要素の NotIpAddress は、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:SourceIp の代わりに aws:VpcSourceIp を使用します。

"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