微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Lambda函数调用AWS Secrets Manager时出现CORS问题

如何解决从Lambda函数调用AWS Secrets Manager时出现CORS问题

我有一个用python / chalice编写的API部署为Lambda,可以从Web应用程序中调用。我以为我已经解决了通常的CORS问题,至少,事情正在顺利进行并且已经做了一段时间。作为一个好孩子,我认为是时候将一些硬编码的凭证从代码中移出到AWS Secrets Manager中了。在本地环境中,一切都仍然运行良好(可能是因为API和应用程序都在本地主机上),而且凭据已正确从Secrets Manager中拉出。但是,当我部署API时,Web应用现在报告了CORS错误

Access to XMLHttpRequest at 'https://api' from origin 'https://webapp' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我已经跟踪了问题的根源,直到我对boto3.session.Session()。client()。get_secret_value()的调用。如果我不拨打电话-没有CORS错误

以下是我的API代码的相关代码段:

@app.route('/get/table',methods=['GET'],cors=True)
def GetTable():

    session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',region_name="eu-west-2"
    )
    get_secret_value_response = client.get_secret_value(SecretId="prod/xxxx")

那么,怎么了?我想念一些简单的东西吗?

解决方法

最后我到了那里。根本原因不是CORS,而是Lambda使用VPC的事实。它在本地运行的事实(不确定如何运行-也许与我为数据库访问设置的ssh隧道有关)只是增加了混乱的迷雾!

在键盘上敲打我的头很多之后,它才开始起作用:

  • 为VPC的Secrets Manager设置VPC端点
  • 向VPC安全组添加入站规则:安全组的所有TCP(也许可以合理化,但我不知道该怎么做)
  • 修改Lamdba角色的IAM权限以添加Secrets Manager。

- 编辑

哦,乐趣还在继续。上面的方法很好用...直到我用Chalice部署Lambda的新版本。默认情况下,Chalice似乎会为每个部署生成一个新策略,即使它在IAM控制台中看起来正确(存在Secrets Manager策略)也无法正常工作!

我必须从角色复制IAM策略摘要(工作时),然后在本地.chalice文件夹中创建一个新的policy.json文件。部署时,请指定 chalice deploy --no-autogen-policy 或将"autogen_policy": false添加到.chalice / config.json似乎终于可以解决问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?