

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

# 設定聯網、安全群組和 IAM 身分驗證
<a name="best-practices-ecs-eks-networking-iam"></a>

Amazon ECS 或 Amazon EKS 上的容器化部署需要正確的網路組態和 IAM 憑證管理，才能連線至 Neptune。

**安全群組檢查清單**
+ Neptune 叢集安全群組必須允許來自 Amazon EKS 節點或 Pod CIDR 範圍的連接埠 8182 （或為您的 Neptune 叢集設定的自訂連接埠） 上的傳入 TCP。
+ 如果您搭配自訂聯網使用 Amazon VPC CNI 外掛程式，請確認 Pod 子網路具有 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)，您的 Pod 必須在憑證過期之前重新整理憑證。我們建議將 [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：`NeptuneGremlinClient`搭配`HandshakeInterceptor`重新整理每個新連線上 SigV4 簽署的 使用 。

**跨帳戶存取**

Neptune 不支援直接跨帳戶 IAM 身分驗證。如果您的 Amazon EKS 叢集位於與 Neptune 叢集不同的 AWS 帳戶中，則 Pod 必須先在 Neptune 帳戶中擔任角色，才能進行驗證。

**Graph Explorer 的輸入組態**

如果您在容器化環境中執行 [Graph Explorer](https://github.com/aws/graph-explorer)，請確保代理可存取所有路徑，而不只是 `/explorer`。在 Amazon EKS 上，設定您的輸入控制器規則以允許所有路徑。在 Amazon ECS 上，設定 Application Load Balancer 目標群組和接聽程式規則，將所有路徑轉送至 Graph Explorer 容器。Graph Explorer 的代理會呼叫 `/summary`、`/openCypher`、 `/gremlin`和 `/sparql`。路徑限制路由規則會無提示地中斷代理。