AWS 리소스와 함께 임시 자격 증명 사용
AWS 리소스와 함께 임시 자격 증명 사용 (Use temporary credentials with AWS resources)
임시 보안 자격 증명으로 AWS CLI 또는 AWS API(AWS SDK 사용)를 통해 AWS 리소스에 프로그래밍 방식 요청을 보낼 수 있어요. 임시 자격 증명은 IAM 사용자 자격 증명 같은 장기 보안 자격 증명과 동일한 권한을 제공해요. 하지만 몇 가지 차이가 있어요.
출처: 문서
본문
- 임시 보안 자격 증명으로 호출할 때, 그 임시 자격 증명과 함께 반환된 세션 토큰을 호출에 포함해야 해요. AWS는 세션 토큰으로 임시 보안 자격 증명을 검증해요.
- 임시 자격 증명은 지정된 간격 후에 만료돼요. 만료되면 그 자격 증명으로 하는 호출은 실패하므로 새 임시 자격 증명을 생성해야 해요. 임시 자격 증명은 원래 지정된 간격을 넘어 연장하거나 새로 고칠 수 없어요.
- 임시 자격 증명으로 요청을 보내면 프린시펄에 태그 집합이 포함될 수 있어요. 이 태그는 세션 태그와 수임한 역할에 붙은 태그에서 와요. 세션 태그에 대한 자세한 내용은 AWS STS에서 세션 태그 전달을 참고하세요.
AWS SDK, AWS CLI, 또는 Tools for Windows PowerShell을 사용한다면 임시 보안 자격 증명을 얻고 사용하는 방식이 컨텍스트에 따라 달라져요. EC2 인스턴스 안에서 코드, AWS CLI, 또는 Tools for Windows PowerShell 명령을 실행한다면 Amazon EC2용 역할을 활용할 수 있어요. 그렇지 않으면 AWS STS API를 호출해 임시 자격 증명을 얻고, 그 자격 증명을 명시적으로 사용해 AWS 서비스에 호출할 수 있어요.
참고
AWS Security Token Service(AWS STS)를 사용하면 신뢰할 수 있는 사용자에게, AWS 리소스에 대한 접근을 제어하는 임시 보안 자격 증명을 만들고 제공할 수 있어요. AWS STS에 대한 자세한 내용은 IAM의 임시 보안 자격 증명을 참고하세요. AWS STS는 기본 엔드포인트가 https://sts.amazonaws.com인 전역 서비스예요. 이 엔드포인트는 미국 동부(버지니아 북부) 리전에 있지만, 이 엔드포인트와 다른 엔드포인트에서 얻은 자격 증명은 전역에서 유효해요. 이 자격 증명은 어떤 리전의 서비스·리소스와도 동작해요. 또한 지원되는 어느 리전의 엔드포인트로든 AWS STS API 호출을 보내도록 선택할 수 있어요. 지리적으로 가까운 서버에서 요청을 보내면 지연 시간을 줄일 수 있어요. 자격 증명이 어느 리전에서 왔든 전역에서 동작해요. 자세한 내용은 AWS 리전에서 AWS STS 관리를 참고하세요.
목차
- Amazon EC2 인스턴스에서 임시 자격 증명 사용
- AWS SDK와 함께 임시 보안 자격 증명 사용
- AWS CLI와 함께 임시 보안 자격 증명 사용
- API 작업과 함께 임시 보안 자격 증명 사용
- 추가 정보
Amazon EC2 인스턴스에서 임시 자격 증명 사용
EC2 인스턴스 안에서 AWS CLI 명령이나 코드를 실행하려면 자격 증명을 얻는 권장 방법은 Amazon EC2용 역할을 사용하는 거예요. EC2 인스턴스에서 실행되는 애플리케이션에 부여하려는 권한을 지정하는 IAM 역할을 만들고, 인스턴스를 시작할 때 그 역할을 인스턴스와 연결해요.
인스턴스에서 실행되는 애플리케이션, AWS CLI, Tools for Windows PowerShell 명령은 인스턴스 메타데이터에서 자동으로 임시 보안 자격 증명을 얻을 수 있어요. 임시 보안 자격 증명을 명시적으로 얻을 필요가 없어요. AWS SDK, AWS CLI, Tools for Windows PowerShell은 EC2 Instance Metadata Service(IMDS)에서 자동으로 자격 증명을 얻어 사용해요. 임시 자격 증명은 인스턴스와 연결된 역할에 대해 정의한 권한을 가져요.
자세한 내용과 예시는 다음을 참고하세요.
- Amazon Elastic Compute Cloud에서 AWS 리소스에 접근 권한을 부여하는 IAM 역할 사용 — AWS SDK for Java
- IAM 역할을 사용해 접근 권한 부여 — AWS SDK for .NET
- 역할 만들기 — AWS SDK for Ruby
AWS SDK와 함께 임시 보안 자격 증명 사용
코드에서 임시 보안 자격 증명을 사용하려면 AssumeRole 같은 AWS STS API를 프로그래밍 방식으로 호출하고, 결과 자격 증명과 세션 토큰을 추출해요. 그런 다음 그 값을 후속 AWS 호출의 자격 증명으로 사용해요. 다음 예시는 AWS SDK를 사용할 때 임시 보안 자격 증명을 사용하는 방법의 의사 코드예요.
assumeRoleResult = AssumeRole(role-arn);
tempCredentials = new SessionAWSCredentials(
assumeRoleResult.AccessKeyId,
assumeRoleResult.SecretAccessKey,
assumeRoleResult.SessionToken);
s3Request = CreateAmazonS3Client(tempCredentials);
Python으로 작성된 예시(AWS SDK for Python(Boto) 사용)는 역할로 전환 (AWS API)을 참고하세요. 이 예시는 AssumeRole을 호출해 임시 보안 자격 증명을 얻고, 그 자격 증명으로 Amazon S3에 호출하는 방법을 보여줘요.
AssumeRole, GetFederationToken 및 다른 API 작업 호출 방법에 대한 자세한 내용은 AWS Security Token Service API Reference를 참고하세요. 결과에서 임시 보안 자격 증명과 세션 토큰을 얻는 방법은 사용 중인 SDK의 문서를 참고하세요. 모든 AWS SDK의 문서는 AWS 문서 메인 페이지의 SDKs and Toolkits 섹션에서 찾을 수 있어요.
기존 자격 증명이 만료되기 전에 새 자격 증명 집합을 얻어야 합니다. 일부 SDK에서는 자격 증명을 새로 고치는 과정을 관리하는 프로바이더를 사용할 수 있어요. 사용 중인 SDK의 문서를 확인해 보세요.
AWS CLI와 함께 임시 보안 자격 증명 사용
임시 보안 자격 증명을 AWS CLI와 함께 사용할 수 있어요. 이는 정책을 테스트할 때 유용해요.
AWS CLI로 AssumeRole이나 GetFederationToken 같은 AWS STS API를 호출하고 결과 출력을 캡처할 수 있어요. 다음 예시는 출력을 파일로 보내는 AssumeRole 호출이에요. 예시에서 profile 파라미터는 AWS CLI 구성 파일의 프로필이라고 가정해요. 또한 역할을 수임할 권한이 있는 IAM 사용자의 자격 증명을 참조한다고 가정해요.
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/role-name --role-session-name "RoleSession1" --profile IAM-user-name > assume-role-output.txt
명령이 끝나면 접근 키 ID, 비밀 접근 키, 세션 토큰을 라우팅한 곳에서 추출할 수 있어요. 수동으로 하거나 스크립트를 사용할 수 있어요. 그런 다음 이 값을 환경 변수에 할당할 수 있어요.
AWS CLI 명령을 실행하면 AWS CLI는 특정 순서로 자격 증명을 찾아요 — 먼저 환경 변수, 그다음 구성 파일. 따라서 임시 자격 증명을 환경 변수에 넣은 뒤에는 AWS CLI가 기본적으로 그 자격 증명을 사용해요. (명령에 profile 파라미터를 지정하면 AWS CLI는 환경 변수를 건너뛰고 구성 파일을 찾아봐요. 이렇게 하면 필요시 환경 변수의 자격 증명을 재정의할 수 있어요.)
다음 예시는 임시 보안 자격 증명의 환경 변수를 설정한 뒤 AWS CLI 명령을 호출하는 방법을 보여줘요. AWS CLI 명령에 profile 파라미터가 없어서 AWS CLI는 먼저 환경 변수에서 자격 증명을 찾고, 따라서 임시 자격 증명을 사용해요.
Linux:
$ export AWS_ACCESS_KEY_ID=ASIAIOSFODNN7EXAMPLE
$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
$ export AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of session token>
$ aws ec2 describe-instances --region us-west-1
Windows:
C:\> SET AWS_ACCESS_KEY_ID=ASIAIOSFODNN7EXAMPLE
C:\> SET AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
C:\> SET AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of token>
C:\> aws ec2 describe-instances --region us-west-1
API 작업과 함께 임시 보안 자격 증명 사용
AWS에 직접 HTTPS API 요청을 보낸다면, AWS STS에서 받은 임시 보안 자격 증명으로 그 요청을 서명할 수 있어요. AWS STS에서 받은 접근 키 ID와 비밀 접근 키를 사용해요. 접근 키 ID와 비밀 접근 키는 장기 자격 증명으로 요청을 서명하는 것과 같은 방식으로 사용해요. 또한 AWS STS에서 받은 세션 토큰을 API 요청에 추가해요. 세션 토큰은 X-Amz-Security-Token이라는 이름의 HTTP 헤더 또는 쿼리 문자열 파라미터에 추가해요. HTTP 헤더 또는 쿼리 문자열 파라미터 중 하나에만 추가하고 둘 다에는 추가하지 마세요. HTTPS API 요청 서명에 대한 자세한 내용은 AWS General Reference의 AWS API 요청 서명을 참고하세요.
추가 정보
AWS STS를 다른 AWS 서비스와 함께 사용하는 방법은 다음 링크를 참고하세요.
- Amazon S3 — Amazon Simple Storage Service 사용자 가이드의 IAM 사용자 임시 자격 증명으로 요청하기 또는 페더레이션 사용자 임시 자격 증명으로 요청하기를 참고하세요.
- Amazon SNS — Amazon Simple Notification Service 개발자 가이드의 Amazon SNS와 함께 아이덴티티 기반 정책 사용을 참고하세요.
- Amazon SQS — Amazon Simple Queue Service 개발자 가이드의 Amazon SQS의 아이덴티티 및 접근 관리(IAM)를 참고하세요.
- Amazon SimpleDB — Amazon SimpleDB 개발자 가이드의 임시 보안 자격 증명 사용을 참고하세요.
더 알아보기 (Learn more)
- 임시 보안 자격 증명 요청 — 자격 증명을 요청하는 API 작업을 확인해 보세요.
- 임시 보안 자격 증명 — 임시 자격 증명의 개념을 참고하세요.
- 역할로 전환 (AWS API) — API 방식으로 역할을 수임하는 예시를 살펴보세요.