임시 보안 자격 증명 요청 - AWS Identity and Access Management

임시 보안 자격 증명 요청

임시 보안 자격 증명을 요청하려면 AWS API에서 AWS Security Token Service(AWS STS) 작업을 사용할 수 있습니다. 이러한 작업에는 AWS 리소스에 대한 액세스를 제어할 수 있는 임시 보안 자격 증명을 생성하여 신뢰할 수 있는 사용자에게 제공할 수 있습니다. 에 대한 자세한 내용은 AWS STS 섹션을 참조하세요.IAM의 임시 보안 자격 증명. 역할을 수임해 임시 보안 자격 증명을 요청하는 데 사용할 수 있는 여러 방법을 알아보려면 IAM 역할 사용 섹션을 참조하세요.

API 작업을 호출하려면 AWS SDK 중 하나를 사용할 수 있습니다. SDK는 Java, .NET, Python, Ruby, Android 및 iOS 등 다양한 프로그래밍 언어 및 환경에서 사용할 수 있습니다. SDK는 요청에 암호화 방식으로 서명, 필요한 경우 요청 재시도, 오류 응답 처리와 같은 작업들을 다룹니다. AWS Security Token Service API 참조에 설명된 AWS STS 쿼리 API를 사용할 수도 있습니다. 마지막으로, AWS Command Line InterfaceAWS Tools for Windows PowerShell의 두 가지 명령 줄 도구에서 AWS STS 명령을 지원합니다.

AWS STS API 작업은 액세스 키 페어 및 세션 토큰을 포함하는 임시 보안 자격 증명을 사용하여 새 세션을 생성합니다. 액세스 키 페어는 액세스 키 ID와 보안 키로 구성되어 있습니다. 사용자(또는 사용자가 실행하는 애플리케이션)는 이 자격 증명을 사용해 리소스에 액세스할 수 있습니다. AWS STS API 작업을 사용하여 프로그래밍 방식으로 역할 세션을 생성하고 세션 정책 및 세션 태그를 전달할 수 있습니다. 결과적으로 얻는 세션의 권한은 사용자 또는 역할의 자격 증명 기반 정책의 교집합과 세션 정책입니다. 세션 정책에 대한 자세한 정보는 세션 정책 섹션을 참조하세요. 세션 태그에 대한 자세한 내용은 AWS STS에서 세션 태그 전달 섹션을 참조하세요.

참고

AWS STS API 작업이 반환하는 세션 토큰의 크기는 고정적이지 않습니다. 따라서 최대 크기를 가정하지 않는 것이 좋습니다. 일반적인 토큰 크기는 4096바이트 미만이나 경우에 따라 다를 수 있습니다.

AWS 리전에서 AWS STS 사용하기

전역 엔드포인트 또는 리전 엔드포인트 중 하나에 AWS STS API 호출을 전송할 수 있습니다. 더 가까이 있는 엔드포인트를 선택하면 지연 시간을 단축해 API 호출의 성능을 향상시킬 수 있습니다. 또한 원래 엔드포인트와 더 이상 통신하지 할 수 없는 경우 대체 리전 엔드포인트에 호출을 직접 보내는 방법을 선택할 수 있습니다. 다양한 AWS SDK 중 하나를 사용하고 있다면 API 호출 전에 해당 SDK 방법을 사용해 리전을 지정합니다. HTTP API 요청을 수동으로 구축하는 경우 그 요청을 정확한 엔드포인트에 직접 전송해야 합니다. 자세한 내용은 리전 및 엔드포인트의 AWS STS 섹션AWS STS에서 AWS 리전 관리 섹션을 참조하세요.

다음은 AWS 환경 및 애플리케이션에서 사용할 임시 자격 증명을 획득하는 데 사용할 수 있는 API 작업입니다.

AssumeRole - 사용자 지정 아이덴티티 브로커를 통한 크로스 계정 위임과 페더레이션

AssumeRole API 작업은 기존 IAM 사용자가 아직 액세스 권한이 없는 AWS 리소스에 액세스할 수 있도록 허용하는 데 유용합니다. 예를 들어 사용자가 다른 AWS 계정의 리소스에 액세스해야 할 수 있습니다. 또한 멀티 팩터 인증(MFA)을 제공하는 것과 같이 일시적으로 액세스 권한을 얻는 수단으로도 유용합니다. 활성 자격 증명을 사용해 이 API를 호출해야 합니다. 이 작업을 호출할 수 있는 사용자를 알아보려면 AWS STS API 작업 비교을(를) 참조하세요. 자세한 내용은 역할을 생성하여 IAM 사용자에게 권한 위임MFA 보호 API 액세스 구성을(를) 참조하세요.

이 호출에는 반드시 유효한 AWS 보안 자격 증명을 사용해야 합니다. 이 호출을 할 때 다음과 같은 정보를 전달하게 됩니다.

  • 앱이 수임해야 하는 역할의 Amazon 리소스 이름(ARN)

  • (선택 사항) 기간. 임시 보안 자격 증명의 기간을 지정합니다. DurationSeconds 파라미터를 사용하여 역할 세션 기간을 900초(15분)에서 해당 역할에 대한 최대 세션 기간 설정까지 지정합니다. 역할에 대한 최댓값을 확인하는 방법을 알아보려면 역할에 대한 최대 세션 기간 설정 보기 섹션을 참조하세요. 이 파라미터를 전달하지 않으면 임시 자격 증명이 한 시간 내에 만료됩니다. 이 API의 DurationSeconds 파라미터는 콘솔 세션의 기간을 지정하는 데 사용하는 SessionDuration HTTP 파라미터와 다릅니다. 콘솔 로그인 토큰의 연동 엔드포인트에 대한 요청에는 SessionDuration HTTP 파라미터를 사용하세요. 자세한 내용은 사용자 지정 자격 증명 브로커가 AWS 콘솔에 액세스할 수 있도록 하기 단원을 참조하십시오.

  • 역할 세션 이름. 여러 보안 주체가 하나의 역할을 사용하는 경우 이 문자열 값을 사용하여 세션을 식별합니다. 보안을 위해 관리자는 AWS CloudTrail 로그의 이 필드를 검토하여 AWS에서 누가 작업을 수행했는지 확인할 수 있습니다. 관리자는 사용자가 역할을 수임할 때 IAM 사용자 이름을 세션 이름으로 지정하도록 요구할 수 있습니다. 자세한 내용은 sts:RoleSessionName 단원을 참조하십시오.

  • (선택 사항) 소스 자격 증명. 사용자가 역할을 수임할 때 소스 자격 증명을 지정하도록 요구할 수 있습니다. 소스 자격 증명은 설정한 후에는 값을 변경할 수 없으며 역할 세션 중에 수행되는 모든 작업의 요청에 있습니다. 소스 자격 증명 값은 역할 체인 세션 간에 유지됩니다. AWS CloudTrail 로그의 소스 자격 증명 정보를 사용하여 역할로 작업을 수행한 사용자를 확인할 수 있습니다. 소스 자격 증명 사용에 대한 자세한 내용은 위임된 역할로 수행한 작업 모니터링 및 제어 섹션을 참조하세요.

  • (선택 사항) 인라인 또는 관리형 세션 정책. 이러한 정책은 역할 세션에 할당된 역할 자격 증명 기반 정책의 권한을 제한합니다. 결과적으로 얻는 세션의 권한은 사용자 또는 역할의 자격 증명 기반 정책의 교집합과 세션 정책입니다. 세션 정책을 사용하여 수임된 역할의 자격 증명 기반 정책에서 허용되는 것보다 더 많은 권한을 부여할 수는 없습니다. 역할 세션 권한에 대한 자세한 정보는 세션 정책 섹션을 참조하세요.

  • (선택 사항) 세션 태그. 역할을 맡은 다음 임시 자격 증명을 사용하여 요청할 수 있습니다. 이렇게 하면 세션의 보안 주체 태그에 역할의 태그와 전달된 세션 태그가 포함됩니다. 임시 자격 증명을 사용하여 이렇게 호출하는 경우 새 세션은 호출 세션의 전이적 세션 태그도 상속합니다. 세션 태그에 대한 자세한 내용은 AWS STS에서 세션 태그 전달 섹션을 참조하세요.

  • (선택 사항) MFA 정보. MFA(멀티 팩터 인증)를 사용하도록 구성한 경우, MFA 디바이스의 식별자와 해당 디바이스에서 제공한 일회용 코드를 포함시켜야 합니다.

  • (선택 사항) 계정에 대한 액세스 권한을 타사에 위임할 때 사용할 수 있는 ExternalId 값입니다. 이 값은 지정된 타사만 역할에 액세스할 수 있도록 하는 데 도움이 됩니다. 자세한 내용은 AWS 리소스에 대한 액세스 권한을 타사에 부여할 때 외부 ID를 사용하는 방법 섹션을 참조하세요

다음 예제에서는 AssumeRole을 사용한 샘플 요청 및 응답을 보여줍니다. 이 예제 요청에서는 지정된 기간 동안 세션 정책, 세션 태그, 외부 ID소스 자격 증명이 포함된 demo 역할을 가정합니다. 결과 세션의 이름이 John-session으로 지정됩니다.

예 요청 예제
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=AssumeRole &RoleSessionName=John-session &RoleArn=arn:aws::iam::123456789012:role/demo &Policy=%7B%22Version%22%3A%222012-10-17%22%2C%22Statement%22%3A%5B%7B%22Sid%22%3A%20%22Stmt1%22%2C%22Effect%22%3A%20%22Allow%22%2C%22Action%22%3A%20%22s3%3A*%22%2C%22Resource%22%3A%20%22*%22%7D%5D%7D &DurationSeconds=1800 &Tags.member.1.Key=Project &Tags.member.1.Value=Pegasus &Tags.member.2.Key=Cost-Center &Tags.member.2.Value=12345 &ExternalId=123ABC &SourceIdentity=DevUser123 &AUTHPARAMS

이전 예제의 정책 값은 다음 정책을 URL로 인코딩한 버전입니다.

{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:*","Resource":"*"}]}

예시의 AUTHPARAMS 파라미터는 서명에 대한 자리 표시자입니다. 서명은 AWS HTTP API 요청에 포함해야 하는 인증 정보입니다. AWS SDK를 사용하여 API 요청을 생성하는 것이 좋습니다. 이렇게 하면 SDK가 요청 서명을 대신 처리한다는 장점이 있습니다. API 요청을 수동으로 생성하고 서명해야 하는 경우 요청에 서명하는 방법을 알아보려면 Amazon Web Services 일반 참조의 서명된 AWS API 요청 생성을 참조하세요.

그 응답에는 임시 보안 자격 증명뿐만 아니라 페더레이션 사용자 및 자격 증명 만료 시간에 대한 Amazon 리소스 이름(ARN)이 포함되어 있습니다.

예 응답의 예
<AssumeRoleResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/"> <AssumeRoleResult> <SourceIdentity>DevUser123</SourceIdentity> <Credentials> <SessionToken> AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU 9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz +scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA== </SessionToken> <SecretAccessKey> wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY </SecretAccessKey> <Expiration>2019-07-15T23:28:33.359Z</Expiration> <AccessKeyId>AKIAIOSFODNN7EXAMPLE</AccessKeyId> </Credentials> <AssumedRoleUser> <Arn>arn:aws:sts::123456789012:assumed-role/demo/John</Arn> <AssumedRoleId>ARO123EXAMPLE123:John</AssumedRoleId> </AssumedRoleUser> <PackedPolicySize>8</PackedPolicySize> </AssumeRoleResult> <ResponseMetadata> <RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId> </ResponseMetadata> </AssumeRoleResponse>
참고

AWS 변환은 전달된 세션 정책과 세션 태그를 별도의 제한이 있는 압축된 이진 형식으로 압축합니다. 일반 텍스트가 다른 요구 사항을 충족하는 경우에도 이 제한으로 인해 요청이 실패할 수 있습니다. PackedPolicySize 응답 요소는 요청에 대한 정책 및 태그가 상위 크기 제한과 얼마나 가까운지를 백분율로 나타냅니다.

AssumeRoleWithWebIdentity - 웹 기반 ID 제공자를 통한 페더레이션

AssumeRoleWithWebIdentity API 작업은 퍼블릭 자격 증명 공급자를 통해 인증된 페더레이션 사용자의 임시 보안 자격 증명 세트를 반환합니다. 퍼블릭 보안 인증 공급자의 예에는 Login with Amazon, Facebook, Google 또는 OpenID Connect(OIDC)호환 보안 인증 공급자 등이 있습니다. 이 작업은 AWS에 대한 액세스가 필요한 모바일 애플리케이션 또는 클라이언트 기반 애플리케이션을 생성하는 데 유용합니다. 이 작업을 사용하는 경우 사용자가 자체 AWS 또는 IAM 자격 증명을 필요로 하지 않습니다. 자세한 내용은 OIDC 페더레이션 단원을 참조하십시오.

AssumeRoleWithWebIdentity를 직접 호출하는 대신 모바일 개발을 위한 AWS SDK에서 Amazon Cognito 및 Amazon Cognito 자격 증명 공급자를 사용할 것을 권장합니다. 자세한 내용은 Amplify 설명서Amplify를 사용한 인증을 참조하세요.

Amazon Cognito를 사용하고 있지 않다면 AssumeRoleWithWebIdentity의 AWS STS 작업을 호출합니다. 이것은 서명되지 않은 호출로서 앱이 이 호출을 하기 위해 어떤 AWS 보안 자격 증명에도 액세스할 필요가 없음을 뜻합니다. 이 호출을 할 때 다음과 같은 정보를 전달하게 됩니다.

  • 앱이 수임해야 하는 역할의 Amazon 리소스 이름(ARN) 앱이 사용자가 로그인하는 여러 가지 방식을 지원하는 경우 다양한 역할, 즉 자격 증명 공급자당 하나의 역할을 정의해야 합니다. AssumeRoleWithWebIdentity에 대한 호출에는 사용자가 로그인할 때 사용한 공급자에 특정된 역할의 ARN이 포함되어야 합니다.

  • 앱이 사용자를 인증한 후에 IdP로부터 얻는 토큰

  • 속성을 토큰에 세션 태그로 전달하도록 IdP를 구성할 수 있습니다.

  • (선택 사항) 기간. 임시 보안 자격 증명의 기간을 지정합니다. DurationSeconds 파라미터를 사용하여 역할 세션 기간을 900초(15분)에서 해당 역할에 대한 최대 세션 기간 설정까지 지정합니다. 역할에 대한 최댓값을 확인하는 방법을 알아보려면 역할에 대한 최대 세션 기간 설정 보기 섹션을 참조하세요. 이 파라미터를 전달하지 않으면 임시 자격 증명이 한 시간 내에 만료됩니다. 이 API의 DurationSeconds 파라미터는 콘솔 세션의 기간을 지정하는 데 사용하는 SessionDuration HTTP 파라미터와 다릅니다. 콘솔 로그인 토큰의 연동 엔드포인트에 대한 요청에는 SessionDuration HTTP 파라미터를 사용하세요. 자세한 내용은 사용자 지정 자격 증명 브로커가 AWS 콘솔에 액세스할 수 있도록 하기 단원을 참조하십시오.

  • 역할 세션 이름. 여러 보안 주체가 하나의 역할을 사용하는 경우 이 문자열 값을 사용하여 세션을 식별합니다. 보안을 위해 관리자는 AWS CloudTrail 로그의 이 필드를 검토하여 AWS에서 누가 작업을 수행했는지 확인할 수 있습니다. 관리자는 사용자가 역할을 수임할 때 세션 이름에 특정 값을 지정하도록 요구할 수 있습니다. 자세한 내용은 sts:RoleSessionName 단원을 참조하십시오.

  • (선택 사항) 소스 자격 증명. 페더레이션 사용자가 역할을 수임할 때 소스 자격 증명을 지정하도록 요구할 수 있습니다. 소스 자격 증명은 설정한 후에는 값을 변경할 수 없으며 역할 세션 중에 수행되는 모든 작업의 요청에 있습니다. 소스 자격 증명 값은 역할 체인 세션 간에 유지됩니다. AWS CloudTrail 로그의 소스 자격 증명 정보를 사용하여 역할로 작업을 수행한 사용자를 확인할 수 있습니다. 소스 자격 증명 사용에 대한 자세한 내용은 위임된 역할로 수행한 작업 모니터링 및 제어 섹션을 참조하세요.

  • (선택 사항) 인라인 또는 관리형 세션 정책. 이러한 정책은 역할 세션에 할당된 역할 자격 증명 기반 정책의 권한을 제한합니다. 결과적으로 얻는 세션의 권한은 사용자 또는 역할의 자격 증명 기반 정책의 교집합과 세션 정책입니다. 세션 정책을 사용하여 수임된 역할의 자격 증명 기반 정책에서 허용되는 것보다 더 많은 권한을 부여할 수는 없습니다. 역할 세션 권한에 대한 자세한 정보는 세션 정책 섹션을 참조하세요.

    참고

    AssumeRoleWithWebIdentity에 대한 호출이 서명(암호화)되지 않았습니다. 따라서 요청이 신뢰할 수 있는 중개자를 통해 전송된 경우에만 선택적 세션 정책을 포함해야 합니다. 이러한 경우 누군가가 정책을 변경해 제한을 제거할 수 있습니다.

AssumeRoleWithWebIdentity를 호출하면 AWS가 토큰의 신뢰성을 확인합니다. 예를 들어 공급자에 따라 AWS는 해당 공급자를 호출해 앱이 전달한 토큰을 포함할 수 있습니다. 자격 증명 공급자가 토큰을 확인한다고 가정하면, AWS는 다음 정보를 반환합니다.

  • 일련의 임시 보안 자격 증명 이러한 임시 보안 자격 증명은 액세스 키 ID, 보안 액세스 키 및 세션 토큰으로 이루어져 있습니다.

  • 위임된 역할의 역할 ID 및 ARN

  • 고유한 사용자 ID를 포함하는 SubjectFromWebIdentityToken

임시 보안 자격 증명이 있으면 AWS API 호출에 사용할 수 있습니다. 이는 장기 보안 자격 증명을 사용한 AWS API 호출과 동일한 프로세스입니다. 차이점은 AWS에서 임시 보안 자격 증명이 유효한지 확인하도록 하는 세션 토큰을 포함해야 한다는 점입니다.

앱은 자격 증명을 캐싱해야 합니다. 언급한 바와 같이, 자격 증명은 한 시간 후에 만료되도록 기본 설정되어 있습니다. AWS SDK에서 AmazonSTSCredentialsProvider 작업을 사용하지 않는 경우 사용자 및 사용자 앱에서 AssumeRoleWithWebIdentity을(를) 다시 호출해야 합니다. 이전 자격 증명이 만료되기 전에 이 작업을 호출하여 임시 보안 자격 증명 세트를 새로 받으세요.

AssumeRoleWithSAML - SAML 2.0과 호환되는 엔터프라이즈 ID 제공자를 통한 페더레이션

AssumeRoleWithSAML API 작업은 조직의 기존 자격 증명 시스템을 통해 인증된 페더레이션 사용자의 임시 보안 자격 증명 세트를 반환합니다. 또한 사용자는 SAML 2.0(Security Assertion Markup Language)을 사용하여 AWS에 인증 및 권한 부여 정보를 전달해야 합니다. 이 API 작업은 자격 증명 시스템(예: Windows Active Directory 또는 OpenLDAP)을 SAML 어설션을 생성할 수 있는 소프트웨어와 통합한 조직에 유용합니다. 이러한 통합은 사용자 자격 증명 및 권한에 대한 정보를 제공합니다(예: Active Directory Federation Services 또는 Shibboleth). 자세한 내용은 SAML 2.0 연동 단원을 참조하십시오.

참고

AssumeRoleWithSAML에 대한 호출이 서명(암호화)되지 않았습니다. 따라서 요청이 신뢰할 수 있는 중개자를 통해 전송된 경우에만 선택적 세션 정책을 포함해야 합니다. 이러한 경우 누군가가 정책을 변경해 제한을 제거할 수 있습니다.

이것은 서명되지 않은 호출로서 앱이 이 호출을 하기 위해 어떤 AWS 보안 자격 증명에도 액세스할 필요가 없음을 뜻합니다. 이 호출을 할 때 다음과 같은 정보를 전달하게 됩니다.

  • 앱이 수임해야 하는 역할의 Amazon 리소스 이름(ARN)

  • SAML 공급자의 ARN(자격 증명 공급자에 대해 설명하는 IAM에서 생성됨)

  • 앱의 로그인 요청에 대한 인증 응답 시 SAML 자격 증명 공급자가 제공한 base-64 인코딩 SAML 어설션

  • 속성을 SAML 어설션에 세션 태그로 전달하도록 IdP를 구성할 수 있습니다.

  • (선택 사항) 기간. 임시 보안 자격 증명의 기간을 지정합니다. DurationSeconds 파라미터를 사용하여 역할 세션 기간을 900초(15분)에서 해당 역할에 대한 최대 세션 기간 설정까지 지정합니다. 역할에 대한 최댓값을 확인하는 방법을 알아보려면 역할에 대한 최대 세션 기간 설정 보기 섹션을 참조하세요. 이 파라미터를 전달하지 않으면 임시 자격 증명이 한 시간 내에 만료됩니다. 이 API의 DurationSeconds 파라미터는 콘솔 세션의 기간을 지정하는 데 사용하는 SessionDuration HTTP 파라미터와 다릅니다. 콘솔 로그인 토큰의 연동 엔드포인트에 대한 요청에는 SessionDuration HTTP 파라미터를 사용하세요. 자세한 내용은 사용자 지정 자격 증명 브로커가 AWS 콘솔에 액세스할 수 있도록 하기 단원을 참조하십시오.

  • (선택 사항) 인라인 또는 관리형 세션 정책. 이러한 정책은 역할 세션에 할당된 역할 자격 증명 기반 정책의 권한을 제한합니다. 결과적으로 얻는 세션의 권한은 사용자 또는 역할의 자격 증명 기반 정책의 교집합과 세션 정책입니다. 세션 정책을 사용하여 수임된 역할의 자격 증명 기반 정책에서 허용되는 것보다 더 많은 권한을 부여할 수는 없습니다. 역할 세션 권한에 대한 자세한 정보는 세션 정책 섹션을 참조하세요.

  • 역할 세션 이름. 여러 보안 주체가 하나의 역할을 사용하는 경우 이 문자열 값을 사용하여 세션을 식별합니다. 보안을 위해 관리자는 AWS CloudTrail 로그의 이 필드를 검토하여 AWS에서 누가 작업을 수행했는지 확인할 수 있습니다. 관리자는 사용자가 역할을 수임할 때 세션 이름에 특정 값을 지정하도록 요구할 수 있습니다. 자세한 내용은 sts:RoleSessionName 단원을 참조하십시오.

  • (선택 사항) 소스 자격 증명. 페더레이션 사용자가 역할을 수임할 때 소스 자격 증명을 지정하도록 요구할 수 있습니다. 소스 자격 증명은 설정한 후에는 값을 변경할 수 없으며 역할 세션 중에 수행되는 모든 작업의 요청에 있습니다. 소스 자격 증명 값은 역할 체인 세션 간에 유지됩니다. AWS CloudTrail 로그의 소스 자격 증명 정보를 사용하여 역할로 작업을 수행한 사용자를 확인할 수 있습니다. 소스 자격 증명 사용에 대한 자세한 내용은 위임된 역할로 수행한 작업 모니터링 및 제어 섹션을 참조하세요.

AssumeRoleWithSAML을 호출하면 AWS가 SAML 어설션의 신뢰성을 확인합니다. 자격 증명 공급자가 어설션을 확인한다고 가정하면, AWS는 다음 정보를 반환합니다.

  • 일련의 임시 보안 자격 증명 이러한 임시 보안 자격 증명은 액세스 키 ID, 보안 액세스 키 및 세션 토큰으로 이루어져 있습니다.

  • 위임된 역할의 역할 ID 및 ARN

  • SAML 어설션의 Audience 요소의 Recipient 속성 값을 포함하는 SubjectConfirmationData

  • SAML 어설션의 Issuer 요소 값을 포함하는 Issuer

  • Issuer 값, AWS 계정 ID, SAML 공급자의 표시 이름으로 구축된 해시 값을 포함하는 NameQualifier 요소 Subject 요소와 결합되면 페더레이션 사용자를 고유한 이름으로 식별할 수 있습니다.

  • SAML 어설션의 Subject 요소에 있는 NameID 요소의 값을 포함하는 Subject 요소

  • SubjectType 요소의 형식을 나타내는 Subject 요소 그 값은 persistent, transient, 또는 SAML 어설션에서 사용되는 FormatSubject 요소의 전체 NameID URI일 수 있습니다. NameID 요소의 Format 속성에 대한 자세한 내용은 인증 응답에 대한 SAML 어설션 구성 섹션을 참조하세요.

임시 보안 자격 증명이 있으면 AWS API 호출에 사용할 수 있습니다. 이는 장기 보안 자격 증명을 사용한 AWS API 호출과 동일한 프로세스입니다. 차이점은 AWS에서 임시 보안 자격 증명이 유효한지 확인하도록 하는 세션 토큰을 포함해야 한다는 점입니다.

앱은 자격 증명을 캐싱해야 합니다. 자격 증명은 한 시간 후에 만료되도록 기본 설정되어 있습니다. AWS SDK에서 AmazonSTSCredentialsProvider 작업을 사용하지 않는 경우 사용자 및 사용자 앱에서 AssumeRoleWithSAML을 다시 호출해야 합니다. 이전 자격 증명이 만료되기 전에 이 작업을 호출하여 임시 보안 자격 증명 세트를 새로 받으세요.

GetFederationToken - 사용자 지정 아이덴티티 브로커를 통한 페더레이션

GetFederationToken API 작업은 페더레이션 사용자에게 일련의 임시 보안 자격 증명을 반환합니다. 이 API는 기본 만료 기간이 상당히 길다는 점이(1시간이 아니라12시간) AssumeRole과 다릅니다. 또한 DurationSeconds 파라미터를 사용하여 임시 보안 자격 증명이 유효하게 남아 있을 기간을 지정할 수 있습니다. 결과 보안 인증 정보는 900초(15분)~129,600초(36시간)의 지정된 기간 동안 유효합니다. 만료 기간이 길어지면 새 보안 인증 정보를 자주 받을 필요가 없으므로 AWS에 대한 호출 수를 줄이는 데 도움이 될 수 있습니다.

이 요청을 할 때 특정 IAM 사용자의 자격 증명을 사용합니다. 임시 보안 자격 증명에 대한 권한은 GetFederationToken을 호출할 때 전달하는 세션 정책에 의해 결정됩니다. 결과적으로 얻는 세션의 권한은 IAM 사용자 정책 또는 전달한 세션 정책의 교집합입니다. 세션 정책은 페더레이션을 요청하는 IAM 사용자의 자격 증명 기반 정책에서 허용되는 권한보다 많은 권한을 부여하는 데 사용할 수 없습니다. 역할 세션 권한에 대한 자세한 정보는 세션 정책 섹션을 참조하세요.

GetFederationToken 작업에서 반환되는 임시 자격 증명을 사용하는 경우 세션의 보안 주체 태그에 사용자의 태그와 전달된 세션 태그가 포함됩니다. 세션 태그에 대한 자세한 내용은 AWS STS에서 세션 태그 전달 섹션을 참조하세요.

GetFederationToken 호출은 세션 토큰, 액세스 키, 보안 키, 만료로 구성된 임시 보안 자격 증명을 반환합니다. 조직 내에서 권한을 관리하고 싶다면 GetFederationToken을 사용할 수 있습니다(예: 프록시 애플리케이션을 사용할 권한 할당).

다음 예에서는 GetFederationToken을 사용한 샘플 요청 및 응답을 보여줍니다. 이 요청 예제에서는 지정된 기간 동안 호출 사용자를 세션 정책 ARN 및 세션 태그와 연동합니다. 결과 세션의 이름이 Jane-session으로 지정됩니다.

예 요청 예제
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetFederationToken &Name=Jane-session &PolicyArns.member.1.arn==arn%3Aaws%3Aiam%3A%3A123456789012%3Apolicy%2FRole1policy &DurationSeconds=1800 &Tags.member.1.Key=Project &Tags.member.1.Value=Pegasus &Tags.member.2.Key=Cost-Center &Tags.member.2.Value=12345 &AUTHPARAMS

앞의 예시에서 표시된 정책 ARN에는 다음과 같은 URL 인코딩 ARN이 포함되어 있습니다.

arn:aws:iam::123456789012:policy/Role1policy

또한 이 예제의 &AUTHPARAMS 파라미터는 인증 정보의 자리 표시자로 사용됩니다. 이는 서명이며 AWS HTTP API 요청과 함께 포함되어야 합니다. AWS SDK를 사용하여 API 요청을 생성하는 것이 좋습니다. 이렇게 하면 SDK가 요청 서명을 대신 처리한다는 장점이 있습니다. API 요청을 수동으로 생성하고 서명해야 하는 경우 요청에 서명하는 방법을 알아보려면 Amazon Web Services 일반 참조의 서명된 AWS API 요청 생성으로 이동하세요.

그 응답에는 임시 보안 자격 증명뿐만 아니라 페더레이션 사용자 및 자격 증명 만료 시간에 대한 Amazon 리소스 이름(ARN)이 포함되어 있습니다.

예 응답의 예
<GetFederationTokenResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/"> <GetFederationTokenResult> <Credentials> <SessionToken> AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU 9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz +scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCEXAMPLE== </SessionToken> <SecretAccessKey> wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY </SecretAccessKey> <Expiration>2019-04-15T23:28:33.359Z</Expiration> <AccessKeyId>AKIAIOSFODNN7EXAMPLE;</AccessKeyId> </Credentials> <FederatedUser> <Arn>arn:aws:sts::123456789012:federated-user/Jean</Arn> <FederatedUserId>123456789012:Jean</FederatedUserId> </FederatedUser> <PackedPolicySize>4</PackedPolicySize> </GetFederationTokenResult> <ResponseMetadata> <RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId> </ResponseMetadata> </GetFederationTokenResponse>
참고

AWS 변환은 전달된 세션 정책과 세션 태그를 별도의 제한이 있는 압축된 이진 형식으로 압축합니다. 일반 텍스트가 다른 요구 사항을 충족하는 경우에도 이 제한으로 인해 요청이 실패할 수 있습니다. PackedPolicySize 응답 요소는 요청에 대한 정책 및 태그가 상위 크기 제한과 얼마나 가까운지를 백분율로 나타냅니다.

AWS는 리소스 수준에서 권한을 부여할 것을 권장합니다(예: Amazon S3 버킷에 리소스 기반 정책 연결). Policy 파라미터는 생략할 수 있습니다. 그러나 페더레이션 사용자에 대한 정책을 포함하지 않으면, 임시 보안 자격 증명은 어떤 권한도 부여하지 않을 것입니다. 이 경우 반드시 리소스 정책을 사용해 페더레이션 사용자에게 AWS 리소스에 대한 액세스 권한을 부여해야 합니다.

예를 들어, 내 AWS 계정 번호가 111122223333이고 Susan이 액세스하도록 허용하려는 Amazon S3 버킷을 내가 가지고 있다고 가정해 보겠습니다. Susan의 임시 보안 자격 증명에는 버킷에 대한 정책은 포함되어 있지 않습니다. 이러한 경우 버킷에 Susan의 ARN과 일치하는 ARN과 관련된 정책이 있는지 확인해야 합니다(예: arn:aws:sts::111122223333:federated-user/Susan).

GetSessionToken - 신뢰할 수 없는 환경에 있는 사용자를 위한 임시 자격 증명

GetSessionToken API 작업은 기존 IAM 사용자에게 일련의 임시 보안 자격 증명을 반환합니다. 예를 들어 MFA가 IAM 사용자에 대해 활성화된 경우에만 AWS 요청을 허용하면 보안을 강화하는 데 유용합니다. 자격 증명은 일시적이므로 덜 안전한 환경을 통해 리소스에 액세스하는 IAM 사용자가 있을 때 보안을 강화하는 역할을 합니다. 덜 안전한 환경의 예시로는 모바일 디바이스 또는 웹 브라우저가 있습니다. 자세한 내용은 AWS Security Token Service API 참조임시 보안 자격 증명 요청 또는 GetSessionToken을 참조하세요.

기본적으로 IAM 사용자에 대한 임시 보안 자격 증명은 최대 12시간 동안 유효합니다. 그러나 DurationSeconds 파라미터를 사용하여 이 기간을 15분만큼 짧게 또는 36시간만큼 길게 요청할 수 있습니다. 보안상의 이유로 AWS 계정 루트 사용자의 토큰은 1시간의 유효 기간으로 제한됩니다.

GetSessionToken은 세션 토큰, 액세스 키 ID 및 비밀 액세스 키로 구성된 임시 보안 자격 증명을 반환합니다. 다음 예제에서는 GetSessionToken을 사용한 샘플 요청 및 응답을 보여줍니다. 응답에는 임시 보안 자격 증명의 만료 시간도 포함되어 있습니다.

예 요청 예제
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=1800 &AUTHPARAMS

예시의 AUTHPARAMS 파라미터는 서명에 대한 자리 표시자입니다. 서명은 AWS HTTP API 요청에 포함해야 하는 인증 정보입니다. AWS SDK를 사용하여 API 요청을 생성하는 것이 좋습니다. 이렇게 하면 SDK가 요청 서명을 대신 처리한다는 장점이 있습니다. API 요청을 수동으로 생성하고 서명해야 하는 경우 요청에 서명하는 방법을 알아보려면 Amazon Web Services 일반 참조의 서명된 AWS API 요청 생성으로 이동하세요.

예 응답의 예
<GetSessionTokenResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/"> <GetSessionTokenResult> <Credentials> <SessionToken> AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/L To6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3z rkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtp Z3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE </SessionToken> <SecretAccessKey> wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY </SecretAccessKey> <Expiration>2011-07-11T19:55:29.611Z</Expiration> <AccessKeyId>AKIAIOSFODNN7EXAMPLE</AccessKeyId> </Credentials> </GetSessionTokenResult> <ResponseMetadata> <RequestId>58c5dbae-abef-11e0-8cfe-09039844ac7d</RequestId> </ResponseMetadata> </GetSessionTokenResponse>

선택 사항으로 GetSessionToken 요청은 AWS 멀티 팩터 인증(MFA) 확인에 대한 SerialNumberTokenCode 값을 포함할 수 있습니다. 제공한 값이 유효하면 AWS STS에서는 MFA 인증 상태가 포함된 임시 보안 자격 증명을 제공합니다. 그런 다음 임시 보안 자격 증명은 MFA 인증이 유효한 동안 MFA로 보호되는 API 작업 또는 AWS 웹 사이트에 액세스하는 데 사용할 수 있습니다.

다음 예는 MFA 확인 코드 및 디바이스 일련 번호를 포함하는 GetSessionToken 요청을 보여줍니다.

https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=7200 &SerialNumber=YourMFADeviceSerialNumber &TokenCode=123456 &AUTHPARAMS
참고

AWS STS에 대한 호출은 전역 엔드포인트 또는 AWS 계정이 활성화된 리전 엔드포인트 어느 곳으로도 이루어질 수 있습니다. 자세한 내용은 리전 및 엔드포인트의 AWS STS 섹션을 참조하세요.

예시의 AUTHPARAMS 파라미터는 서명에 대한 자리 표시자입니다. 서명은 AWS HTTP API 요청에 포함해야 하는 인증 정보입니다. AWS SDK를 사용하여 API 요청을 생성하는 것이 좋습니다. 이렇게 하면 SDK가 요청 서명을 대신 처리한다는 장점이 있습니다. API 요청을 수동으로 생성하고 서명해야 하는 경우 요청에 서명하는 방법을 알아보려면 Amazon Web Services 일반 참조의 서명된 AWS API 요청 생성을 참조하세요.

AWS STS API 작업 비교

다음 표는 임시 보안 자격 증명을 반환하는 AWS STS의 API 작업이 수행하는 기능을 비교해 보여줍니다. 역할을 수임해 임시 보안 자격 증명을 요청하는 데 사용할 수 있는 여러 방법을 알아보려면 IAM 역할 사용 섹션을 참조하세요. 세션 태그를 전달할 수 있는 다양한 AWS STS API 작업에 대한 자세한 내용은 AWS STS에서 세션 태그 전달 섹션을 참조하세요.

API 옵션 비교
AWS STS API 호출할 수 있는 사용자 자격 증명의 수명(최소 | 최대 | 기본) MFA 지원¹ 세션 정책 지원² 결과로 얻은 임시 자격 증명에 대한 제한
AssumeRole IAM 사용자 또는 기존 임시 보안 자격 증명이 있는 IAM 역할 15분 | 최대 세션 기간 설정³ | 1시간

GetFederationToken 또는 GetSessionToken 호출 불가

AssumeRoleWithSAML 어떤 사용자나 호출자도 잘 알려진 자격 증명 공급자의 인증을 나타내는 SAML 인증 응답을 반드시 전달해야 합니다. 15분 | 최대 세션 기간 설정³ | 1시간 아니요

GetFederationToken 또는 GetSessionToken 호출 불가

AssumeRoleWithWebIdentity 모든 사용자, 호출자는 알려진 ID 공급자의 인증을 나타내는 OIDC 호환 JWT 토큰을 반드시 전달해야 합니다. 15분 | 최대 세션 기간 설정³ | 1시간 아니요

GetFederationToken 또는 GetSessionToken 호출 불가

GetFederationToken IAM 사용자 또는 AWS 계정 루트 사용자

IAM 사용자: 15분 | 36시간 | 12시간

루트 사용자: 15분 | 1시간 | 1시간

아니요

AWS CLI 또는 AWS API를 사용하여 IAM 작업을 호출할 수 없습니다. 이 제한은 콘솔 세션에는 적용되지 않습니다.

GetCallerIdentity를 제외한 AWS STS 작업을 호출할 수 없습니다.⁴

콘솔로의 SSO가 허용됩니다.⁵

GetSessionToken IAM 사용자 또는 AWS 계정 루트 사용자

IAM 사용자: 15분 | 36시간 | 12시간

루트 사용자: 15분 | 1시간 | 1시간

아니요

요청에 MFA 정보를 포함되지 않으면 IAM API 작업을 호출할 수 없습니다.

AssumeRole 또는 GetCallerIdentity를 제외한 AWS STS API 작업 호출 불가

콘솔로의 SSO는 허용되지 않습니다.⁶

¹ MFA 지원. AssumeRole 및 GetSessionToken API 작업을 호출할 때 멀티 팩터 인증(MFA)에 대한 정보를 포함시킬 수 있습니다. 이는 API 호출의 결과물인 임시 보안 자격 증명을 MFA 디바이스로 인증된 사용자들만 사용할 수 있게 해줍니다. 자세한 내용은 MFA 보호 API 액세스 구성 단원을 참조하십시오.

² 세션 정책 지원. 세션 정책은 역할 또는 페더레이션 사용자에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 정책입니다. 이 정책은 세션에 할당된 역할/사용자 자격 증명 기반 정책의 권한을 제한합니다. 결과적으로 얻는 세션의 권한은 엔터티의 자격 증명 기반 정책과 세션 정책의 교집합입니다 세션 정책을 사용하여 수임된 역할의 자격 증명 기반 정책에서 허용되는 것보다 더 많은 권한을 부여할 수는 없습니다. 역할 세션 권한에 대한 자세한 정보는 세션 정책 섹션을 참조하세요.

³ 최대 세션 기간 설정. DurationSeconds 파라미터를 사용하여 역할 세션 기간을 900초(15초)에서 해당 역할에 대한 최대 세션 기간 설정까지 지정합니다. 역할에 대한 최댓값을 확인하는 방법을 알아보려면 역할에 대한 최대 세션 기간 설정 보기 섹션을 참조하세요.

GetCallerIdentity. 이 작업을 실행하는 데 따로 권한이 필요하지 않습니다. 관리자가 sts:GetCallerIdentity 작업에 대한 액세스를 명시적으로 거부하는 정책을 IAM 사용자 또는 역할에게 추가하더라도 이 작업을 계속해서 실행할 수 있습니다. 권한이 필요하지 않은 이유는 IAM 사용자 또는 역할의 액세스가 거부되어도 반환되는 정보는 동일하기 때문입니다. 응답 예제를 보려면 iam:DeleteVirtualMFADevice를 수행할 권한이 없음 섹션을 참조하세요.

콘솔로 SSO(Single Sign-On)하기 SSO를 지원하기 위해 AWS는 페더레이션 엔드포인트(https://signin.aws.amazon.com/federation)를 호출해 임시 보안 자격 증명을 전달할 수 있게 해줍니다. 엔드포인트는 암호 없이도 사용자를 콘솔에 바로 로그인시켜주는 URL을 구성하는 데 사용 가능한 토큰을 반환합니다. 자세한 내용은 AWS 보안 블로그에서 SAML 2.0 페더레이션 사용자가 AWS Management Console에 액세스할 수 있게 하기AWS 관리 콘솔에 대한 크로스 계정 액세스를 활성화하는 방법을 참조하세요.

⁶ 임시 자격 증명을 검색한 이후에 연동 SSO 엔드포인트로 자격 증명을 전달하여 ​AWS Management Console에 액세스할 수 없습니다. 자세한 내용은 사용자 지정 자격 증명 브로커가 AWS 콘솔에 액세스할 수 있도록 하기 단원을 참조하십시오.