

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 配置网络、安全组和 IAM 身份验证
<a name="best-practices-ecs-eks-networking-iam"></a>

在 Amazon ECS 或 Amazon EKS 上进行容器化部署需要正确的网络配置和 IAM 凭证管理才能连接到 Neptune。

**安全组清单**
+ Neptune 集群安全组必须允许来自 Amazon EKS 节点或容器 CIDR 范围的端口 8182（或为海王星集群配置的自定义端口）上的入站 TCP。
+ 如果您使用带有自定义网络的 Amazon VPC CNI 插件，请验证 pod 子网是否有通往 Neptune 子网的路由。
+ Neptune 必须与您的亚马逊 ECS 或 Amazon EKS 集群位于同一个亚马逊 VPC 中，或者通过亚马逊 VPC 对等互连或 Transit Gateway 进行连接。

**从容器内部验证连接**

在调试应用程序级问题之前，请通过在容器内部运行以下命令之一来确认网络路径：

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

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

有关更多信息，请参阅《命令参考》中的 [get-engine-stat](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/get-engine-status.html) us。 AWS CLI 

------
#### [ 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 标识](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)。服务账户的 IAM 角色 (IRSA) 也得到支持和广泛使用。

无论采用哪种方法，都要*在*身份验证生成器函数中检索凭证，而不是在启动时检索一次。IRSA 和 Pod 身份令牌将在 1 小时后过期。如果您在初始化时缓存凭证，则请求将在令牌过期`AccessDeniedException: security token expired`后失败。
+ 对于 gremlin-go 来说：在传递给的`gen`函数`cfg.Credentials.Retrieve(ctx)`内部调用。`NewDynamicAuth`
+ 对于 Java：`NeptuneGremlinClient`与在每个新`HandshakeInterceptor`连接上刷新 Sigv4 签名的配合使用。

**Cross-account access**

Neptune 不支持直接跨账户 IAM 身份验证。如果您的 Amazon EKS 集群与您的 Neptune 集群位于不同的 AWS 账户中，则该容器必须先在 Neptune 账户中扮演角色，然后才能进行身份验证。

**图表浏览器的入口配置**

如果您在容[器化环境中运行 Graph Explorer](https://github.com/aws/graph-explorer)，请确保代理可以访问所有路径，而不仅仅是。`/explorer`在 Amazon EKS 上，配置您的入口控制器规则以允许所有路径。在 Amazon ECS 上，配置您的 Application Load Balancer 目标组和侦听器规则，以转发指向 Graph Explorer 容器的所有路径。Graph Explorer 的代理调用`/summary``/gremlin``/openCypher`、、和`/sparql`。 Path-restricted 路由规则会以静默方式中断代理。