boto3에서 거의 대부분의 기능은 AWS API를 사용하고, 자원에 대한 자격을 증명하기 위해 AWS IAM에서 얻어낼 수 있는 AWS access key ID
와 AWS secret access key
, 또는 임시 자격 증명을 위한 aws_session_token
을 사용한다. 일반적으로 awscli
등의 도구를 통해 ~/.aws/credentials
에 자격 증명 데이터를 설정하고, boto3는 여기에 접근해 자격 증명을 진행한다. 그러나 boto3를 사용하는 어플리케이션에서 여러 개의 자격 증명을 동시에 수행해야 하는 경우가 생길 수 있다. 데이터를 수집하여 원하는 곳으로 서빙해주는 B2B 서비스인 Segment의 Amazon S3 Integration 기능을 예로 들 수 있다.
다행히도, boto3는 자격 증명 데이터를 얻어낼 때까지 여기저기에 순서대로 접근한다.
client, resource 함수에서 자격 증명 데이터를 매개변수로 전달
client, resource, Session 등을 얻을 때 aws_access_key_id, aws_secret_access_key, aws_session_token이라는 문자열 타입의 선택 인자를 사용할 수 있다. 시스템 설정을 무시하고, 자격 증명 데이터를 직접 전달하고 싶을 때 대부분 이 방법을 사용한다.
환경 변수
client, resource, Session에 자격 증명 정보가 인자로 전달되지 않으면, 환경 변수를 확인한다.
AWS_ACCESS_KEY_ID
AWS 계정의 access key
AWS_SECRET_ACCESS_KEY
AWS 계정의 secret key
AWS_SESSION_TOKEN
AWS 계정의 세션 키
공유 자격 증명(Shared credentials) 파일
그 다음부턴 파일들에 접근하기 시작한다. 공유 자격 증명 파일의 기본 위치는 ~/.aws/credentials
이고, AWS_SHARED_CREDENTIALS_FILE
환경 변수를 설정하여 위치를 변경할 수 있다. credentials는 .ini
형식의 파일이고, 각 섹션마다 자격 증명을 위한 세 가지의 변수를 지정할 수 있다.
섹션 각각을 profile
이라고 부른다. session을 생성할 때 AWS_PROFILE
환경 변수를 설정하거나 profile_name
인자에 이름을 전달하여 어떤 profile을 사용할 지 명시할 수 있다. 여기서 session은 client나 resource를 생성할 수 있도록 자격 증명에 대한 '상태'를 저장하고 있는 객체다.
별도로 명시하지 않으면, [default]
profile을 사용한다. 보통은 이렇게 credentials를 사용하는 방식을 쓰는 것 같다.
AWS Config 파일
기본 위치는 ~/.aws/config
이고, AWS_CONFIG_FILE
환경 변수를 설정하여 위치를 변경할 수 있다. config 파일은 credentials 파일과 동일하게 작성된다. 유일한 차이점은, profile 섹션을 [profile [name]]
포맷으로 표현한다는 것이다.
AssumeRole을 호출시키기
AWS_CONFIG_FILE
환경 변수에 명시된 파일이나, 기본 경로인 ~/.aws/config
파일에서 role에 대한 정보를 명시하여, boto3가 자동으로 AWS STS에 AssumeRole을 호출하도록 할수도 있다. role_arn, source_profile, role_session_name 등의 파라미터가 필요하다.
boto2 config
그 후에는, boto2 config 파일에서 자격 증명을 로드한다. BOTO_CONFIG
환경 변수가 나타내는 경로의 파일을 먼저 검사하고, 그렇지 않으면 /etc/boto.cfg
와 ~/.boto
파일을 검사한다. [Credentials]
섹션만 사용한다.
IAM Role
Amazon EC2에서 실행 중이며 위의 방법들로 자격 증명을 찾지 못한 경우, boto3는 EC2 인스턴스의 메타 데이터 서비스에서 자격 증명을 로드한다. EC2 인스턴스를 시작할 때 사용할 IAM role만 지정하면, 별도의 명시적인 구성을 하지 않아도 boto3가 알아서 인스턴스의 자격 증명을 사용한다.
Best Practice
boto3는 자격 증명 정보를 얻기 위해, 결론적으로 아래의 순서를 따른다.
- client/resource/Session에 전달되는 자격 증명 정보
- 환경 변수
AWS_SHARED_CREDENTIALS_FILE
에 명시된 파일 또는 ~/.aws/credentials
에 접근
AWS_CONFIG_FILE
에 명시된 파일 또는 ~/.aws/config
에 접근
AWS_CONFIG_FILE
에 명시된 파일 또는 ~/.aws/config
에 접근하여 role 데이터(arn 등)로 AWS STS에 AssumeRole
BOTO_CONFIG
에 명시된 파일에 접근
/etc/boto.cfg
에 접근
~/.boto
에 접근
- EC2 인스턴스의 IAM role 설정에 접근
EC2 인스턴스에서 boto3를 사용하는 경우 IAM role
을 사용하는 것이 좋고, 그렇지 않은 경우라면 공유 자격 증명 파일(~/.aws/credentials
)을 쓰는 것이 좋다고 한다.