S3ResponseError:403 Forbidden。调用GetObject操作时发生错误(NoSuchKey):指定的键不存在

时间:2017-08-13 05:00:12

标签: amazon-s3 boto boto3

try:

  conn = boto.connect_s3(access_key,secret_access_key)
  bucket = conn.get_bucket(bucket_name, validate=False)
  k1 = Key(bucket)
  k1.key = 'Date_Table.csv'

  # k = bucket.get_key('Date_Table.csv')
  k1.make_public()
  k1.get_contents_to_filename(tar)

except Exception as e:
  print(e)

我收到错误

  

S3ResponseError:403禁止   AccessDenied存取   DeniedD9ED8BFF6D6A993Eaw0KmxskATNBTDUEo3SZdwrNVolAnrt9 / PKO / EGlq6X9Gxf36fQiBAWQA7dBSjBNZknMxWDG9GI =

我尝试了所有可能性并仍然得到同样的错误..请指导我如何解决这个问题。

我尝试了以下其他方式并收到错误

  

调用GetObject操作时发生错误(NoSuchKey):   指定的密钥不存在。

session = boto3.session.Session(aws_access_key_id=access_key, aws_secret_access_key=secret_access_key,region_name='us-west-2')
    print ("session:"+str(session)+"\n")
    client = session.client('s3', endpoint_url=s3_url)
    print ("client:"+str(client)+"\n")
    stuff = client.get_object(Bucket=bucket_name, Key='Date_Table.csv')
    print ("stuff:"+str(stuff)+"\n")
    stuff.download_file(local_filename)

GE

1 个答案:

答案 0 :(得分:0)

始终使用boto3。 boto已弃用。

  1. 只要您设置AWS CLI凭据,就不需要传递硬编码凭据。彻底阅读boto3 credential setup

  2. 除非您使用不同的区域和用户个人资料,否则没有理由启动boto3.session。

  3. 花时间研究服务客户端(boto3.client)与服务资源(boto3.resources)之间的区别。

  4. 低级别boto3.client更容易用于实验。如果需要传递任意对象,请使用高级别的boto3.resource。

  5. 以下是boto3.client("s3").download_file的简单代码。

    import boto3 
    # initiate the proper AWS services client, i.e. S3 
    s3 = boto3.client("s3")
    s3.download_file('your_bucket_name', 'Date_Table.csv', '/your/local/path/and/filename')