【问题标题】:Boto3 doesn't use keys from config fileBoto3 不使用配置文件中的密钥
【发布时间】:2023-04-05 19:54:01
【问题描述】:

我希望 Boto3 从配置文件中获取访问密钥和密钥,而不是对其进行硬编码。在我的 Linux 服务器上,我将以下环境变量 AWS_SHARED_CREDENTIALS_FILE 设置为值 /app/.aws/credentials。在 /app/.aws/ 我放置了一个名称为 credentials 的文件,其内容如下:

[default]
aws_access_key_id = abcd
aws_secret_access_key = abcd

当然我用的是实际的键而不是 abcd。

Python:

import boto3
conn = boto3.client('s3',
                    region_name="eu-west-1",
                    endpoint_url="endpoint",
                    aws_access_key_id=aws_access_key_id,
                    aws_secret_access_key=aws_secret_access_key,
                    config=Config(signature_version="s3", s3={'addressing_style': 'path'}))

但是它说name'aws_access_key_id' is not defined。我该如何解决?谢谢

编辑:

>>> os.environ['AWS_SHARED_CREDENTIALS_FILE']
'/app/.aws/credentials'

【问题讨论】:

  • 如果可以避免的话,不要在服务器上存储长期存在的凭据。使用 IAM 角色通过临时凭证 (docs.aws.amazon.com/IAM/latest/UserGuide/…) 授予权限。
  • 感谢您的建议,但我使用的是非 Amazon 托管的 S3 服务。

标签: python linux amazon-web-services environment-variables boto3


【解决方案1】:

如果您已经创建了带有 aws 凭据的凭据文件夹,这意味着您在实例化客户端时不需要指定它们。以下应该有效:

import boto3

conn = boto3.client('s3',
                region_name="eu-west-1",
                endpoint_url="endpoint",
                config=Config(signature_version="s3", s3={'addressing_style': 'path'}))

【讨论】:

    【解决方案2】:

    如果您在 EC2 实例上运行应用程序,您还可以为您的实例分配 S3 角色并让 boto 代入该角色。防止您在实例中存储密钥。

    查看文档中的“Assume Role Provider”部分:

    http://boto3.readthedocs.io/en/latest/guide/configuration.html

    也可以链接到 IAM 角色:

    http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 2016-03-01
      • 1970-01-01
      • 2016-09-02
      • 2020-05-11
      • 1970-01-01
      相关资源
      最近更新 更多