【问题标题】:How does AWS SDK know the credentials without specifying it?AWS SDK 如何在不指定凭证的情况下知道凭证?
【发布时间】:2021-03-08 14:57:54
【问题描述】:

我很好奇 AWS SDK 如何在不明确提供凭证的情况下访问本地服务,例如 S3。例如,这个 python 代码只提供了存储桶名称和密钥名称,但仍然可以从我本地的 s3 访问文件:

def s3():
    bucket = "my-bucket"
    file_name = "folder1/sample.json"

    s3 = boto3.client('s3')

    obj = s3.get_object(Bucket=bucket, Key=file_name)
    file_content = obj["Body"].read().decode('utf-8')

AWS SDK 从哪里获得凭证?它是否使用在 CLI 中使用命令 aws configure 配置的角色?如果你提供一个显式的访问密钥和秘密密钥,那么优先级是多少?

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-sdk boto3


    【解决方案1】:

    所有 Amazon SDK 都遵循类似的模式。对于 boto3,它们记录在 here 但为了完整性,它们是:

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

    这取决于你的环境是如何配置的,但听起来你有一个~/.aws/credentials 文件。

    【讨论】:

    • 我错过了这个。谢谢。
    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2020-11-24
    • 1970-01-01
    • 2021-09-16
    相关资源
    最近更新 更多