AWS 리소스에서 임시 자격 증명 사용 - AWS Identity and Access Management

AWS 리소스에서 임시 자격 증명 사용

임시 보안 자격 증명을 사용해 AWS CLI 또는 AWS API에서 AWS 리소스를 프로그래밍 방식으로 요청할 수 있습니다(AWS SDK 사용). 임시 보안 자격 증명은 IAM 사용자 자격 증명과 같은 장기 보안 자격 증명을 사용하는 것과 동일한 권한을 제공합니다. 그러나 몇 가지 차이점이 있습니다.

  • 임시 보안 자격 증명을 사용해 호출할 경우 그 호출에 반드시 세션 토큰이 포함되어야 하는데, 이 세션 토큰은 임시 자격 증명과 함께 반환됩니다. AWS는 세션 토큰을 사용해 임시 보안 자격 증명의 유효성을 검증합니다.

  • 임시 자격 증명은 지정된 간격 후에 만료됩니다. 임시 자격 증명이 만료된 후에는 그 자격 증명을 사용한 어떤 요청도 실패할 것이므로 일련의 새로운 임시 자격 증명을 생성해야 합니다. 임시 자격 증명을 원래 지정된 간격 이상으로 확장하거나 새로 고칠 수 없습니다.

  • 임시 자격 증명을 사용하여 요청하면 보안 주체에 태그 세트가 포함될 수 있습니다. 이러한 태그는 세션 태그와 사용자가 맡은 역할에 연결된 태그에서 가져옵니다. 세션 태그에 대한 자세한 내용은 AWS STS에서 세션 태그 전달 섹션을 참조하세요.

AWS SDK, AWS Command Line Interface (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 STS에서 AWS 리전 관리 단원을 참조하십시오.

Amazon EC2 인스턴스에서 임시 자격 증명 사용

EC2 인스턴스 내에서 AWS CLI 명령 또는 코드를 실행하고자 하는 경우 자격 증명을 얻는 바람직한 방법은 Amazon EC2에 대한 역할을 사용하는 것입니다. EC2 인스턴스 상에서 실행되는 애플리케이션에 부여하고 싶은 권한을 지정하는 IAM 역할을 생성합니다. 인스턴스를 시작할 때 그 역할을 인스턴스에 연결합니다.

인스턴스 상에서 실행되는 애플리케이션, AWS CLI 및 Tools for Windows PowerShell 명령은 인스턴스 메타데이터로부터 자동 임시 보안 자격 증명을 얻을 수 있습니다. 임시 보안 자격 증명을 명시적으로 가져올 필요는 없습니다. AWS SDK, AWS CLI 및 Tools for Windows PowerShell은 EC2 인스턴스 메타데이터 서비스(IMDS)에서 보안 인증 정보를 자동으로 가져와서 사용합니다. 임시 자격 증명은 그 인스턴스에 연결된 역할에 대해 정의한 권한이 있습니다.

자세한 내용 및 예시는 다음을 참조하세요.

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) 사용)는 IAM 역할로 전환(AWS API) 섹션을 참조하세요. 이 예제에서는 AssumeRole을 호출하여 임시 보안 자격 증명을 가져온 다음 해당 자격 증명을 사용하여 Amazon S3를 호출하는 방법을 보여줍니다.

AssumeRole, GetFederationToken 및 기타 API 작업을 호출하는 방법에 대한 자세한 내용은 AWS Security Token Service API 참조를 참조하세요. 이러한 호출의 결과에서 임시 보안 자격 증명 및 세션 토큰을 얻는 방법에 대한 자세한 내용은 사용하고 있는 SDK의 설명서를 참조하세요. 기본 AWS 설명서 페이지SDK 및 도구 키트 섹션에서 모든 AWS SDK에 대한 설명서를 확인할 수 있습니다.

이전 자격 증명이 만료되기 전에 반드시 새로운 일련의 자격 증명을 얻도록 해야 합니다. 일부 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 명령에 포함되어 있지 않기 때문에 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 Security Token Service(AWS STS)에서 가져오는 임시 보안 자격 증명으로 그러한 요청에 서명할 수 있습니다. 이렇게 하려면 AWS STS에서 받은 보안 액세스 키와 액세스 키 ID를 사용합니다. 장기 자격 증명을 사용하는 것과 동일한 방식으로 액세스 키 ID 및 보안 액세스 키를 사용하여 요청에 서명합니다. 또한 AWS STS로부터 받는 세션 토큰을 API 요청에 추가합니다. 그 세션 토큰을 HTTP 헤더 또는 X-Amz-Security-Token이라는 쿼리 문자열 파라미터에 추가합니다. 그 세션 토큰을 HTTP 헤더 또는 쿼리 문자열 파라미터에 추가하되, 하나에만 추가해야 합니다. HTTPS API 요청 서명에 대한 자세한 내용은 AWS 일반 참조의 AWS API 요청에 서명을 참조하세요.

추가 정보

다른 AWS 서비스와 함께 AWS STS를 사용하는 방법에 대한 자세한 내용은 다음 링크를 참조하세요.