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 리소스에 접근할 수 있다.
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
복사
•
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
복사




