AWS SDK, AWS CLI와 같은 개발자 도구를 사용해 AWS 서비스와 API로 상호 작용할 때는 자격 증명 정보(credential)와 구성 정보 (configuration)을 같이 제공해야 한다.
- 자격 증명 정보: 신원 확인 및 연결된 권한을 확인하기 위한 정보
- 구성 정보: 요청을 보낼 위치(리전), 응답 값 형식(Format) 등 기타 세부 구성 설정 정보
이 때 자격 증명 정보 및 구성 정보는 여러 위치에 설정될 수 있는데 Boto3가 설정 위치를 검색하는 매커니즘은 가능한 정보가 설정된 위치를 찾으면 검색을 중지하는 형태로 동작한다.
1. 자격 증명 검색 순서
Boto3가 자격증명을 검색하는 위치들과 그 순서는 다음과 같다. (자세한 내용은 링크 참고)
- boto3.client() 메서드에 직접 전달되는 매개변수
- Session 객체 생성에 전달되는 매개변수
- 환경 변수
- Assume Role Provider
- Assume Role with Web Idp
- AWS Identity Center Credential Provider
- 공유 자격 증명 (~/.aws/credential)
- 구성 파일 (~/.aws/config)
- Boto2 구성 파일 (/etc/boto.cfg)
- 컨테이너 자격 증명 공급자
- IAM Role
1.1 자격 증명 설정 권장 사항
위에서 설명한 11가지의 자격 증명 정보 설정 위치를 순차적으로 검색하게 되는데, 가능하면 1~3번 선택지는 사용하지 않는 것이 좋다. 특히 1, 2번 선택지는 Source Code에 하드코딩 형태 이기 때문에 Github와 같은 저장소에 올라갈 때 보안상 좋지 않다. 다음은 AWS에서 권장하고 있는 설정 방법이다.
- AWS EC2를 사용하는 경우 IAM Role을 지정하는 것을 권장한다.
- 그 외의 환경에서는 공유 자격 증명 파일 (~/.aws/credential)을 사용하는 것을 권장한다.
2. 구성 정보 검색 순서
Boto3가 구성 정보를 검색하는 위치들과 그 순서는 다음과 같다. (자세한 내용은 링크 참고)
- boto3.client() 메서드에 직접 전달되는 매개변수
- 환경 변수
- 구성 파일 (~/.aws/config)
3. 자격 증명 검색 순서를 활용하는 케이스
3.1 다른 계정의 서비스로 접근 해야 할 경우
다중 계정 환경 혹은 타 계정의 AWS 서비스에 접근할 경우 Assume Role Provider를 사용할 수 있다.
예를 들어, 로컬 개발 환경에서 작업하면서 Production, Staging, Development 등 다른 계정을 접근해야 하는 케이스에 좋은 선택지 일 수 있다. 각 계정마다 AWS Access Key & Secret Key를 발급해서 Multi Profile 방식으로 등록해서 사용하는 것도 가능한 방식이다. 하지만, 키 관리 차원에서 복잡성이 증가하기 때문에 하나의 계정에서 발급된 IAM User를 다른 계정에서 신뢰 관계 정책을 지정해서 Assume Role 이 가능하도록 구성하는 것이 더 나은 선택지가 된다.
- 자격 증명 정보 파일 설정
# ~/.aws/credentials:
[development]
aws_access_key_id=ACCESS_KEY
aws_secret_key_id=SECRET_KEY
- 구성 정보 설정 파일
# ~/.aws/config
[profile crossaccount]
role_arn=arn:aws:iam:...
source_profile=development
- boto3 매개변수에 프로필 지정
import boto3
s3_client = boto3.client('s3', profile_name='crossaccount')
3.2 리소스 별로 서로 다른 리전의 서비스에 접속해야 할 때
환경변수는 전역으로 설정되어 모든 실행 환경에 적용되기 때문에 서로 다른 리전에 접속하려고 할 때는 사용할 수 없고, boto3.client 매개변수를 활용하거나 Multi Profile 방식을 사용할 수 있다. 프로그램이 돌아가면서 동적으로 리전을 선택해야 하는 경우 boto3.client() 메서드로 서비스를 활성화 할 때 매개변수로 전달하는 것이 더 나은 선택지가 될 수 있다.
서울 리전의 서비스를 대부분 사용하면서 일부 서비스만 타 리전 서비스를 사용하는 경웨 구설 설정 파일(~/.aws/config)에 default 리전을 서울로 설정하고 boto3.client() 메서드의 매개변수에 타 리전 정보를 설정해서 사용하는 방식으로 사용한다.
- 구성 정보 파일
# ~/.aws/config
[default]
region = ap-northeast-2
output = json
- boto3 매개변수 설정
import os
import boto3
bedrock_client = boto3.client(
service_name='bedrock-runtime',
region_name=os.environ.get("AWS_DEFAULT_REGION", "us-west-2"),
endpoint_url=os.environ.get("BEDROCK_ENDPOINT_URL", "https://bedrock-runtime.us-west-2.amazonaws.com")
)
'Cloud > AWS' 카테고리의 다른 글
[AWS] SSM Parameter Store 이용 SQLite3 DB 초기 데이터 구성 (0) | 2025.02.12 |
---|---|
[AWS] Source IP 기반 AWS Console 접근 제어 (0) | 2025.01.31 |
[AWS] CodeDeploy ApplicationStop Hook Section Error (1) | 2024.12.24 |
[AWS] NAT INSTANCE setting (iptables) (1) | 2024.11.26 |
[AWS] EC2 ID/PW 로그인 접속 설정 (0) | 2024.11.24 |