View a markdown version of this page

配置网络、安全组和 IAM 身份验证 - Amazon Neptune

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

配置网络、安全组和 IAM 身份验证

在 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 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 身份验证,则您的 pod 必须在证书过期之前刷新证书。对于新的部署,我们建议使用 Amazon EKS Pod 标识。服务账户的 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,请确保代理可以访问所有路径,而不仅仅是。/explorer在 Amazon EKS 上,配置您的入口控制器规则以允许所有路径。在 Amazon ECS 上,配置您的 Application Load Balancer 目标组和侦听器规则,以转发指向 Graph Explorer 容器的所有路径。Graph Explorer 的代理调用/summary/gremlin/openCypher、、和/sparql。 Path-restricted 路由规则会以静默方式中断代理。