python에서 boto3를 사용하여 AWS 서비스에 접근하려면 자격증명(credential)을 얻어야한다. boto3에서 자격증명을 확인하는 방법은 여러가지가 있는데 순서는 아래와같다. 문서

  1. boto3.client, resource, session 함수에 자격증명을 매개 변수로 직접 전달
  2. 환경 변수(Environment variables)
  3. 공유 자격증명 파일 [ ~/.aws/credentials ]
  4. AWS 구성 파일 [ ~/.aws/config ]
  5. AssumeRole(임시 자격증명) 호출 [ ~/.aws/config ]
  6. Boto2 구성 파일 [ /etc/boto.cfg 또는 ~/.boto ]
  7. IAM 역할이 구성된 Amazon EC2 인스턴스의 인스턴스 메타 데이터 서비스

간단하게 테스트를 돌려볼 때는 1번의 방법으로 많이 사용하겠지만, 코드를 Git으로 관리할 경우 3,4번을 추천한다. Git에 AWS Credential이 올라가면 서버 정보가 그대로 노출되니 주의가 필요하다.(참고로 올리면 봇이 알림을 보내준다)

나의 경우 4번의 방법을 통해 사용하고있다.

AWS 구성 파일을 통해 자격증명하기

  • config 파일의 기본 위치는 ~/.aws/config
  • AWS_CONFIG_FILE 환경 변수를 설정하여 config 파일의 위치를 변경 할 수 있다
  • INI 형식 파일
  1. boto3.client, resource, session 권한을 얻을 때 botocore.config로 별도로 생성한 Config값을 직접 넘겨주면 이 값을 사용하고,
  2. AWS_PROFILE, AWS_RETRY_MODE 와 같은 환경변수 값이 있는지 확인하며,
  3. 마지막으로 ~/.aws/config 파일의 값을 확인하는 방식으로

Config 값을 읽어온다. 파일에는 아래와 같이 적어주면 된다.

aws_access_key_id = YOUR_ACCESS_KEY1
aws_secret_access_key = YOUR_SECRET_KEY1

References