-1

我已经启动了一个极光无服务器 posgres 兼容数据库,我正在尝试从 lambda 函数连接到它,但AccessDenied出现错误:

AccessDeniedException:
状态代码:403,请求 ID:2b19fa38-af7d-4f4a-aaa5-7d068e92c901

细节:

  • 如果我使用 lambda 尝试使用的相同 secret-arn 和数据库名称,我可以通过查询编辑器手动连接和查询数据库。我已经三重检查了arns是否正确
  • 我的 lambdas 不在 vpc 中,但正在使用数据 api。RDS 集群在默认 vpc 中
  • 我暂时授予了我的 lambdas 管理员访问权限,以便我知道这不是 lambda 方面的基于策略的问题
  • Cloudwatch 不包含有关错误的任何其他详细信息
  • 我可以从我的个人计算机的命令行(不在 vpc 上)查询数据库

有什么建议么?也许有一种方法可以从错误中获得更好的细节?

4

2 回答 2

1

啊哈!在尝试通过命令行连接并能够成功连接后,我意识到这必须与网络无关。稍微深入研究一下我的代码,我最终意识到代码的连接部分没有任何问题,而是使用用户权限来创建尝试访问数据的会话/服务。事后看来,我认为显式AccessDenied(而不是超时)应该是我能够访问数据库但无法对它做任何事情的线索。

深入研究后,我发现这两件事非常不同:

  • AmazonRDSFullAccess
  • AmazonRDSDataFullAccess

如果您想使用数据 api,您必须拥有 AmazonRDS数据完全访问(或类似)策略。AmazonRDSFullAccess 不是人们可能假设的 AmazonRDSDataFullAccess 权限的超集。(如果您查看 AmazonRDSFullAccess 策略的 json,您会注意到权限覆盖rds:*而其他策略覆盖rds-data:*,因此显然这些只是完全不同的权限空间)

TLDR:使用AmazonRDSDataFullAccess策略(或类似策略)访问数据 api。 AmazonRDSFullAccess不管用。

于 2021-01-05T15:39:52.903 回答
0

我认为您需要将您的 lambda 放在与无服务器数据库相同的 VPC 中。我做了一个快速测试,并能够从同一 VPC 中的 EC2 连接到它。

ubuntu@ip-172-31-5-146:~$ telnet database-11.cluster-ckuv4ugsg77i.ap-northeast-1.rds.amazonaws.com 5432
Trying 172.31.14.180...
Connected to vpce-0403cfe830963dfe9-u0hmgbbx.vpce-svc-0445a873575e0c4b1.ap-northeast-1.vpce.amazonaws.com.
Escape character is '^]'.
^CConnection closed by foreign host.

这是我的安全组。 在此处输入图像描述

于 2021-01-05T07:12:53.807 回答