Jack Rogers
Jack Rogers

Reputation: 695

Downloading Files on a Public S3 Bucket Without Authentication Using Python

Im trying to download a file from an S3 bucket that is public and requires no authentication (meaning no need to hardcode Access and Secret keys to access nor store it in AWS CLI), yet I still cannot access it via boto3.

Python code

import boto3
import botocore
from botocore import UNSIGNED
from botocore.config import Config

BUCKET_NAME = 'converted-parquet-bucket' 
PATH = 'json-to-parquet/names.snappy.parquet' 

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

try:
    s3.Bucket(BUCKET_NAME).download_file(PATH, 'names.snappy.parquet')
except botocore.exceptions.ClientError as e: 
    if e.response['Error']['Code'] == "404":
        print("The object does not exist.")
    else:
        raise

I get this error code when I execute the code

AttributeError: 'S3' object has no attribute 'Bucket'

If it helps, here is my bucket public policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::converted-parquet-bucket/*"
        }
    ]
}

If your suggestion is to store keys, please dont, that is not what I'm trying to do.

Upvotes: 4

Views: 6062

Answers (1)

Ntwobike
Ntwobike

Reputation: 2741

try resource s3 = boto3.resource('s3') instead of s3 = boto3.client('s3')

Upvotes: 1

Related Questions