【问题标题】:Can I use boto3 anonymously?我可以匿名使用 boto3 吗?
【发布时间】:2016-04-24 06:50:36
【问题描述】:

使用 boto,我可以通过传递 anon= 关键字参数连接到公共 S3 存储桶而无需凭据。

s3 = boto.connect_s3(anon=True)

boto3 可以做到这一点吗?

【问题讨论】:

    标签: python amazon-web-services amazon-s3 boto boto3


    【解决方案1】:

    是的。您的凭据用于对您发出的所有请求进行签名,因此您要做的就是将客户端配置为根本不执行签名步骤。你可以这样做:

    import boto3
    from botocore import UNSIGNED
    from botocore.client import Config
    
    s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED))
    # Use the client
    

    【讨论】:

    • 用最新的解决方案更新这个答案会很好。
    【解决方案2】:

    禁用签名

    import boto3
    
    from botocore.handlers import disable_signing
    resource = boto3.resource('s3')
    resource.meta.client.meta.events.register('choose-signer.s3.*', disable_signing)
    

    【讨论】:

    • 如果存在凭据,这是否会阻止其被使用?是否适合设置为默认值?
    • 它将停止在该客户端上使用凭据。您将需要另一个客户端来连接到受限的 s3 存储桶。我的解决方案也是如此。注意:两种解决方案的作用完全相同。
    【解决方案3】:

    这些似乎都不适用于当前的 boto3 版本 (1.9.168)。这个 hack(由 botocore 上一个未修复的 github 问题提供)似乎可以解决问题:

    client = boto3.client('s3', aws_access_key_id='', aws_secret_access_key='')
    client._request_signer.sign = (lambda *args, **kwargs: None)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多