본문 바로가기
AWS/Study

[AWS] Identity Federation

by okms1017 2023. 4. 5.
728x90

1. 개념 
 

AWS 외부의 사용자에게 일시적으로 자격증명을 부여하여 AWS 계정의 리소스에 접근하도록 하는 방법
 
 

2. 사용목적 
 

1) 사내 조직에 이미 구성원들이 존재하나, 그들에게 특정 IAM 사용자를 발급하기를 원하지 않을 때
2) 동시에 AWS 외부의 사용자들을 관리하고자 할 때
 
 

3. 사용예시
 

어떤 회사가 자체적으로 Active Directory와 같은 신원시스템을 가지고 있거나,
사용자가 사용하는 웹/모바일 어플리케이션에서 AWS 리소스에 접근이 필요한 경우에 사용한다.
 
 

4. 동작원리
 

Identity Federation

 
① IDP(Identity Provider) 로부터 자격증명을 얻기 위해 IDP와 AWS 간에 신뢰관계를 형성한다.
② 사용자가 IDP로 로그인 요청을 보내고, 자격증명(Credentials)을 받는다.
③ 임시 자격증명(Credentials)을 이용하여 AWS에 접근한다. 
 
 

5. 종류와 특징  
 
1) SAML 2.0 (Security Assertion Markup Language)

- IDP의 공개 표준 
- 임시 자격증명으로 AWS Console/CLI/API 접근 가능
- ADFS(Active Directory Federation Services)에 속한 사용자마다 IAM 사용자를 발급할 필요가 없다. 
(단, IAM 과 SAML 2.0 IDP 간에 신뢰관계가 형성되어야 한다.)
- 내부적으로 STS 서비스의 AssumeRoleWithSAML API를 호출하고, SAML Assertion을 통해 임시 자격증명을 얻는다. 
(SAML Assertion이란 사용자 권한 인증을 위해 IDP에서 AWS로 보내는 XML 형식의 문서를 말한다.)
- 오래된 방식으로 AWS SSO 서비스로 대체되고 있다. 
 
ex1) AWS API Access 과정 :
① 사용자(또는 어플리케이션)가 IDP 로 인증 요청을 보낸다. 
② IDP 는 요청 정보와 LDAP 기반 저장소에 저장되어 있는 인증 정보를 비교하여 검증한다. 
③ 인증이 성공하면 IDP 는 사용자에게 SAML Assertion을 반환한다. 
④ 사용자는 SAML Assertion을 이용하여 STS 서비스의 AssumeRoleWithSAML API를 호출한다.
⑤ STS 서비스는 SAML Assertion을 검증한 후, 임시 자격증명을 사용자에게 발급한다.  
⑥ 사용자는 임시 자격증명을 이용하여 AWS API에 접근할 수 있다. 
 
ex2) AWS Console Access 과정 :
① 사용자가 포털로 로그인을 시도하면 해당 인증 요청을 IDP 로 보낸다.
② IDP 는 요청 정보와 LDAP 기반 저장소에 저장되어 있는 인증 정보를 비교하여 검증한다. 
③ 인증이 성공하면 IDP 는 사용자에게 SAML Assertion을 반환한다. 
④ 엔드포인트 주소(https://signin.aws.amazon.com/saml)로 로그인을 시도한다.
⑤ STS 서비스를 통해 임시 자격증명과 함께 AWS Console URL 주소를 반환받는다.
⑥ 사용자는 임시 자격증명을 이용하여 AWS Console에 접근할 수 있다. 
 
ex3) ADFS를 이용한 AWS Console Access 과정 :
① 사용자가 포털로 로그인을 시도하면 해당 인증 요청을 ADFS 로 보낸다.
② ADFS 는 요청 정보와 AD에 저장되어 있는 인증 정보를 비교하여 검증한다. 
③ 인증이 성공하면 ADFS 는 사용자에게 SAML Assertion을 반환한다. 
④ 엔드포인트 주소(https://signin.aws.amazon.com/saml)로 로그인을 시도한다.
⑤ STS 서비스를 통해 임시 자격증명과 함께 AWS Console URL 주소를 반환받는다.
⑥ 사용자는 임시 자격증명을 이용하여 AWS Console에 접근할 수 있다. 
 
 

2) Custom Identity Broker

- SAML 2.0 과 호환이 불가능한 경우 
- 적절한 IAM 역할을 부여해야 한다. 
- 직접 STS 서비스의 AssumeRole API 또는 GetFederation Token API를 호출할 수 있어야 한다. 
 
ex) Custom Identity Broker를 이용한 AWS Access 과정 : 
① 사용자가 Custom Identity Broker로 로그인을 시도한다. 
② Custom Identity Broker는 요청 정보와 LDAP 기반 저장소에 저장되어 있는 인증 정보를 비교하여 검증한다. 
Custom Identity Broker가 직접 STS 서비스로 임시 자격증명을 요청하여 전달받는다. 
④ 사용자는 Custom Identity Broker로부터 임시 자격증명 또는 URL 주소를 전달받는다. 
⑤ 사용자는 임시 자격증명을 이용하여 AWS Console/API에 접근할 수 있다. 
 
 

3) Web Identity Federation (with Cognito)

- 클라이언트에서 AWS 리소스에 직접 접근이 필요한 경우 
- Cognito 서비스와 함께 사용하는 것을 권장한다.
- Cognito 서비스를 사용하면 최소 권한의 IAM 역할 또는 정책을 적용할 수 있으므로 보안성이 좋다. 
- IAM Policy 변수를 사용하여 조건을 주거나 정책을 제한할 수 있다. 
- Cognito 서비스는 익명의 사용자를 대상으로 할 수 있으며, MFA 인증을 지원한다. 
- Cognito 서비스는 데이터 동기화가 된다.
- TVM(Token Vending Machine)을 통해 토큰을 자격증명으로 교환할 수 있다. 
 
ex1) Web Identity Federation을 이용한 AWS Access 과정 :
① 클라이언트에서 3rd-party IDP(Amazon Google, Facebook, OIDC) 로 인증 요청을 보낸다. 
② 3rd-party IDP 는 웹 ID 토큰을 클라이언트에게 반환한다. 
③ 클라이언트는 STS 서비스의 AssumeRoleWithWebIdentity API를 호출한다. 
④ STS 서비스는 웹 ID 토큰을 받고, 임시 자격증명을 클라이언트에게 발급한다.
⑤ 클라이언트는 임시 자격증명을 이용하여 AWS 리소스에 직접 접근할 수 있다. 
 
ex2) Web Identity Federation with Cognito를 이용한 AWS Access 과정 :
① 클라이언트에서 3rd-party IDP(Amazon, Google, Facebook, OIDC) 로 인증 요청을 보낸다. 
② 3rd-party IDP 는 웹 ID 토큰을 클라이언트에게 반환한다. 
③ 클라이언트에서 Cognito 서비스로 웹 ID 토큰을 전달하고 Cognito 토큰을 교환받는다. 
④ 클라이언트는 STS 서비스로 Cognito 토큰을 전달하고 임시 자격증명으로 교환받는다.
⑤ 클라이언트는 임시 자격증명을 이용하여 AWS 리소스에 직접 접근할 수 있다. 
 
ex3) IAM Policy 변수 예시
${cognito-identity.amazonaws.com:sub}
${www.amazon.com:user_id}
${graph.facebook.com:id}
${accounts.google.com:sub}
 
 

4) SSO

- 별도 주제 
 
 
 


[출처] 
1) Udemy 강의, "Ultimate AWS Certified Solutions Architect Professional 2023", https://www.udemy.com/course/aws-solutions-architect-professional

728x90

'AWS > Study' 카테고리의 다른 글

[AWS] Control Tower  (0) 2023.04.25
[AWS] IAM Identity Center  (0) 2023.04.14
[AWS] Service Control Policies  (0) 2023.04.12
[AWS] Organizations  (0) 2023.04.10
[AWS] Directory Service  (0) 2023.04.07