AWS/Service

[AWS] Identity Federation

okms1017 2023. 4. 5. 16:16
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