【问题标题】:unable to locate credentials for boto3.client both locally, and on lambda无法在本地和 lambda 上找到 boto3.client 的凭据
【发布时间】:2020-10-08 09:50:47
【问题描述】:

我的理解是,为了访问redshift等AWS应用,这样做的方式是

client = boto3.client("redshift", region_name="someRegion", aws_access_key_id="foo", aws_secret_access_key="bar")

response = client.describe_clusters(ClusterIdentifier="mycluster")

print(response)

此代码在本地通过 pycharm 以及在 AWS lambda 上运行良好。

但是,aws_access_key_idaws_secret_access_key 都来自我,我是否正确? IE:我的 IAM 用户安全访问密钥。应该是这样吗?还是我想创建一个不同的用户/角色以便通过boto3 访问redshift

更重要的问题是,如何正确存储和检索aws_access_key_idaws_secret_access_key?我知道这可以通过secrets manager 完成,但我仍然面临这样的问题,如果我运行以下代码,我会收到一条错误消息,提示它无法找到凭据。

client = boto3.client("secretsmanager", region_name="someRegion")
# Met with the problem that it is unable to locate my credentials. 

【问题讨论】:

    标签: python amazon-web-services amazon-redshift


    【解决方案1】:

    执行此操作的正确方法是创建一个允许所需红移功能的 IAM 角色,然后将该角色附加到您的 lambda。

    创建角色时,您可以灵活地创建策略来细化对某些操作和/或某些资源的访问权限。

    将 IAM 角色附加到您的 lambda 后,您将能够执行以下操作:

    >>> client = boto3.client("redshift")
    

    【讨论】:

      【解决方案2】:

      来自docs。由于您将凭据与代码混合在一起,因此第一个和第二个选项不安全。 如果代码在 AWS EC2 上运行,最好的方法是使用“担任角色”来授予 EC2 实例权限。如果代码在 AWS 之外运行,您必须选择一个选项,例如使用 ~/.aws/credentials

      Boto3 在搜索凭据时会查找多个位置。 Boto3 查找凭据的机制是搜索可能位置的列表,并在找到凭据后立即停止。 Boto3 搜索凭据的顺序是:

      • 在 boto.client() 方法中将凭据作为参数传递
      • 在创建 Session 对象时将凭据作为参数传递
      • 环境变量
      • 共享凭据文件 (~/.aws/credentials)
      • AWS 配置文件 (~/.aws/config)
      • 担任角色提供者
      • Boto2 配置文件(/etc/boto.cfg 和 ~/.boto)
      • 配置了 IAM 角色的 Amazon EC2 实例上的实例元数据服务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-22
        • 2017-08-21
        • 2022-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        相关资源
        最近更新 更多