

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ネットワーク、セキュリティグループ、IAM 認証を設定する
<a name="best-practices-ecs-eks-networking-iam"></a>

Amazon ECS または Amazon EKS でのコンテナ化されたデプロイでは、Neptune に接続するために正しいネットワーク設定と IAM 認証情報管理が必要です。

**セキュリティグループのチェックリスト**
+ Neptune クラスターセキュリティグループは、Amazon EKS ノードまたはポッド CIDR 範囲からのポート 8182 (または Neptune クラスター用に設定されたカスタムポート) でインバウンド TCP を許可する必要があります。
+ カスタムネットワーキングで Amazon VPC CNI プラグインを使用する場合は、ポッドサブネットに Neptune サブネットへのルートがあることを確認します。
+ Neptune は、Amazon ECS または Amazon EKS クラスターと同じ Amazon VPC 内にあるか、Amazon VPC ピアリングまたは Transit Gateway を介して接続されている必要があります。

**コンテナ内からの接続を確認する**

アプリケーションレベルの問題をデバッグする前に、コンテナ内から次のいずれかのコマンドを実行してネットワークパスを確認します。

------
#### [ AWS CLI ]

```
aws neptunedata get-engine-status \
  --endpoint-url https://{{your-neptune-endpoint}}:8182
```

詳細については、 AWS CLI 「 コマンドリファレンス」の[get-engine-status](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/get-engine-status.html)」を参照してください。

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    region_name='{{us-east-1}}',
    endpoint_url='https://{{your-neptune-endpoint}}:8182',
    config=Config(read_timeout=10)
)

response = client.get_engine_status()
print(response['status'])
```

------
#### [ awscurl ]

```
awscurl https://{{your-neptune-endpoint}}:8182/status \
  --region {{us-east-1}} \
  --service neptune-db
```

**注記**  
この例では、 AWS 認証情報が 環境で設定されていることを前提としています。{{us-east-1}} を Neptune クラスターのリージョンに置き換えます。

------
#### [ curl ]

```
curl -k https://{{your-neptune-endpoint}}:8182/status
```

**注記**  
`-k` フラグは証明書の検証をスキップします。これは、本番稼働用コードではなく、接続テストにのみ使用します。

------

応答が成功すると、セキュリティグループ、ルーティング、DNS 解決がすべて機能していることが確認されます。タイムアウトは、ネットワークレベルの問題を示します。

**IAM 認証情報の更新**

Neptune で [IAM 認証](iam-auth.md)を使用する場合、ポッドは有効期限が切れる前に認証情報を更新する必要があります。新しいデプロイには [Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) をお勧めします。サービスアカウントの IAM ロール (IRSA) もサポートされ、広く使用されています。

どちらの方法でも、起動時に一度ではなく、認証ジェネレーター関数*内で*認証情報を取得します。IRSA トークンと Pod Identity トークンは 1 時間後に期限切れになります。初期化時に認証情報をキャッシュすると、トークンの有効期限が切れ`AccessDeniedException: security token expired`た後、リクエストは で失敗します。
+ gremlin-go の場合: に渡された`gen`関数`cfg.Credentials.Retrieve(ctx)`内で を呼び出します`NewDynamicAuth`。
+ Java の場合: 新しい接続ごとに SigV4 署名`HandshakeInterceptor`を更新する `NeptuneGremlinClient`で を使用します。

**クロスアカウントアクセス**

Neptune は、直接のクロスアカウント IAM 認証をサポートしていません。Amazon EKS クラスターが Neptune クラスターとは異なる AWS アカウントにある場合、ポッドは認証する前に Neptune アカウントでロールを引き受ける必要があります。

**Graph Explorer のイングレス設定**

コンテナ化された環境で [Graph Explorer](https://github.com/aws/graph-explorer) を実行する場合は、 だけでなく、すべてのパスにプロキシがアクセスできることを確認してください`/explorer`。Amazon EKS で、すべてのパスを許可するようにイングレスコントローラールールを設定します。Amazon ECS で、Application Load Balancer ターゲットグループとリスナールールを設定して、すべてのパスを Graph Explorer コンテナに転送します。Graph Explorer のプロキシは、`/summary`、、`/gremlin``/openCypher`、および を呼び出します`/sparql`。パス制限付きルーティングルールは、プロキシをサイレントに切断します。