我可以匿名使用boto3吗?

时间:2016-01-18 23:21:33

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

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

s3 = boto.connect_s3(anon=True)

这可以用boto3吗?

3 个答案:

答案 0 :(得分:14)

禁用签名

import boto3

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

答案 1 :(得分:11)

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

import boto3
from botocore import UNSIGNED
from botocore.client import Config

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

答案 2 :(得分:0)

从当前的boto3版本(1.9.168)开始,这些功能似乎都不起作用。这种hack(由botocore上未解决的github问题提供)确实可以解决问题:

    @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
    public <T> T getOrInsertWithUniqueConstraints(Supplier<Optional<T>> fetch, Supplier<T> insert) {
        try {
            Optional<T> entity = fetch.get();
            T insertedEntity = entity.orElseGet(insert);
            entityManager.flush();
            return insertedEntity;
        }
        catch (PersistenceException e){
            DataAccessException dae = persistenceExceptionTranslator.translateExceptionIfPossible(e);
            if (dae instanceof DataIntegrityViolationException){
                Optional<T> entityAlreadyInserted = fetch.get();
                return entityAlreadyInserted.get();
            }
            else {
                throw e;
            }
        }
    }