📌 EC2 Instance Metadata (IMDS)
- IMDS는 EC2 인스턴스가 스스로의 정보에 대해 알아볼 수 있게 해주는 기능
- IAM 역할 없이도 인스턴스 정보를 조회할 수 있음
- IMDS를 사용하는 URL : http://169.254.169.254/latest/meta-data
- 이 URL을 통해 인스턴스 이름, 공개 IP, 프라이빗 IP 등 여러 정보를 확인할 수 있음
- 메타데이터에서 EC2 인스턴스 정보 확인 가능(인스턴스 이름, 퍼블릭/프라이빗 IP 등)
- 유저 데이터: EC2 인스턴스 실행 시의 초기 스크립트
- IAM 역할 이름은 메타데이터로 확인할 수 있지만, IAM 정책은 조회할 수 없음
- 메타데이터는 인스턴스 자체 정보, 유저데이터는 EC2 인스턴스 실행 스크립트를 의미
- 메타데이터와 유저데이터 모두 이 URL로 확인 가능
🆚 IMDS 버전 비교
IMDS의 두 가지 버전
- IMDSv1
- 인스턴스 메타데이터 서비스의 첫 번째 버전으로, URL에 직접 접근하여 사용할 수 있다
- IMDSv2
- 더 강화된 보안 버전으로, 두 단계를 통해 메타데이터를 가져온다 (보안 강화를 위해 도입)
- 먼저 PUT 명령어로 세션 토큰을 얻고
- 이 토큰을 이용해 이후 메타데이터 서비스를 호출한다.
- 더 강화된 보안 버전으로, 두 단계를 통해 메타데이터를 가져온다 (보안 강화를 위해 도입)
IMDSv2는 Amazon Linux 2023부터 기본으로 활성화되어 있으며, 세션 토큰을 요청한 후 메타데이터 서비스 호출 시 해당 토큰을 헤더로 명시해야한다.
📌 AWS CLI 계정 관리
- AWS CLI는 기본적으로 하나의 계정을 관리하지만, profile 명령어를 통해 여러 계정을 설정하고 관리할 수 있다.
- 예를 들어 aws configure --profile myprofile 명령어를 사용해 특정 프로필에 대한 설정을 저장할 수 있으며, 이는 .aws/credentials 파일에 저장된다.
MFA (다중 인증) 사용하기
- CLI에서 다중 인증(MFA)을 사용하려면 임시 세션을 생성해야 하며, 이를 위해 STS의 GetSessionToken API를 호출한다.
- 이 API는 최대 36시간 유효한 임시 자격 증명을 발급하며, MFA가 활성화된 경우에는 MFA 인증 토큰을 제공해야 한다.
- 세션 토큰은 AWS API 호출 시 함께 제공된다.
AWS SDK
- AWS SDK는 애플리케이션 코드에서 AWS 서비스를 호출하는 도구로, Java, Python, C++, Ruby, Go 등 다양한 언어를 지원한다.
- 주로 DynamoDB나 S3 같은 AWS 서비스를 호출할 때 사용되며, 리전 설정이 없을 경우 기본 리전은 us-east-1로 지정된다.
중요 사항
-
- AWS CLI도 실제로는 Python SDK (boto3)를 사용
- 시험에서는 언제 SDK를 사용해야 하는지를 알아야 함🌟
- AWS Lambda 함수와 같은 곳에서 SDK 사용을 연습하게 됨
- 기본 리전을 지정하지 않으면, us-east-1 리전이 기본으로 설정됨
AWS Limits (Quotas)
AWS는 서비스 사용에 대한 제한을 설정하며, 두 가지 주요 유형의 제한이 존재한다:
- API Rate Limits
- DescribeInstances API (EC2): 초당 100회 호출 제한
- GetObject API (S3): 접두부 당 초당 5,500회 GET 요청 가능
- 이러한 제한으로 인해 간헐적인 오류가 발생할 수 있으며, 필요 시 제한 증가를 요청할 수 있다
- 간헐적 오류의 경우: 지수 백오프(Exponential Backoff) 전략 사용
- 지속적 오류의 경우: API 스로틀링(Throttling) 한도 증가 요청 가능
.2. Service Quotas (Service Limits)
- 온디맨드 표준 인스턴스는 1,152 vCPU까지 실행 가능
- 서비스 한도 증가는 티켓 오픈을 통해 요청 가능
- Service Quotas API를 사용하여 한도 증가 요청 가능
리소스 실행 수의 제한으로, 예를 들어 온디맨드 인스턴스의 경우 최대 1,152개의 가상 CPU를 사용할 수 있다. 추가 CPU가 필요한 경우 티켓을 열어 한도 증가를 요청하거나 Service Quotas API를 사용할 수 있다.
Exponential Backoff
- API 호출량이 많아져 ThrottlingException 오류가 발생할 경우, 재시도 간격을 점차 늘리며 요청을 재시도하는 지수 백오프를 사용해야 한다.
- 이는 서버 부하를 줄이고 가능한 많은 요청에 응답할 수 있도록 한다.
- AWS SDK에서는 기본적으로 지수 백오프 메커니즘이 포함되어 있지만, 직접 AWS API를 호출할 때는 이를 수동으로 구현해야 한다.
- 5xx 서버 오류 및 스로틀링 시 재시도
- 4xx 클라이언트 오류에서는 재시도하지 말 것
- Exponential Backoff 원리
- 첫 번째 시도 후 1초 대기
- 두 번째 시도 후 2초 대기
- 세 번째 시도 후 4초 대기
- 네 번째 시도 후 8초 대기
- 다섯 번째 시도 후 16초 대기
- 서버 부하를 줄여 많은 클라이언트가 응답을 받을 수 있도록 한다
정리
>> API 호출 빈도와 서비스 리소스 한도 모두 AWS에서 관리하며, 필요 시 한도 증가를 요청할 수 있음
>> 간헐적인 API 호출 오류는 지수 백오프 전략을 사용해 재시도해야 하며, 이는 AWS SDK에 포함된 기능
>> 서버 부하를 줄이는 지수 백오프는 5xx 오류에서만 적용되며, 4xx 오류에서는 적합하지 X
📌 AWS CLI 자격 증명 공급자 체인 (Credentials Provider Chain)
- AWS CLI에서 자격증명을 찾는 순서를 의미한다.
- AWS CLI는 명령어에 따라 자격 증명을 다음의 우선순위에 따라 조회한다:
- Command Line Options
- -region, -output, -profile 등 명령어에 입력된 옵션들이 가장 우선시된다.
- 환경 변수
- AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN 등의 환경 변수를 확인한다.
- CLI 자격 증명 파일
- aws configure 명령어로 설정된 파일 경로(예: ~/.aws/credentials)에서 자격 증명을 확인한다.
- CLI 설정 파일
- ~/.aws/config 파일에서 추가 구성을 확인한다.
- ECS 컨테이너 자격 증명
- ECS 작업을 위한 컨테이너 자격 증명을 확인한다.
- 인스턴스 프로필 자격 증명
- EC2 인스턴스 프로파일 자격 증명을 확인한다.
📌 SDK 자격 증명 공급자 체인
AWS SDK(Java 기준)에서도 자격 증명을 우선순위에 따라 조회하며, Java SDK는 다음과 같은 순서로 자격 증명을 찾는다:
- Java 시스템 속성
- aws.accessKeyId 및 aws.secretKey 와 같은 시스템 속성을 우선시한다.
- 환경 변수
- AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY 환경변수를 확인한다.
- 기본 자격 증명 프로파일 파일
- CLI와 공유되는 자격 증명 파일(예: ~/.aws/credentials) 에서 자격 증명을 확인한다.
- Amazon ECS 컨테이너 자격 증명
- ECS 컨테이너의 자격 증명을 확인한다.
- 인스턴스 프로필 자격 증명
- EC2 인스턴스에서 사용되는 자격 증명을 확인한다.
환경 변수 설정이 높은 우선순위를 가지므로, 설정된 경우 이를 사용하여 모든 S3 버킷에 접근할 수 있게 된다.
이를 방지하려면, 인스턴스 프로필보다 우선하는 자격 증명을 제거해야 한다.
📌 자격 증명 모범 사례
- 절대 자격 증명을 코드에 저장하지 말 것
- 자격 증명은 항상 자격 증명 체인을 통해 상속되어야 한다.
- AWS 내부 작업 시
- EC2 인스턴스에는 IAM 역할을 사용.
- ECS 작업에는 ECS 역할을 사용.
- Lambda 함수에는 Lambda 역할을 사용.
- AWS 외부 작업 시: 환경 변수를 사용하거나 명명된 프로파일을 사용하는 것이 좋다.
📌 AWS API 요청 서명(Signing AWS API Requests)
- AWS API 요청 시 서명(Signature)을 추가하여 AWS가 호출자의 신원을 확인하고 요청 권한을 검증할 수 있도록 한다.
- Amazon S3로 보내는 일부 요청은 서명이 필요 없지만 대부분의 API 호출은 HTTP 요청에 서명이 필요하다.
- AWS SDK나 CLI를 사용할 경우 서명이 자동으로 생성되므로, 사용자가 직접 생성할 필요는 없다.
- 서명은 액세스 키와 시크릿 키를 사용하여 생성하며, Signature V4 방식을 사용한다.
- 서명 전달 방법
- HTTP Authorization 헤더를 사용하는 방법.
- 쿼리 스트링을 통해 서명을 URL에 포함시키는 방법.
반응형
'AWS' 카테고리의 다른 글
AWS Section 14. Amazon S3 보안 (0) | 2024.09.27 |
---|---|
AWS Section 13. Amazon S3 고급 (0) | 2024.09.27 |
AWS Section 11. Amazon S3 (0) | 2024.09.27 |
AWS Section 10. VPC 기초 (0) | 2024.09.27 |
AWS Section 9. Route 53 (0) | 2024.09.27 |