Search

STS

Security Token Service
AWS 리소스에 접근이 필요한 사용자나 애플리케이션에 일시적인 보안 자격 증명을 제공하는 서비스이다.
즉, 기존의 IAM Role이나 IAM User 등의 자격을 임시적으로 STS를 통해 받아 AWS CLI 등을 활용해 AWS 리소스에 접근할 수 있다.

STS 임시 자격 증명 (Access Key, Secret Access Key)

STS로 통해 임시 자격 증명(Temporary Security Credentials)이 다음과 같은 내용이 발급된다.
1.
Access Key : (AWS에 접근하기 위한) ID와 비슷하다
2.
Secret Access Key : (AWS에 접근하기 위한) Password와 비슷하다
3.
Session Token : 임시 보안 자격 증명의 유효성을 확인하는 데 사용되는 토큰, 유효기간이 지나면 만료된다.
STS 자격 증명의 유효기간
(유효기간이 지나면 자동으로 STS가 무효화된다, 다시 갱신 해야됨)
최소(min) : 15 분
최대(max) : 36 시간

STS의 임시 자격 증명을 얻는 방법

보통은 주로 AWS CLI를 통해 다들 STS의 임시 자격 증명을 발급받겠지만 그외에 다양한 방법이 있다.
1.
AWS CLI
2.
AWS SDK
3.
AWS Management Console
4.
Lambda 함수
5.
Third-Party Tools 및 SSO
AWS CLI 예시
aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name "example-session"
Shell
복사
AWS SDK 예시
import boto3 # STS 클라이언트 생성 sts_client = boto3.client('sts') # AssumeRole 호출 response = sts_client.assume_role( RoleArn='arn:aws:iam::123456789012:role/example-role', RoleSessionName='example-session' ) # 임시 자격 증명 가져오기 credentials = response['Credentials'] print("AccessKeyId:", credentials['AccessKeyId']) print("SecretAccessKey:", credentials['SecretAccessKey']) print("SessionToken:", credentials['SessionToken'])
Python
복사
Lambda 함수 예시
import boto3 def lambda_handler(event, context): sts_client = boto3.client('sts') response = sts_client.assume_role( RoleArn='arn:aws:iam::123456789012:role/example-role', RoleSessionName='example-session' ) return response['Credentials']
Python
복사

주요 STS API

1.
AssumeRole
2.
AssumeRoleWithSAML
3.
AssumeRoleWithWebIdentity
4.
GetSessionToken
5.
GetFederationToken
AssumeRole
다른 AWS 계정이나 같은 계정 내에서 특정 역할(Role)을 임시로 가정(Assume)하여 특정 AWS 리소스에 접근할 수 있다.
예시) 회사에 두 개의 AWS 계정이 있을 경우
1.
계정 A (미국 개발자용 계정)
2.
계정 B (한국 개발자용 계정)
한국 개발자가 계정 B에 로그인했지만, 계정 A의 S3 버킷에 접근할 필요가 있을 때 AssumeRole을 사용할 수 있다.
AssumeRoleWithSAML
SAML 2.0이라는 프로토콜을 사용한 온프레미스(예: Microsoft Active Directory)와 같은 신원 제공자(IdP)를 이용하여 SSO(Single Sign-On) 인증을 통해 IAM Role을 임시로 Assume 할 수 있게 해준다.
즉, 온프레미스의 SAML 자격 증명을 통해 AWS 리소스에 접근할 때 사용하는 기능이다.
예를 들어, 회사 내부 네트워크에서 사용하는 자격 증명으로 AWS에 로그인하여, 정의된 역할로 AWS 리소스에 접근할 수 있다.
사용 사례
회사 조직 내의 SSO 시스템을 사용해 인증된 사용자에게 AWS 리소스 접근을 허용할 때 사용된다.
AssumeRoleWithWebIdentity
Web Identity Provider, WIP (예: Google, Facebook, Amazon Cognito 등) 외부 IdP(신원 제공자)를 통해 인증된 사용자에게 IAM Role을 임시로 Assume 할 수 있게 해준다.
이 방식은 모바일 앱이나 웹 애플리케이션에서 많이 사용되며, 사용자가 별도의 AWS 자격 증명 없이 외부 계정으로 로그인할 수 있다는 장점이 있다.
예시
Google 계정으로 소셜 로그인하여 AssumeRoleWithWebIdentity을 통해 AWS 리소스에 접근한다.
GetSessionToken
사용자가 MFA (Multi-Factor Authentication)를 통해 인증 후 IAM User의 임시 자격 증명을 요청할 수 있다.
GetFederationToken
연동된 사용자(federated user)를 위한 임시 보안 자격 증명을 생성한다. 연동된 사용자는 IAM User로 등록되지 않은 외부 사용자를 의미한다.
주로 사내 네트워크의 애플리케이션이나 프록시 애플리케이션을 위해 사용된다.

Trust Policy (신뢰 정책)

Trust Policy는 IAM Role이 누구를 신뢰할지를 결정하는 Policy이다. (IAM Role에 Trust Policy을 설정한다)
Trust Policy는 IAM Role에 어떤 Principal(예: 다른 AWS 계정)에게 권한을 부여할지를 정의하는 JSON 문서이다.
Trust Policy 주요 속성
Principal : 역할을 Assume할 수 있는 Trusted Entity(주체)
Action : "sts:AssumeRole"와 같은 실행할 내용
Effect Allow 또는 Deny
Trusted Entity (대상)
Trust Policy에서 정의된 "Principal"이 바로 Trusted Entity이다.
Trusted Entity는 AWS 서비스(예: Lambda, EC2)나 IAM User 또는 IAM Role이 될 수 있다.
예시) AWS 계정
"Principal": { "AWS": "arn:aws:iam::123456789012:root" },
JSON
복사
예시) IAM 사용자 또는 역할
"Principal": { "AWS": "arn:aws:iam::123456789012:role/ExampleRole" },
JSON
복사
예시) EC2
"Principal": { "Service": "ec2.amazonaws.com" },
JSON
복사
Trust Policy 예시
AWS의 123456789012 계정 "root" 와 "JohnDoe" 라는 IAM User가 이 IAM Role을 Assume하여 맡을 수 있도록 허용하는 정책이다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:root", "arn:aws:iam::123456789012:user/JohnDoe" ] }, "Action": "sts:AssumeRole", "Condition": {} } ] }
JSON
복사