Identity
이번 장에서는 SysOps Administrator를 준비하며 Identity에 대해서 알아보도록 한다.
IAM Security Tools
- IAM Credentials Reports (accounts-level)
- 계정의 모든 사용자와 다양한 자격 증명 상태를 나열하는 보고서다.
- IAM Access Advisor (user-level)
- 액세스 어드바이저는 사용자에게 부여된 서비스 권한과 해당 서비스에 마지막으로 액세스한 시간을 보여준다.
- 이 정보를 사용하여 정책을 수정할 수 있다.
IAM Access Analyzer
- 어떤 리소스가 외부에 공유되고 있는지 확인할 수 있다.
- S3 버킷
- IAM 역할
- KMS Keys
- Lambda Function 및 레이어
- SQS Queue
- Secret Manager Secret
- 신뢰 영역(Zone of Trust) 정의 = AWS Account 또는 AWS Organization
- 신뢰 영역(Zone of Trust) 외부에서의 접근을 탐색한다.
Identity Federation
- 페더레이션을 통해 AWS 외부 사용자는 AWS 리소스에 액세스하기 위한 임시 역할을 맡을 수 있다.
- 이러한 사용자는 ID 제공 액세스 역할을 맡는다.
- 페더레이션은 제3자 인증 형식을 취한다.
- LDAP
- Microsoft Active Directory (~= SAML)
- Single Sign On
- Open ID
- Cognito
- 페더레이션을 사용하면 IAM 사용자를 생성할 필요가 없다.
- 사용자 관리는 AWS 외부에서 이루어진다.
SAML Federation (Enterprise)
- Active Directory/ADFS를 AWS(또는 모든 SAML 2.0)와 통합할 수 있다.
- AWS 콘솔 또는 CLI에 대한 액세스를 제공한다.(임시 자격 증명을 통해)
- 각각의 사용자에 대해 IAM 사용자를 생성할 필요가 없다.
Customer Identity Broker Application (Enterprise)
- ID 공급자가 SAML 2.0과 호환되지 않는 경우에 사용하는 것이 권장된다.
- ID 브로커는 적절한 IAM 정책을 결정해야 한다.
AWS Cognito - Federated Identity Pools (Public Application)
- 목표
- 클라이언트 측에서 AWS 리소스에 대한 직접 액세스를 제공한다.
- 방식
- 통합 ID 제공 업체에 로그인 하거나 익명으로 접근한다.
- Federated Identity Pool에서 임시 AWS 자격 증명을 다시 가져온다.
- 이러한 자격 증명에는 권한을 명시하는 사전 정의된 IAM 정책이 함께 제공된다.
- 예시
- Facebook 로그인을 사용하여 S3 버킷에 쓸 수 있는 임시 액세스를 제공한다.
- 참고
- 웹 자격 증명 연동은 Cognito의 대안이지만 AWS는 권장하지 않는다.
AWS STS (Security Token Service)
- AWS 리소스에 대한 제한적이고 임시적인 액세스 권한을 부여할 수 있다.
- 토큰은 최대 1시간 동안 유효하다. (갱신 필요)
- AssumeRole
- 자신의 계정 내에서: 보안을 강화한다.
- 교차 계정 액세스: 대상 계정의 역할을 맡아 그곳에서 작업을 수행한다.
- AssumeRoleWithSAML
- SAML로 로그인한 사용자에 대한 자격 증명을 반환한다.
- AssumeRoleWithWebIdentity
- IdP로 로그인한 사용자에 대한 자격 증명을 반환한다.(Facebook Login, Google Login, OIDC 호환 등..)
- AWS는 이를 사용하는 것 대신 Cognito를 사용할 것을 권장한다.
- GetSessionToken
- MFA의 경우 사용자 또는 AWS 계정 루트 사용자.
Assume Role
- 계정 또는 교차 계정 내에서 IAM 역할을 정의한다.
- IAM 역할에 액세스할 수 있는 주체를 정의한다.
- AWS STS를 사용하여 자격 증명을 검색하고 액세스 권한이 있는 IAM 역할을 가장한다. (AssumeRole API)
- 임시 자격 증명은 15 ~ 60분 동안 유효할 수 있다
Cross-Account Access
- AWS STS를 사용하여 다른 계정에 있는 AWS 리소스에 접근할 수 있다.
- 특정 IAM 그룹만 접근하도록 허용하여 다른 그룹의 사용자는 접근하지 못하도록 제한할 수 있다.
Cognito User Pool (CUP) - User Feature
- 웹 및 모바일 앱을 위한 서버리스 사용자 데이터베이스를 생성한다.
- 사용자 이름 또는 이메일 / 비밀번호 조합으로 간단한 로그인을 제공한다.
- 이메일과 휴대전화 검증을 통해 비밀번호 초기화를 할 수 있다.
- MFA(Multi-factor authentication)을 지원한다.
- Federated Identity: Facebook, Google, SAML 사용자 등..
- Feature: 자격 증명이 다른 곳에서 손상된 경우 사용자를 차단한다.
- 로그인하면 이후 요청부터 JWT(Json Web Token)을 전송한다.
통합
- Cognito User Pool은 API Gateway와 Application Load Balancer와 통합된다.
Cognito Identity Pool (Federated Identity)
- 임시 AWS 자격 증명을 얻을 수 있도록 "사용자" ID를 얻는다.
- 자격 증명 풀(예. 자격 증명 소스)에는 아래의 항목이 포함될 수 있다.
- 공개 공급자 (Amazon, Facebook, Google, Apple 로그인)
- Amazon Cognito 공급자 및 SAML ID 공급자
- OpenID Connect 공급자 및 SAML ID 공급자
- 개발자 인증 ID (맞춤형 로그인 서버)
- Cognito 자격 증명 풀은 인증되지 않은 게스트의 액세스를 허용한다.
- 사용자는 직접 또는 API Gateway를 통해 AWS 서비스에 액세스할 수 있다.
- 자격 증명에 적용되는 IAM 정책은 Cognito에서 정의된다.
- 세밀한 제어를 위해
user_id
를 기반으로 맞춤설정할 수 있다.
CUP 통합
- Cognito User Pool과 통합될 수 있다.
IAM Role
- 인증된 사용자 및 게스트 사용자를 위한 기본 IAM 역할을 제공한다.
- 사용자 ID를 기반으로 각 사용자의 역할을 선택하는 규칙을 정의한다.
- 정책 변수를 사용하여 사용자의 액세스를 분할할 수 있다.
- IAM 자격 증명은 STS를 통해 Cognito 자격 증명 풀에서 획득된다.
- 역할에는 Cognito 자격 증명 풀의 "Trust" 정책이 있어야 한다.
S3 예시
- 아래는 S3에 업로드되어 있는 특정 파일을 읽을 수 있는 권한을 부여하는 예시다.
- 아래는 정책을 생성할 때, "Cognito Identity Pool"의 변수를 사용하는 예시다.
- 아래는 변수를 사용하여 특정 Key값으로 요청하는 경우 허용하는 예시다.
Cognito User Pool vs Identity Pool
- Cognito User Pool (인증(Authentication), 신원 확인)
- 웹 및 모바일 애플리케이션용 사용자 데이터베이스다.
- 소셜, OIDC, SAML을 통해 로그인을 통합할 수 있다.
- 인증을 위한 호스팅 UI 사용자 정의가 가능하다.
- 인증 흐름 중에 AWS Lambda를 통한 트리거가 있다.
- 다양한 위험 수준(MFA, Adaptive Authentication 등..)에 맞게 로그인 환경을 조정한다.
- Cognito Identity Pool (인가(Authorization), 접근 제어)
- 사용자를 위한 AWS 자격 증명 얻기
- 사용자는 공개 소셜, OIDC, SAML 및 Cognito 사용자 풀을 통해 로그인할 수 있다.
- 사용자가 게스트 사용자라면 인증되지 않을 수 있다.
- 사용자는 IAM 역할 및 정책에 매핑되어 정책 변수를 활용할 수 있다.
'Infrastructure > Certificate' 카테고리의 다른 글
[SOA] Amazon VPC (0) | 2023.11.27 |
---|---|
[SOA] Route 53 (0) | 2023.11.22 |
[SOA] Security & Compliance (0) | 2023.11.20 |
[SOA] Disaster Recovery (0) | 2023.11.19 |
[SOA] Account Management (0) | 2023.11.17 |