배경
작업을 하다 보면 OpenSearch domain을 생성해야 하는 경우가 있다. 단순히 OpenSearch를 생성하는 작업은 쉬울 수 있는데 이후 절차들이 까다로워 개인적으로 남겨보려고 한다. 단순히 OpenSearch를 생성하는 것이 아니라 이후 SSO 내의 Application에 등록하는 것까지를 목표로 한다.
아래는 개발 환경의 설정값을 기준으로 정리한 절차다. 도메인 생성과 초기 관리자 권한 매핑을 마친 다음 IAM Identity Center Application을 생성하고, 4단계에서 OpenSearch의 SAML 인증을 설정한다.
1. OpenSearch 생성
- 도메인 이름을 입력한다.
- 표준 생성 → 개발 → 대기 없는 도메인 → 1-AZ를 선택한다.
- 인스턴스 유형과 데이터 노드 수를 지정한다. 데이터 노드 수는 전용 마스터 노드를 제외한 수다.
- 스토리지를 gp3, IOPS를 3,000, 처리량을 250 MiB/s로 설정한다. 스토리지 용량은 환경에 맞게 지정한다.
- VPC → IPv4를 선택하고 서브넷과 보안그룹을 지정한다.
- 세분화된 액세스 제어를 활성화하고, 초기 접속에 사용할 내부 관리자 계정
Admin과 비밀번호<관리자 비밀번호>를 설정한다. - 도메인 수준 액세스 정책을 JSON으로 편집한다. 해당 도메인 접근을 허용할 구문의
Effect를Deny에서Allow로 변경한다. 네트워크 접근은 VPC·보안그룹으로, 사용자 권한은 세분화된 액세스 제어로 제한한다. - 저장 데이터 암호화에는 고객 관리형 KMS 키(CMK)를 연결하고 자동 튜닝은 끈다.
- 나머지는 기본값으로 두고 도메인을 생성한다.
2. Dashboards에서 관리자 권한 매핑
이 절차가 필요한 이유는 OpenSearch에서 Saml 연동을 하기 위함이다. 현재 과정을 통해 AWS의 Group과 OpenSearch 내부의 Role을 연결할 수 있다.
먼저 IAM Identity Center에서 관리자 그룹을 생성하거나 기존 관리자 그룹의 그룹 ID를 확인한다. 이후 VPC에 접근 가능한 네트워크에서 OpenSearch Dashboards URL을 열고, 생성 시 설정한 Admin 계정으로 로그인한다.
- Security → Roles → all_access → Mapped users로 이동한다.
- Users에
Admin, Backend roles에 관리자 그룹의 그룹 ID를 추가한다. - Security → Roles → security_manager → Mapped users에서도 같은 값을 추가한다.
기존 매핑은 유지하고 필요한 값을 추가한다. Backend role에는 그룹 표시 이름이 아니라 SAML의 Role 속성으로 전달될 그룹 ID를 사용한다. 관리자 그룹은 all_access와 security_manager에 매핑한다. (AWS 연동 예제)
3. IAM Identity Center Application 등록
Application을 등록함으로써, 사용자는 OpenSearch 탭을 가지 않더라도 콘솔에 접근할 수 있게 된다.
- IAM Identity Center → 애플리케이션 → 애플리케이션 추가로 이동한다.
- 직접 설정할 애플리케이션을 선택하고 SAML 2.0 유형으로 등록한다.
- IAM Identity Center SAML 메타데이터를 다운로드한다. IdP 엔터티 ID는 이 XML의
entityID값으로 확인한다. - 애플리케이션 메타데이터를 직접 입력한다.
- Application ACS URL: OpenSearch 보안 설정에 표시되는 IdP-initiated SSO URL.
- Application SAML audience: OpenSearch의 서비스 공급자 엔터티 ID(Service provider entity ID).
- 속성 매핑을 아래와 같이 설정하고 저장한다.
| 속성 | 매핑 값 | 형식 |
|---|---|---|
Subject | ${user:email} | emailAddress |
Role | ${user:groups} | unspecified |
- 관리자 그룹을 Application에 할당한다. 이후 일반 사용자용 그룹을 생성하면 필요한 사용자들을 그룹에 넣고 Application에도 할당한다.
ACS URL과 SAML audience의 대응 관계, 속성 매핑은 AWS IAM Identity Center 연동 예제를 기준으로 한다. Custom Domain을 사용한다면 두 값도 해당 엔드포인트 기준으로 맞춘다.
4. OpenSearch SAML 설정
3단계에서 IAM Identity Center Application을 생성하고 SAML 메타데이터를 다운로드한 뒤 진행한다. 생성한 OpenSearch 도메인의 보안 구성 → 편집에서 SAML 인증을 활성화하고 다음과 같이 설정한다.
- IdP 메타데이터 XML 가져오기에서 3단계에서 받은 메타데이터 파일을 업로드한다.
- IdP 엔터티 ID가 메타데이터의
entityID와 같은지 확인한다. SAML assertion 전체를 입력하는 항목이 아니다. - **추가 설정 → 역할 키(Roles key)**에
Role을 입력한다. 3단계의 속성 이름과 대소문자까지 일치시킨다. - Subject key는 비워 두어 기본
NameID를 사용한다. 3단계에서 매핑한 이메일 주소가 사용자 식별자로 전달된다. - 세션 유지 시간을 60분으로 설정하고 저장한다.
설정 반영이 완료된 후 로그인한다. IdP 엔터티 ID, Subject key, Roles key와 세션 유지 시간의 의미는 AWS SAML 설정 문서를 참고한다.
5. 접속 방식 정리
이번 구성에서는 모든 설정을 마친 뒤 기본 OpenSearch Dashboards URL로 직접 로그인되지 않았고, IAM Identity Center에서 할당된 Application을 통해 접속했다.
이후에는 AWS 액세스 포털 → 할당된 Application → OpenSearch Dashboards 순서로 접속한다. Application 할당은 로그인 대상을 정하고, OpenSearch의 역할 매핑은 로그인한 사용자의 권한을 정한다. 일반 사용자 그룹에도 필요한 OpenSearch 역할을 별도로 매핑해야 한다.
직접 URL로 로그인할 수 있는지는 SAML 시작 방식에 따라 달라진다. AWS는 Dashboards에서 시작하는 SP-initiated와 IdP의 Application에서 시작하는 IdP-initiated 방식을 지원하므로, 이번 구성의 직접 로그인 불가를 모든 SAML 구성의 공통 제약으로 보지는 않는다. VPC 도메인이므로 Application을 통해 로그인할 때도 해당 VPC로 접근 가능한 네트워크가 필요하다. (AWS SAML 설정 문서)