임시 보안 자격 증명 요청
임시 보안 자격 증명을 요청하려면 AWS API에서 AWS Security Token Service(AWS STS) 작업을 사용할 수 있습니다. 이러한 작업에는 AWS 리소스에 대한 액세스를 제어할 수 있는 임시 보안 자격 증명을 생성하여 신뢰할 수 있는 사용자에게 제공할 수 있습니다. 에 대한 자세한 내용은 AWS STS 섹션을 참조하세요.IAM의 임시 보안 자격 증명. 역할을 수임해 임시 보안 자격 증명을 요청하는 데 사용할 수 있는 여러 방법을 알아보려면 역할 수임 방법 섹션을 참조하세요.
API 작업을 호출하려면 AWS SDK
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 리전에서 AWS STS 관리 섹션을 참조하세요.
다음은 AWS 환경 및 애플리케이션에서 사용할 임시 자격 증명을 획득하는 데 사용할 수 있는 API 작업입니다.
사용자 지정 ID 브로커를 통해 크로스 계정 위임 및 페더레이션을 위한 자격 증명 요청
AssumeRole
API 작업은 기존 IAM 사용자가 아직 액세스 권한이 없는 AWS 리소스에 액세스할 수 있도록 허용하는 데 유용합니다. 예를 들어 사용자가 다른 AWS 계정의 리소스에 액세스해야 할 수 있습니다. 또한 멀티 팩터 인증(MFA)을 제공하는 것과 같이 일시적으로 액세스 권한을 얻는 수단으로도 유용합니다. 활성 자격 증명을 사용해 이 API를 호출해야 합니다. 이 작업을 호출할 수 있는 사용자를 알아보려면 AWS STS 자격 증명 비교을(를) 참조하세요. 자세한 내용은 IAM 사용자에게 권한을 부여할 역할 생성 및 MFA를 통한 보안 API 액세스을(를) 참조하세요.
사용자 지정 ID 브로커를 통해 크로스 계정 위임 및 페더레이션을 위한 임시 보안 자격 증명을 요청하는 방버
-
AWS 보안 자격 증명으로 인증합니다. 이 호출에는 반드시 유효한 AWS 보안 자격 증명을 사용해야 합니다.
-
AssumeRole
작업을 직접적으로 호출합니다.
다음 예제에서는 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
그 응답에는 임시 보안 자격 증명뿐만 아니라 페더레이션 사용자 및 자격 증명 만료 시간에 대한 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
응답 요소는 요청에 대한 정책 및 태그가 상위 크기 제한과 얼마나 가까운지를 백분율로 나타냅니다.
OIDC 공급자를 통해 자격 증명 요청
AssumeRoleWithWebIdentity
API 작업은 JSON 웹 토큰(JWT) 대신 임시 AWS 보안 자격 증명 세트를 반환합니다. 여기에는 Login with Amazon, Facebook, Google과 같은 퍼블릭 ID 제공업체와 GitHub 작업 또는 Azure Devops와 같이 OpenID Connect(OIDC) 검색과 호환되는 JWT를 발급하는 제공업체가 포함됩니다. 자세한 내용은 OIDC 페더레이션 단원을 참조하십시오.
참고
AssumeRoleWithWebIdentity
요청은 서명되지 않으며 AWS 자격 증명이 필요하지 않습니다.
OIDC 공급자를 통해 자격 증명 요청
-
AssumeRoleWithWebIdentity
작업을 직접적으로 호출합니다.AssumeRoleWithWebIdentity
를 직접 호출하는 경우 AWS에서는 IdP의 JSON 웹 키 세트(JWKS)를 통해 사용할 수 있는 퍼블릭 키를 사용해 디지털 서명을 확인함으로써 제시된 토큰의 유효성을 검증합니다. 토큰이 유효하고 IAM 역할 신뢰 정책에 명시된 모든 조건이 충족되면 AWS에서는 다음 정보를 반환합니다.-
일련의 임시 보안 자격 증명 이러한 임시 보안 자격 증명은 액세스 키 ID, 보안 액세스 키 및 세션 토큰으로 이루어져 있습니다.
-
위임된 역할의 역할 ID 및 ARN
-
고유한 사용자 ID를 포함하는
SubjectFromWebIdentityToken
값
-
-
그러면 애플리케이션에서는 응답에서 반환된 임시 보안 자격 증명을 사용하여 AWS API를 직접 호출할 수 있습니다. 이는 장기 보안 자격 증명을 사용한 AWS API 호출과 동일한 프로세스입니다. 차이점은 AWS에서 임시 보안 자격 증명이 유효한지 확인하도록 하는 세션 토큰을 포함해야 한다는 점입니다.
애플리케이션은 AWS STS에서 반환한 자격 증명을 캐시하고 필요에 따라 새로 고쳐야 합니다. 애플리케이션이 AWS SDK를 사용하여 빌드된 경우 SDK에는 AssumeRoleWithWebIdentity
를 직접 호출하고 만료되기 전에 AWS 자격 증명을 새로 고치는 작업을 처리할 수 있는 자격 증명 제공업체가 있습니다. 자세한 내용은 AWS SDKs and Tools 참조 안내서의 AWS SDKs and Tools standardized credential providers를 참조하세요.
SAML 2.0 ID 제공업체를 통해 자격 증명 요청
AssumeRoleWithSAML
API 작업은 조직의 기존 자격 증명 시스템을 통해 인증된 페더레이션 사용자의 임시 보안 자격 증명 세트를 반환합니다. 또한 사용자는 SAML
-
AssumeRoleWithSAML
작업을 직접적으로 호출합니다.이는 서명되지 않은 직접 호출로, 요청하기 전에 AWS 보안 자격 증명을 인증할 필요가 없습니다.
참고
AssumeRoleWithSAML
에 대한 호출이 서명(암호화)되지 않았습니다. 따라서 요청이 신뢰할 수 있는 중개자를 통해 전송된 경우에만 선택적 세션 정책을 포함해야 합니다. 이러한 경우 누군가가 정책을 변경해 제한을 제거할 수 있습니다. -
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 어설션에서 사용되는Format
및Subject
요소의 전체NameID
URI일 수 있습니다.NameID
요소의Format
속성에 대한 자세한 내용은 인증 응답에 대한 SAML 어설션 구성 섹션을 참조하세요.
-
-
응답에서 반환된 임시 보안 자격 증명을 사용하여 AWS API를 직접 호출합니다. 이는 장기 보안 자격 증명을 사용한 AWS API 호출과 동일한 프로세스입니다. 차이점은 AWS에서 임시 보안 자격 증명이 유효한지 확인하도록 하는 세션 토큰을 포함해야 한다는 점입니다.
앱은 자격 증명을 캐싱해야 합니다. 자격 증명은 한 시간 후에 만료되도록 기본 설정되어 있습니다. AWS SDK에서 AmazonSTSCredentialsProviderAssumeRoleWithSAML
을 다시 호출해야 합니다. 이전 자격 증명이 만료되기 전에 이 작업을 호출하여 임시 보안 자격 증명 세트를 새로 받으세요.
사용자 지정 ID 브로커를 통해 자격 증명 요청
GetFederationToken
API 작업은 페더레이션 사용자에게 일련의 임시 보안 자격 증명을 반환합니다. 이 API는 기본 만료 기간이 상당히 길다는 점이(1시간이 아니라12시간) AssumeRole
과 다릅니다. 또한 DurationSeconds
파라미터를 사용하여 임시 보안 자격 증명이 유효하게 남아 있을 기간을 지정할 수 있습니다. 결과 보안 인증 정보는 900초(15분)~129,600초(36시간)의 지정된 기간 동안 유효합니다. 만료 기간이 길어지면 새 보안 인증 정보를 자주 받을 필요가 없으므로 AWS에 대한 호출 수를 줄이는 데 도움이 될 수 있습니다.
-
특정 IAM 사용자의 AWS 보안 자격 증명으로 인증합니다. 이 호출에는 반드시 유효한 AWS 보안 자격 증명을 사용해야 합니다.
-
GetFederationToken
작업을 직접적으로 호출합니다.
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
그 응답에는 임시 보안 자격 증명뿐만 아니라 페더레이션 사용자 및 자격 증명 만료 시간에 대한 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
API 작업은 기존 IAM 사용자에게 일련의 임시 보안 자격 증명을 반환합니다. 예를 들어 MFA가 IAM 사용자에 대해 활성화된 경우에만 AWS 요청을 허용하면 보안을 강화하는 데 유용합니다. 자격 증명은 일시적이므로 덜 안전한 환경을 통해 리소스에 액세스하는 IAM 사용자가 있을 때 보안을 강화하는 역할을 합니다. 덜 안전한 환경의 예시로는 모바일 디바이스 또는 웹 브라우저가 있습니다.
-
특정 IAM 사용자의 AWS 보안 자격 증명으로 인증합니다. 이 호출에는 반드시 유효한 AWS 보안 자격 증명을 사용해야 합니다.
-
GetSessionToken
작업을 직접적으로 호출합니다. -
GetSessionToken
은 세션 토큰, 액세스 키 ID 및 비밀 액세스 키로 구성된 임시 보안 자격 증명을 반환합니다.
기본적으로 IAM 사용자에 대한 임시 보안 자격 증명은 최대 12시간 동안 유효합니다. 그러나 DurationSeconds
파라미터를 사용하여 이 기간을 15분만큼 짧게 또는 36시간만큼 길게 요청할 수 있습니다. 보안상의 이유로 AWS 계정 루트 사용자의 토큰은 1시간의 유효 기간으로 제한됩니다.
다음 예제에서는 GetSessionToken
을 사용한 샘플 요청 및 응답을 보여줍니다. 응답에는 임시 보안 자격 증명의 만료 시간도 포함되어 있습니다.
예 요청 예제
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=1800 &AUTHPARAMS
예시의 AUTHPARAMS
파라미터는 서명에 대한 자리 표시자입니다. 서명은 AWS HTTP API 요청에 포함해야 하는 인증 정보입니다. AWS SDK
예 응답의 예
<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) 확인에 대한 SerialNumber
및 TokenCode
값을 포함할 수 있습니다. 제공한 값이 유효하면 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