本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用命令行中的 IAM 身份验证连接到 Amazon Neptune 数据库
如本文档中的许多示例所示,拥有用于向 Neptune 数据库集群提交查询的命令行工具非常方便。如果未启用 IAM 身份验证,则 curl
但是,为了确保您的数据安全,最好启用 IAM 身份验证。
启用 IAM 身份验证后,必须使用签名版本 4 (Sig4) 对每个请求进行签名。第三方 awscurlcurl
相同的语法,并且可以使用 Sig4 签名对查询进行签名。使用 awscurl部分解释了如何将 awscurl
安全地与临时凭证结合使用。
设置命令行工具以使用 HTTPS
Neptune 要求所有连接都使用 HTTPS。任何像 curl
或 awscurl
这样的命令行工具都需要访问相应的证书才能使用 HTTPS。只要 curl
或 awscurl
可以找到相应的证书,它们即可像处理 HTTP 连接一样处理 HTTPS 连接,而无需额外的参数。本文档中的示例基于该场景。
要了解如何获取此类证书以及如何将其正确格式化为 curl
可以使用的证书颁发机构 (CA) 证书存储,请参阅 curl
文档中的 SSL 证书验证
然后,您使用 CURL_CA_BUNDLE
环境变量指定此 CA 证书存储的位置。在 Windows 上,curl
自动在名为 curl-ca-bundle.crt
的文件中查找它。首先在与 curl.exe
相同的目录中查找,然后在路径的其他位置查找。有关更多信息,请参阅 SSL 证书验证
将 awscurl
与临时凭证结合使用以安全地连接到启用了 IAM 身份验证的数据库集群
awscurlcurl
相同的语法,但还需要其它信息:
-
--access_key
– 有效的访问密钥。如果未使用此参数提供,则必须在AWS_ACCESS_KEY_ID
环境变量或配置文件中提供它。 -
--secret_key
– 对应于访问密钥的有效秘密密钥。如果未使用此参数提供,则必须在AWS_SECRET_ACCESS_KEY
环境变量或配置文件中提供它。 -
--security_token
– 有效的会话令牌。如果未使用此参数提供,则必须在AWS_SECURITY_TOKEN
环境变量或配置文件中提供它。
过去,通常的做法是将永久凭证与 awscurl
结合使用,例如 IAM 用户凭证甚至根凭证,但不建议这样做。而是使用其中一个Amazon
安全令牌服务 (STS) APIs 或其Amazon CLI 包装器生成临时证书。
最好将 STS 调用返回的 AccessKeyId
、SecretAccessKey
和 SessionToken
值放入 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