2017-05-11 1 views
2

우리의 기록에 존재하지 않습니다Boto3 오류 : 당신이 제공하는 AWS 액세스 키 ID가 나는 현재 가상 머신 내부의 아마존 S3에 대한 액세스 권한을 얻을과 같이 파일을 다운로드하려고

s3 = boto3.resource('s3', 
     aws_access_key_id="xxxxxxxxxxx", 
     aws_secret_access_key="xxxxxxxxxxxxxxxxx") 
s3client = boto3.client('s3') 

bucket = s3.Bucket('bucketone') 

for obj in bucket.objects.all(): 
    s3client.download_file(bucket_name, obj.key, filename) 

을하지만 난 오류가 발생하는 경우 :

botocore.exceptions.ClientError: An error occurred (InvalidAccessKeyId) when calling the ListObjects operation: The AWS Access Key Id you provided does not exist in our records.

내가 잘못 할 수 있습니까? aws_access_key_idaws_secret_access_key을 여러 번 확인했지만 여전히 동일한 오류가 발생했습니다. 로컬 컴퓨터는 아니지만 로컬 컴퓨터에서도 동일한 코드가 실제로 작동합니다. 내가 키에 하드 코딩을해야하는 이유가 있습니다.

+0

확인하시기 바랍니다 : http://stackoverflow.com/questions/39051477/the-aws-access-key-id-does-not-exist-in-our-records/41850256#41850256 –

+1

당신을 했 aws cli와 연결해보십시오. aws configure를 실행 한 후 aws s3 ls를 실행하고 작동하는지 확인하십시오. 또한 region_name 매개 변수를'boto3.resource'에 전달하십시오. – iMil

+0

access-key-id가'AKIA ... '로 시작합니까 아니면'ASIA ...'입니까? –

답변

1

boto3 세션에 대한 액세스 권한을 설정해야합니다. 코드에 키를 넣고 싶지는 않습니다. 먼저 aws configure를 실행하고 .credentials 파일에서 aws_access_key_id 및 aws_secret_access_key를 설정하는 것이 좋습니다. 그런 다음 코드에서 다음을 수행하십시오, 당신이 할 필요가 없습니다 수도 당신은 그냥 기본 프로필이있는 경우

session = boto3.Session(profile_name='name_of_your_profile') 

또는 좋은 측정을 위해, 단지 넣어 :

session = boto3.Session(profile_name='default') 

을 당신이 것을 일단 귀하의 코드를 사용하여 s3에 연결할 수 있습니다.

s3 = session.resource('s3') 
bucket = s3.Bucket('bucketone') 
for obj in bucket.objects.all(): 
    print(obj.key) 

코드에 약간의 문제가 있습니다. s3 클라이언트를 작성 중입니다. S3 클라이언트에는 Bucket 메소드 또는 속성이 없습니다.

s3client = session.client('s3') 
response = s3client.get_object(Bucket='bucketone', key='your key') 

그런 다음 양동이에 개체의 목록을 보려면 반환 된 응답을 반복 할 수 있습니다 : 당신이 할 것 S3 클라이언트와 같은 일을합니다.

오류를 처리해야합니다.

0

EC2/람다/등을 사용하는 경우. 당신은 temporary security credentials을 얻을 것입니다. 즉, AWS_SESSION_TOKEN 환경 변수를 사용하여 boto3에 전달해야합니다.

생략하면 생략하면 InvalidAccessKeyId 오류가 발생합니다. 이 도움이된다면