◇ 공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇
STS: 일시적인 인증 자격
STS, Security Token Service
STS는 AWS 리소스에 접근이 필요한 사용자나 애플리케이션에 일시적인 보안 자격 증명을 제공하는 서비스이다.
즉, 기존의 IAM Role이나 IAM User 등의 자격을 임시적으로 STS를 통해 받아 AWS CLI 등을 활용해 AWS 리소스에 접근할 수 있다.
인증 증명으로 다음을 발급한다
- Access Key : ID와 비슷하다
- Secret Access Key : Password와 비슷하다
- Session Token : 임시 보안 자격 증명의 유효성을 확인하는 데 사용되는 토큰, 유효기간이 지나면 만료된다.
STS 자격 증명의 유효기간 (유효기간이 지나면 자동으로 STS가 무효화된다, 다시 갱신 해야됨)
- 최소 : 15 분
- 최대 : 36 시간
STS의 임시 자격을 다음과 같은 내용으로 얻게 된다. 이를 통해 AWS CLI로 AWS 리소스에 접근 가능해진다.
주요 STS API
- AssumeRole
- AssumeRoleWithSAML
- AssumeRoleWithWebIdentity
- GetSessionToken
- GetFederationToken
🎭 AssumeRole
다른 AWS 계정이나 같은 계정 내에서 특정 역할(Role)을 임시로 가정(Assume)하여 특정 AWS 리소스에 접근할 수 있다.
🌱예시) 회사에 두 개의 AWS 계정이 있을 경우
- 계정 A (미국 개발자용 계정)
- 계정 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 리소스 접근을 허용할 때 사용된다.
SAML에 대한 정리: https://jibinary.tistory.com/507
🎭 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
"Federation" 뜻:
연동 (여러 시스템이나 조직 간에 사용자 인증 및 권한을 공유하는 것, 사용자가 한 번 인증(로그인)하면, 다른 시스템이나 서비스에 다시 로그인할 필요 없이 접근할 수 있다)
연동된 사용자(federated user)를 위한 임시 보안 자격 증명을 생성한다. 연동된 사용자는 IAM User로 등록되지 않은 외부 사용자를 의미한다.
주로 사내 네트워크의 애플리케이션이나 프록시 애플리케이션을 위해 사용된다.
Trust Relationship, 신뢰 관계 설정
Trust Policy (신뢰 정책)
Trust Policy는 IAM Role이 누구를 신뢰할지를 결정하는 Policy이다. (IAM Role에 Trust Policy을 설정한다)
Trust Policy는 IAM Role에 어떤 Principal(예: 다른 AWS 계정)에게 권한을 부여할지를 정의하는 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": {}
}
]
}
(🌱 Trust Policy 예시) "111111111111" 계정의 IAM Role ⇚ "999999999999" 계정의 IAM User
- "111111111111" 계정의 Role A에서 "999999999999" 계정의 User B를 Trust Policy을 설정한다.
- "999999999999" 계정의 User B에서 "111111111111" 계정의 Role A을 지정하고, AssumeRole을 허용(Allow)하는 IAM Policy을 설정한다.
이로 인해 "999999999999"의 UserB는 RoleA에 부여된 권한을 Assume하여, "111111111111" 계정 내의 리소스에 접근할 수 있게 된다.
[RoleA (IAM User)에 설정하는 Trust Policy]
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::999999999999:user/UserB"
},
"Action": "sts:AssumeRole",
}
]
}
[UserB에 설정하는 IAM Policy]
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::111111111111:role/RoleA"
}
]
}
'클라우드(AWS)' 카테고리의 다른 글
[AWS] Amazon OpenSearch란? 쉽게 정리 (검색 엔진, Elasticsearch) (0) | 2024.10.20 |
---|---|
[AWS] RBAC와 ABAC란? 쉽게 정리 (0) | 2024.10.12 |
[AWS] Cloud Development Kit (CDK) 이란? 쉽게 핵심 정리 (1) | 2024.10.05 |
Amazon Chime이란? 쉽게 정리 (0) | 2024.10.05 |
[AWS] AppSync란? 쉽게 정리 (GraphQL 서비스) (2) | 2024.10.04 |