boto3 S3에 연결할 때 자격 증명을 지정하는 방법은 무엇입니까?


107

boto에서 다음과 같은 방식으로 S3에 연결할 때 내 자격 증명을 지정했습니다.

import boto
from boto.s3.connection import Key, S3Connection
S3 = S3Connection( settings.AWS_SERVER_PUBLIC_KEY, settings.AWS_SERVER_SECRET_KEY )

그런 다음 S3를 사용하여 작업을 수행 할 수 있습니다 (제 경우에는 버킷에서 객체 삭제).

boto3에서 내가 찾은 모든 예는 다음과 같습니다.

import boto3
S3 = boto3.resource( 's3' )
S3.Object( bucket_name, key_name ).delete()

내 자격 증명을 지정할 수 없으므로 모든 시도가 오류와 함께 실패 InvalidAccessKeyId합니다.

boto3에 자격 증명을 어떻게 지정할 수 있습니까?


이 답변이 도움이 될 수 있습니다. stackoverflow.com/a/36913771/2681632
Ilja Everilä

1
공식 문서의 "Configuring Credentials"섹션을 참조하십시오 : boto3.readthedocs.io/en/latest/guide/configuration.html
Mark B

답변:


165

세션을 만들 수 있습니다 .

import boto3
session = boto3.Session(
    aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY,
    aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY,
)

그런 다음 해당 세션을 사용하여 S3 리소스를 가져옵니다.

s3 = session.resource('s3')

24
작동하면 대답으로 받아 들일 것입니다. 도대체 왜 이것을 명백한 방법으로 문서화하지 않습니까? !!
Robert Brax 2017-08-31

3
위의 댓글에서 언급 한 바와 같이, 이것은 이다 에서 실제로 문서 .
Moot

72

client아래와 같이 새로운 세션으로 바로 받을 수 있습니다 .

 s3_client = boto3.client('s3', 
                      aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY, 
                      aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY, 
                      region_name=REGION_NAME
                      )

9
이것은 s3 클라이언트 를 얻기 위해 작동 하지만 OP는 대신 s3 리소스 를 원했습니다 .
Alasdair

@Alasdair에 동의합니다. 문서는 클라이언트와 함께하는 방법을 보여주지 않으며 귀하도 마찬가지 이므로이 답변이 어떻게 관련되어 있는지 알 수 없습니다.
Cerin 19:51에

나는이 시도하지만 error..I 이전에 내가 아는 한 ~ / .aws이를 테스트하기 위해 폴더를 제거했다 나 "자격 증명을 찾을 수 없습니다"제공이 creds의 기본 모양으로 BOTO 의지 ... 그
Prathamesh dhanawade

8

이것은 오래되었지만 여기에 참고 용으로도 배치합니다. boto3.resource는 기본 세션을 구현하고 있으며 boto3.resource 세션 세부 정보를 전달할 수 있습니다.

Help on function resource in module boto3:

resource(*args, **kwargs)
    Create a resource service client by name using the default session.

    See :py:meth:`boto3.session.Session.resource`.

https://github.com/boto/boto3/blob/86392b5ca26da57ce6a776365a52d3cab8487d60/boto3/session.py#L265

Boto3와 동일한 인수를 취하는 것을 알 수 있습니다.

import boto3
S3 = boto3.resource('s3', region_name='us-west-2', aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY, aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY)
S3.Object( bucket_name, key_name ).delete()

5

@JustAGuy의 답변을 확장하고 싶습니다. 내가 선호하는 방법 AWS CLI은 구성 파일을 만드는 데 사용 하는 것입니다. 그 이유는 설정 파일과 함께,이다 CLI또는이 SDK자동으로 자격 증명을 찾습니다 ~/.aws폴더에 있습니다. 그리고 좋은 점은 AWS CLI파이썬으로 작성되었습니다.

아직 가지고 있지 않은 경우 pypi에서 cli를 얻을 수 있습니다. 터미널에서 CLI를 설정하는 단계는 다음과 같습니다.

$> pip install awscli  #can add user flag 
$> aws configure
AWS Access Key ID [****************ABCD]:[enter your key here]
AWS Secret Access Key [****************xyz]:[enter your secret key here]
Default region name [us-west-2]:[enter your region here]
Default output format [None]:

그런 다음 boto키를 지정하지 않고도 모든 API에 액세스 할 수 있습니다 (다른 자격 증명을 사용하려는 경우 제외).


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.