启用 IAM 数据库身份验证后无法连接到 AWS Neptune 数据库

unable to connect to AWS Neptune DB after enabling IAM DB authorisation

我在启用 IAM 数据库授权后尝试连接到 AWS neptune 数据库,但它无法连接并失败并出现以下错误。

{"code":"AccessDeniedException","re​​questId":"68bbc87a-cbf6-31d3-5829-91f32062239f","detailedMessage":"缺少身份验证令牌"}

然而,它在禁用 IAM DB 授权后工作正常。

我已经创建了一个策略(使用 link https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-policy.html)来连接到海王星数据库并将该策略附加到 IAM 角色,该角色正在添加到 ec2 实例。我可以通过 8182 端口远程登录到海王星数据库端点。

有人可以帮忙吗。

启用 IAM 身份验证后,必须使用 SigV4 对对 HTTP 端点的请求进行签名。您可以使用 awscurl 之类的工具来执行此操作。

这是 Amazon Neptune 文档中的一个示例,我对其进行了稍微修改以使其指向 /status 端点。

正确设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量(并且 如果您使用的是临时凭证,也可以 AWS_SECURITY_TOKEN)。您也可以将这些作为参数传递给 awscurl。然后使用诸如(将区域更改为您所在的区域)之类的命令。

awscurl -X GET --service neptune-db  --region us-west-2 "$SYSTEM_ENDPOINT/status"

您可以通过 AWS CLI 工具使用 sts 获取临时凭证,如下所示:

aws sts get-session-token

如果您 运行 在 EC2 实例上,只要 EC2 实例附加了可以访问 Neptune 的角色,您就可以从元数据服务获取令牌。此处有更多详细信息:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html