이 문서는 Tableau 및 Looker와 같은 비즈니스 인텔리전스(BI) 도구를 사용하여 데이터 분석가의 보안 데이터 액세스를 설정하려는 운영자와 IT 관리자를 대상으로 합니다. BI 도구를 사용하는 방법이나 Dataproc API와 상호작용하는 방법에 대한 안내를 제공하지 않습니다.
이 문서는 데이터 분석가가 BI 도구를 사용하여 데이터에 안전하게 액세스할 수 있도록 엔드 투 엔드 솔루션을 빌드하는 데 유용한 시리즈의 1부입니다. 이 문서에서는 다음 개념을 설명합니다.
- 제안 아키텍처
- 아키텍처에서의 구성요소 경계, 상호작용, 네트워킹을 대략적으로 알아보기
- 아키텍처에서의 인증 및 승인을 대략적으로 알아보기
이 시리즈의 2부인 Google Cloud에서 실행되는 Hadoop에 시각화 소프트웨어 연결에서는 Google Cloud에서 아키텍처를 설정하는 방법을 설명합니다.
아키텍처
다음 다이어그램에서는 이 문서에 설명된 아키텍처와 이벤트 흐름을 보여줍니다. 이 아키텍처에서 사용되는 제품에 대한 자세한 내용은 아키텍처 구성요소를 참조하세요.
- 클라이언트 애플리케이션은 자바 데이터베이스 연결(JDBC)을 통해 Dataproc 클러스터의 단일 진입점에 연결합니다. 진입점은 클러스터 마스터 노드에 설치된 Apache Knox에서 제공됩니다. Apache Knox와의 통신은 TLS에 의해 보호됩니다.
- Apache Knox는 인증 제공업체를 통해 인증을 LDAP 디렉터리와 같은 시스템에 위임합니다.
- 인증 후 Apache Knox는 사용자 요청을 백엔드 클러스터 하나 이상에 라우팅합니다. 경로와 구성을 커스텀 토폴로지로 정의합니다.
- Apache Hive와 같은 데이터 처리 서비스는 선택한 백엔드 클러스터에서 리슨하고 요청을 실행합니다.
- Apache Ranger는 요청을 가로채고 사용자에게 유효한 승인이 있는지 여부에 따라 처리가 진행되어야 하는지 여부를 결정합니다.
- 유효성 검사가 성공하면 데이터 처리 서비스가 요청을 분석하고 결과를 반환합니다.
아키텍처 구성요소
이 아키텍처는 다음과 같은 구성요소로 구성됩니다.
- 관리형 Hadoop 플랫폼:
- Dataproc. Dataproc은 Google Cloud의 관리형 Apache Spark로서 일괄 처리, 쿼리, 스트리밍, 머신러닝에 오픈소스 데이터 도구의 이점을 활용할 수 있게 해주는 Apache Hadoop 서비스입니다. Dataproc은 이 문서에 설명된 솔루션을 뒷받침하는 플랫폼입니다.
- 사용자 인증 및 승인:
- Apache Knox. Apache Knox는 Hadoop 클러스터의 모든 기본 서비스에 대한 단일 HTTP 액세스 포인트 역할을 합니다. Apache Knox는 인증, 승인, 감사, 기타 서비스에 사용되는 연결 가능한 제공업체가 포함된 역방향 프록시로 설계되었습니다. 클라이언트는 요청을 Knox에 보내고 Knox는 요청 URL과 매개변수를 기반으로 요청을 적절한 Hadoop 서비스로 라우팅합니다. Knox는 클라이언트 요청을 투명하게 처리하고 복잡성을 숨기는 진입점이므로 아키텍처의 중심에 있습니다.
- Apache Ranger. Apache Ranger는 사용자가 Hadoop 서비스에서 특정 작업을 수행할 수 있도록 세분화된 승인을 제공합니다. 또한 사용자 액세스를 감사하고 관리 작업을 구현합니다.
- 처리 엔진:
- Apache Hive. Apache Hive는 SQL을 사용하여 분산형 스토리지에 상주하는 대규모 데이터 세트를 액세스하고 관리할 수 있는 데이터 웨어하우스 소프트웨어입니다. Apache Hive는 SQL 쿼리를 파싱하고 시맨틱 분석을 수행하고 처리 엔진을 실행할 수 있도록 스테이지의 방향성 비순환 그래프(DAG)를 빌드합니다. 이 문서에 표시된 아키텍처에서 Hive는 사용자 요청 간의 변환 지점 역할을 합니다. 또한 여러 처리 엔진 중 하나로 작동할 수 있습니다. Apache Hive는 Hadoop 생태계의 유비쿼터스이며 표준 SQL에 익숙한 실무자는 이를 사용하여 데이터 분석을 수행할 수 있습니다.
- Apache Tez. Apache Tez는 Hive에서 준비한 DAG를 실행하고 결과를 반환하는 처리 엔진입니다.
- Apache Spark. Apache Spark는 DAG 실행을 지원하는 대규모 데이터 처리에 사용되는 통합 분석 엔진입니다. 아키텍처에서는 이 문서에서 설명된 방식의 유연성을 보여주기 위해 Apache Spark의 Spark SQL 구성요소를 보여줍니다. 한 가지 제한사항은 Spark SQL에서 공식 Ranger 플러그인을 지원하지 않는다는 점입니다. 따라서 Ranger에서 제공하는 세분화된 승인을 사용하는 대신 Apache Knox의 대략적인 ACL을 통해 승인을 수행해야 합니다.
구성요소 개요
다음 섹션에서는 각 구성요소를 더욱 자세하게 설명합니다. 또한 구성요소가 서로 상호작용하는 방식을 알아봅니다.
클라이언트 애플리케이션
클라이언트 애플리케이션에는 요청을 HTTPS REST 엔드포인트로 보낼 수 있는 도구가 포함되어 있지만 반드시 Dataproc Jobs API를 지원하지 않습니다. Tableau 및 Looker와 같은 BI 도구에는 HTTP를 통해 요청을 보낼 수 있는 HiveServer2(HS2) 및 Spark SQL JDBC 드라이버가 있습니다.
이 문서에서는 클라이언트 애플리케이션이 Google Cloud 외부, 즉 분석가 워크스테이션, 온프레미스 또는 다른 클라우드와 같은 환경에서 실행된다고 가정합니다. 따라서 클라이언트 애플리케이션과 Apache Knox 간의 통신은 CA 서명이나 자체 서명 SSL/TLS 인증서로 보호되어야 합니다.
진입점 및 사용자 인증
프록시 클러스터는 Apache Knox 게이트웨이를 호스팅하는 하나 이상의 장기 Dataproc 클러스터입니다.
Apache Knox는 클라이언트 요청의 단일 진입점 역할을 합니다. Knox는 프록시 클러스터 마스터 노드에 설치됩니다. Knox는 SSL 종료를 수행하고 사용자 인증을 위임하며 요청을 백엔드 서비스 중 하나로 전달합니다.
Knox에서 각 백엔드 서비스는 토폴로지로 구성됩니다. 토폴로지 설명자는 다음 작업과 권한을 정의합니다.
- 인증이 서비스에 위임되는 방식
- 백엔드 서비스가 요청을 전달하는 URI
- 간단한 서비스별 승인 액세스 제어 목록(ACL)
Knox를 사용하면 인증을 엔터프라이즈 및 클라우드 ID 관리 시스템과 통합할 수 있습니다. 토폴로지마다 사용자 인증을 구성하려면 인증 제공업체를 사용하면 됩니다. Knox는 기본적으로 Apache Sharo를 사용하여 로컬 데모 ApacheDS LDAP 서버에 대해 인증합니다.
또는 Knox를 선택하여 Kerberos를 사용할 수 있습니다. 예를 들어 앞의 다이어그램에서는 클러스터 외부에 있는 Google Cloud에 호스팅되는 Active Directory 서버를 보여줍니다.
Knox를 외부 ApacheDS 서버 또는 Microsoft Active Directory(AD)와 같은 엔터프라이즈 인증 서비스에 연결하는 방법에 대한 자세한 내용은 Apache Knox 사용자 가이드, Google Cloud 관리형 Active Directory, 제휴된 AD 문서를 참조하세요.
이 문서의 사용 사례에서는 Apache Knox가 프록시와 백엔드 클러스터의 단일 게이트기퍼 역할을 하는 한 Kerberos를 사용할 필요가 없습니다.
처리 엔진
백엔드 클러스터는 사용자 요청을 처리하는 서비스를 호스팅하는 Dataproc 클러스터입니다. Dataproc 클러스터는 수동 재구성 없이 분석가팀의 요구를 충족하기 위해 작업자 수를 자동 확장할 수 있습니다.
백엔드에 장기 Dataproc 클러스터를 사용하는 것이 좋습니다. 장기 Dataproc 클러스터를 사용하면 시스템이 중단 없이 데이터 분석가의 요청을 처리할 수 있습니다. 또는 클러스터가 잠시 동안만 요청을 처리해야 하는 경우 임시 클러스터라고도 하는 작업별 클러스터를 사용하면 됩니다. 또한 임시 클러스터의 비용 효율성이 장기 클러스터보다 높을 수 있습니다.
임시 클러스터를 사용하는 경우 토폴로지 구성 수정을 방지하려면 클러스터를 같은 영역에서 같은 이름으로 다시 만들어야 합니다. 같은 영역과 이름을 사용하면 임시 클러스터를 만들 때 Knox에서 마스터 노드 내부 DNS 이름을 사용하여 요청을 투명하게 라우팅할 수 있습니다.
HS2는 Apache Hive에서 수행한 사용자 쿼리를 처리합니다. Hadoop 맵리듀스 엔진, Apache Tez, Apache Spark와 같은 다양한 실행 엔진을 사용하도록 HS2를 구성할 수 있습니다. 이 문서에서 HS2는 Apache Tez 엔진을 사용하도록 구성되어 있습니다.
Spark SQL은 Apache Spark의 모듈로, Apache Spark에서 SQL 쿼리를 실행하는 JDBC/ODBC 인터페이스가 포함되어 있습니다. 앞의 아키텍처 다이어그램에서 Spark SQL은 사용자 쿼리를 처리하는 대체 옵션으로 표시됩니다.
처리 엔진인 Apache Tez 또는 Apache Spark는 YARN Resource Manager를 호출하여 클러스터 작업자 머신에서 엔진 DAG를 실행합니다. 마지막으로 클러스터 작업자 머신이 데이터에 액세스합니다. Dataproc 클러스터에 데이터를 저장하고 액세스하려면 Hadoop 분산 파일 시스템(HDFS)이 아닌 Cloud Storage 커넥터를 사용합니다. Cloud Storage 커넥터 사용 이점에 대한 자세한 내용은 Cloud Storage 커넥터 문서를 참조하세요.
위 아키텍처 다이어그램에서는 요청을 Apache Hive로 전달하는 Apache Knox 토폴로지와 요청을 Spark SQL로 전달하는 다른 토폴로지를 보여줍니다. 또한 이 다이어그램에서는 요청을 동일하거나 다른 백엔드 클러스터의 서비스에 전달할 수 있는 다른 토폴로지도 보여줍니다. 백엔드 서비스는 여러 가지 데이터 세트를 처리할 수 있습니다. 예를 들어 Hive 인스턴스 하나는 제한된 사용자 집합의 개인 식별 정보(PII)에 대한 액세스를 제공할 수 있습니다. 반면 다른 Hive 인스턴스는 더욱 광범위한 소비의 비PII 데이터에 대한 액세스를 제공할 수 있습니다.
사용자 승인
Hadoop 서비스에 세분화된 승인을 제공하도록 Apache Ranger를 백엔드 클러스터에 설치할 수 있습니다. 아키텍처에서 Hive용 Ranger 플러그인은 사용자 요청을 가로채고 Ranger 정책에 따라 사용자가 Hive 데이터에 대한 작업을 수행하도록 허용됐는지 여부를 결정합니다.
관리자는 Ranger 관리자 페이지를 사용하여 Ranger 정책을 정의합니다. Ranger가 이러한 정책을 외부 Cloud SQL 데이터베이스에 저장하도록 구성하는 것이 좋습니다. 정책을 외부화하면 다음과 같은 두 가지 이점이 있습니다.
- 백엔드 클러스터가 삭제된 경우 정책을 영구 보존합니다.
- 이 정책을 사용하면 모든 그룹 또는 백엔드 클러스터 커스텀 그룹의 정책을 중앙에서 관리할 수 있습니다.
Ranger 정책을 올바른 사용자 ID나 그룹에 할당하려면 Ranger가 Knox가 연결된 동일한 디렉터리에서 ID를 동기화하도록 구성해야 합니다. 기본적으로 Ranger에서 사용하는 사용자 ID는 운영체제에서 가져옵니다.
또한 Apache Ranger는 감사 로그를 Cloud Storage로 외부화하여 영구 보존할 수 있습니다. Ranger는 감사 로그를 검색할 수 있도록 Apache Solr을 색인 생성 및 쿼리 엔진으로 사용합니다.
HiveServer2와 달리 Spark SQL은 공식 Ranger 플러그인을 지원하지 않으므로 승인을 관리하려면 Apache Knox에서 사용할 수 있는 대략적인 ACL을 사용해야 합니다. 이러한 ACL을 사용하려면 서비스의 해당 토폴로지 설명자에서 Spark SQL 또는 Hive와 같은 각 서비스를 사용할 수 있는 LDAP ID를 추가합니다.
자세한 내용은 Dataproc에서 Apache Ranger 사용 권장사항을 참조하세요.
고가용성
Dataproc은 고가용성(HA) 모드를 제공합니다. 이 모드에는 마스터 노드로 구성된 머신이 여러 개 있으며 그 중 하나가 활성 상태입니다. 이 모드를 사용하면 단일 노드 실패나 재부팅에도 불구하고 중단 없는 YARN 및 HDFS 작업이 허용됩니다.
하지만 마스터 노드가 실패하면 단일 진입점 외부 IP가 변경되므로 BI 도구 연결을 다시 구성해야 합니다. HA 모드에서 Dataproc을 실행하는 경우 외부 HTTP(S) 부하 분산기를 진입점으로 구성해야 합니다. 부하 분산기는 클러스터 마스터 노드를 번들로 제공하는 비관리형 인스턴스 그룹으로 요청을 라우팅합니다. 부하 분산기의 대안으로 대신 round-robin DNS 기술을 적용할 수 있습니다. 하지만 이 방식에는 단점이 있습니다. 이 문서에서는 이러한 구성을 다루지 않습니다.
또한 Cloud SQL은 고가용성 모드를 제공합니다. 이 모드에서는 데이터 중복을 통해 마스터 인스턴스와 다른 영역에 있는 대기 인스턴스 간에 동기식 복제가 가능합니다. 인스턴스 또는 영역에 장애가 발생하면 이 구성은 다운타임을 줄입니다. 단, HA가 구성된 인스턴스에는 독립형 인스턴스 가격의 두 배에 해당하는 요금이 청구됩니다.
Cloud Storage는 Datastore 역할을 합니다. Cloud Storage 가용성에 대한 자세한 내용은 스토리지 클래스 설명을 참조하세요.
네트워킹
계층화된 네트워크 아키텍처에서 프록시 클러스터는 경계 네트워크에 있습니다. 백엔드 클러스터는 프록시 클러스터에서 들어오는 트래픽만 허용하는 방화벽 규칙으로 보호되는 내부 네트워크에 있습니다.
프록시 클러스터는 외부 요청에 노출되므로 다른 클러스터와 격리됩니다. 방화벽 규칙은 제한된 소스 IP 주소 세트만 프록시 클러스터에 액세스하도록 허용합니다. 이 경우 방화벽 규칙은 BI 도구의 주소에서 오는 요청만 허용합니다.
계층화된 네트워크 구성은 이 문서 범위를 벗어납니다. Google Cloud에서 실행되는 Hadoop에 시각화 소프트웨어 연결 가이드 전체에서는 default
네트워크를 사용합니다. 계층화된 네트워크 설정에 대한 자세한 내용은 VPC 네트워크 보안 권장사항 및 다중 네트워크 인터페이스 구성 방법의 개요와 예시를 참조하세요.
다음 단계
- 이 시리즈의 2부인 Google Cloud에서 실행되는 Hadoop에 시각화 소프트웨어 연결을 읽고 Google Cloud에서 아키텍처를 설정하는 방법 알아보기
- 이러한 Terraform 구성 파일을 사용하여 Google Cloud에서 아키텍처 설정
- Dataproc에서 Apache Ranger 사용 권장사항을 읽어봅니다.
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항을 살펴봅니다. Cloud 아키텍처 센터 살펴보기