본문 바로가기
AWS

AWS Section 12. AWS CLI, SDK, IAM 역할 및 정책

by _비니_ 2024. 9. 27.

📌 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는 서비스 사용에 대한 제한을 설정하며, 두 가지 주요 유형의 제한이 존재한다:

  1. 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. 첫 번째 시도 후 1초 대기
    2. 두 번째 시도 후 2초 대기
    3. 세 번째 시도 후 4초 대기
    4. 네 번째 시도 후 8초 대기
    5. 다섯 번째 시도 후 16초 대기
    • 서버 부하를 줄여 많은 클라이언트가 응답을 받을 수 있도록 한다
정리

>> API 호출 빈도와 서비스 리소스 한도 모두 AWS에서 관리하며, 필요 시 한도 증가를 요청할 수 있음
>> 간헐적인 API 호출 오류는 지수 백오프 전략을 사용해 재시도해야 하며, 이는 AWS SDK에 포함된 기능
>> 서버 부하를 줄이는 지수 백오프는 5xx 오류에서만 적용되며, 4xx 오류에서는 적합하지 X

 

 

📌  AWS CLI 자격 증명 공급자 체인 (Credentials Provider Chain)

  • AWS CLI에서 자격증명을 찾는 순서를 의미한다.
  • AWS CLI는 명령어에 따라 자격 증명을 다음의 우선순위에 따라 조회한다:
  1. Command Line Options
    • -region, -output, -profile 등 명령어에 입력된 옵션들이 가장 우선시된다.
  2. 환경 변수
    • AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN 등의 환경 변수를 확인한다.
  3. CLI 자격 증명 파일
    • aws configure 명령어로 설정된 파일 경로(예: ~/.aws/credentials)에서 자격 증명을 확인한다.
  4. CLI 설정 파일
    • ~/.aws/config 파일에서 추가 구성을 확인한다.
  5. ECS 컨테이너 자격 증명
    • ECS 작업을 위한 컨테이너 자격 증명을 확인한다.
  6. 인스턴스 프로필 자격 증명
    • EC2 인스턴스 프로파일 자격 증명을 확인한다.

 

📌  SDK 자격 증명 공급자 체인

AWS SDK(Java 기준)에서도 자격 증명을 우선순위에 따라 조회하며, Java SDK는 다음과 같은 순서로 자격 증명을 찾는다:

  1. Java 시스템 속성
    • aws.accessKeyId 및 aws.secretKey 와 같은 시스템 속성을 우선시한다.
  2. 환경 변수
    • AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY 환경변수를 확인한다.
  3. 기본 자격 증명 프로파일 파일
    • CLI와 공유되는 자격 증명 파일(예: ~/.aws/credentials) 에서 자격 증명을 확인한다.
  4. Amazon ECS 컨테이너 자격 증명
    • ECS 컨테이너의 자격 증명을 확인한다.
  5. 인스턴스 프로필 자격 증명
    • 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