使用命令行工具向您的 Neptune 数据库集群提交查询 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用命令行工具向您的 Neptune 数据库集群提交查询

如本文档中的许多示例所示,拥有用于向 Neptune 数据库集群提交查询的命令行工具非常方便。如果未启用 IAM 身份验证,则 curl 工具是与 Neptune 端点通信的上佳选择。

但是,为了确保您的数据安全,最好启用 IAM 身份验证。

启用 IAM 身份验证后,必须使用签名版本 4 (Sig4) 对每个请求进行签名。第三方 awscurl 命令行工具使用与 curl 相同的语法,并且可以使用 Sig4 签名对查询进行签名。使用 awscurl部分解释了如何将 awscurl 安全地与临时凭证结合使用。

设置命令行工具以使用 HTTPS

Neptune 要求所有连接都使用 HTTPS。任何像 curlawscurl 这样的命令行工具都需要访问相应的证书才能使用 HTTPS。只要 curlawscurl 可以找到相应的证书,它们即可像处理 HTTP 连接一样处理 HTTPS 连接,而无需额外的参数。本文档中的示例基于该场景。

要了解如何获取此类证书以及如何将其正确格式化为 curl 可以使用的证书颁发机构 (CA) 证书存储,请参阅 curl 文档中的 SSL 证书验证

然后,您使用 CURL_CA_BUNDLE 环境变量指定此 CA 证书存储的位置。在 Windows 上,curl 自动在名为 curl-ca-bundle.crt 的文件中查找它。首先在与 curl.exe 相同的目录中查找,然后在路径的其他位置查找。有关更多信息,请参阅 SSL 证书验证

awscurl 与临时凭证结合使用以安全地连接到启用了 IAM 身份验证的数据库集群

awscurl 工具使用与 curl 相同的语法,但还需要其它信息:

  • --access_key – 有效的访问密钥。如果未使用此参数提供,则必须在 AWS_ACCESS_KEY_ID 环境变量或配置文件中提供它。

  • --secret_key – 对应于访问密钥的有效秘密密钥。如果未使用此参数提供,则必须在 AWS_SECRET_ACCESS_KEY 环境变量或配置文件中提供它。

  • --security_token – 有效的会话令牌。如果未使用此参数提供,则必须在 AWS_SECURITY_TOKEN 环境变量或配置文件中提供它。

过去,通常的做法是将永久凭证与 awscurl 结合使用,例如 IAM 用户凭证甚至根凭证,但不建议这样做。而是使用 Amazon 安全令牌服务 (STS) API 之一或其 Amazon CLI 包装器之一生成临时凭证。

最好将 STS 调用返回的 AccessKeyIdSecretAccessKeySessionToken 值放入 Shell 会话的相应环境变量中,而不是放在配置文件中。然后,当 Shell 终止时,凭证会被自动丢弃,而配置文件则不是这样。同样,请求的临时凭证期限也不要超过您可能需要的期限。

以下示例显示了您可以在 Linux Shell 中使用 sts assume-role 获取有效期为半小时的临时凭证,然后将它们放在 awscurl 可以找到它们的环境变量中的步骤:

aws sts assume-role \ --duration-seconds 1800 \ --role-arn "arn:aws:iam::(account-id):role/(rolename)" \ --role-session-name AWSCLI-Session > $output AccessKeyId=$(cat $output | jq '.Credentials''.AccessKeyId') SecretAccessKey=$(cat $output | jq '.Credentials''.SecretAccessKey') SessionToken=$(cat $output | jq '.Credentials''.SessionToken') export AWS_ACCESS_KEY_ID=$AccessKeyId export AWS_SECRET_ACCESS_KEY=$SecretAccessKey export AWS_SESSION_TOKEN=$SessionToken

然后,您可以使用 awscurl 向数据库集群发出签名请求,如下所示:

awscurl (your cluster endpoint):8182/status \ --region us-east-1 \ --service neptune-db