AWS 기술 블로그
Amazon Redshift와 Keycloak을 활용한 사설망 내 중앙 집중화된 사용자 인증 및 권한 관리 – 솔루션 개요 및 환경 준비
안내
이 글은 총 5개의 이어지는 글로 구성된 Amazon Redshift와 Keycloak을 활용한 사설망 내 중앙 집중화된 사용자 인증 및 권한 관리 시리즈의 첫번째 글에 해당됩니다. 사설망에서 ID Federation을 통하여 Amazon Redshift를 연결, 사용하고 상세 수준 권한관리를 하시려는 독자분들께서는 시리즈의 첫번째 글 부터 순서대로 읽으시며 실습을 겸하시면 필요한 구성을 성공적으로 진행하실 수 있습니다.
- 글 1 : 솔루션 개요 및 환경 준비
- 글 2 : 사설망 내 Amazon Redshift 클러스터 생성 및 PrivateLink 구성
- 글 3 : ID 페더레이션 구성
- 글 4 : Amazon Redshift JDBC 드라이버 구성 및 ID 페더레이션 실행
- 글 5 : Amazon Redshift와 Keycloak를 활용한 스키마와 사용자 권한 관리
들어가며
기업의 IT 환경은 지난 몇 년간 급격히 복잡해졌습니다. 이러한 변화의 주요 원인으로는 클라우드 컴퓨팅의 광범위한 도입, 원격 근무의 일상화, 그리고 다양한 비즈니스 애플리케이션의 확산을 들 수 있습니다. 클라우드 서비스 사용이 증가하면서 기업의 데이터와 리소스가 더 이상 단일 물리적 위치에 국한되지 않게 되었고, 이는 접근 관리의 복잡성을 크게 증가시켰습니다. 또한, COVID-19 팬데믹 이후 원격 근무가 새로운 표준이 되면서, 기업은 다양한 위치와 단말에서의 안전한 접근을 보장해야 했습니다. 이와 더불어, 직원들이 업무를 위해 사용하는 애플리케이션의 수가 급증하면서, 각 애플리케이션에 대한 접근 권한을 개별적으로 관리하는 것이 점점 더 어려워졌습니다.
이러한 복잡한 IT 환경에서 IAM(Identity and Access Management) 솔루션의 필요성이 더욱 부각되고 있습니다. IAM은 이러한 복잡성을 효과적으로 관리할 수 있는 중앙집중식 접근 관리 시스템을 제공하기 때문에 다양한 환경에서 일관된 보안 정책을 적용하고, 사용자 인증과 권한 부여를 효율적으로 관리할 수 있습니다.
그리고 최근 저희는 온프레미스 IAM 솔루션을 활용하여 Amazon Redshift에 대규모 데이터 웨어하우스를 구축하는 기업 고객들을 지원했습니다. 이 고객들의 주요 요구사항은 개인정보와 신용정보를 다루는 데이터 사용자들이 인터넷 접근이 제한된 환경에서 기업 자격 증명을 통해 Amazon Redshift를 이용하는 것이었습니다. 이러한 접근 방식은 기업 내부망 사용자들이 기존 사용자 계정으로 Amazon Redshift에 안전하게 접근할 수 있게 할 뿐만 아니라, 중앙 집중식 권한 관리, 그리고 보안 정책의 효율적인 적용을 가능하게 하여 전반적인 보안 거버넌스 수준을 크게 향상시킵니다.
이 글에서는 세 가지 주요 주제를 다룰 예정입니다. 첫째, 인터넷과 격리된 네트워크 환경에서 AWS 외부에 구축된 IAM 솔루션을 이용해 Amazon Redshift에 접근하는 아키텍처를 살펴보겠습니다. 둘째, 이 아키텍처 구현을 위해 오픈 소스 IAM 솔루션인 Keycloak을 활용하여 Amazon Redshift와 연동하는 과정을 상세히 설명하겠습니다. 마지막으로, Amazon IAM과 AWS Lake Formation을 통해 보안 주체와 데이터에 대한 권한을 역할 기반 접근 제어로 효과적으로 관리하는 방법을 제시하겠습니다.
솔루션 개요: 인터넷이 제한된 환경에서 AWS 외부 자격 증명 공급자를 통해 Amazon Redshift를 활용하는 방법
다음 아키텍처는 하이브리드 클라우드 모델에서 온프레미스 클라이언트 단말이 IAM 솔루션을 활용하여 프라이빗 서브넷(Private subnet)에 배포한 Amazon Redshift 클러스터 또는 Amazon Redshift 서버리스 작업 그룹에 액세스하는 방식을 보여 줍니다. 이것은 SAML 2.0 페더레이션 사용자가 AWS 관리 콘솔(Management Console)에 액세스하는 방법과 유사합니다.
이 아키텍처는 다음과 같은 핵심 구성 요소로 이루어져 있습니다.
- 전용선 연결: 온프레미스와 클라우드 간 안전하고 안정적인 전용 네트워크 환경을 AWS Direct Connect로 구성합니다.
- Amazon VPC와 프라이빗 서브넷: 격리된 가상 네트워크 환경을 만들고 인터넷에 직접 연결되지 않는 서브넷을 생성합니다.
- AWS 서비스 VPC 엔드포인트: Amazon Redshift에 접속하는 페더레이션 사용자에게 필요한 모든 AWS 서비스에 대해 프라이빗 연결을 구성합니다.
- Amazon Redshift 클러스터 엔드포인트: 클라이언트에서 Amazon Redshift 클러스터 또는 서버리스 작업 그룹에 연결하기 위한 주소입니다. 클라이언트는 Amazon Redshift JDBC 드라이버를 통해 비공개로 접속 할 수 있으며, Amazon Redshift 클러스터 엔드포인트는 보안 그룹으로 보호됩니다. 또한 향상된 VPC 라우팅 기능을 사용해서 VPC의 클러스터와 Amazon S3 사이의 트래픽이 Amazon VPC를 벗어나지 않게 구성할 수 있습니다.
- 자격 증명 공급자(IdP): AWS 외부에서 사용자 인증을 관리하고 싱글 사인온(Single Sign-On, SSO)을 지원하는 IAM 솔루션입니다. AD FS(Active Directory Federation Service), Okta 등이 대표적이며 이 글에서는 오픈 소스 IAM 솔루션인 Keycloak을 사용합니다.
- DNS 구성: 온프레미스 네트워크에서 VPC에 대한 DNS 쿼리(예: Amzaon Redshift JDBC URL, AWS STS의 프라이빗 DNS 이름 등)를 허용하려면 AWS에 인바운드 Resolver 엔드포인트를 구성해야 합니다.
- 사용자 또는 시스템 단말: Amazon Redshift 데이터베이스에 액세스하는 주체로 Amazon Redshift JDBC 또는ODBC 드라이버, Python커넥터를 사용해서 싱글 사인온으로 Amazon Redshift에 액세스 합니다.
그림 1: 하이브리드 클라우드 모델에서 온프레미스 클라이언트가 AWS 외부 자격 증명을 사용하여 Amazon Redshift에 액세스하는 하이-레벨 아키텍처
먼저, 온프레미스 네트워크와 AWS 클라우드를 전용선으로 연결하여 인터넷으로부터 격리된 데이터 사용자가 VPC에 안전하게 접속할 수 있는 환경을 구축합니다.(그림 1의 1) 그리고 VPC에 프라이빗 서브넷을 생성하고(그림 1의 2), 이를 인터넷 게이트웨이나 NAT 게이트웨이로의 라우팅이 없는 라우팅 테이블과 연결합니다. 프라이빗 서브넷에는 Amazon Redshift 엔드포인트를 비롯하여 Amazon Redshift를 비공개로 사용하기 위한 AWS 서비스 엔드포인트를 생성하고(그림 1의 3), Amazon Redshift 클러스터 또는 서버리스 작업 그룹을 배포합니다.(그림 1의 4) 이러한 구성을 통해 온프레미스 데이터 사용자는 클라이언트 도구에서 AWS 서비스 엔드포인트와 Amazon Redshift 클러스터 엔드포인트를 이용하여 Amazon Redshift에 프라이빗하게 접근할 수 있습니다.(그림 1의 6과 7) 더불어, 기존 IAM 솔루션(그림 1의 5)을 활용하여 Amazon Redshift에 연결하기 때문에 데이터 사용자들은 다른 정보 시스템에 접속하는 것과 동일한 경험으로 Amazon Redshift를 편리하게 이용할 수 있습니다. 이는 데이터 보안을 강화하면서도 사용자 편의성을 높이는 효과적인 방법입니다.
Amazon Redshift에 액세스 하기 위한 인증 및 인가 흐름
Amazon Redshift에 접근하는 가장 기본적인 방법은 사용자 이름과 암호로 로그인하는 것입니다. 그러나 Amazon Redshift는 이러한 전통적인 방식 외에도 AWS IAM 권한 정책을 활용한 인증 방식을 제공합니다. 이를 통해 사용자 이름과 비밀번호를 Amazon Redshift에 직접 저장하지 않고도 더욱 안전하고 효율적으로 Amazon Redshift에 접근할 수 있습니다.
인증 및 인가 개요
AWS IAM을 통한 데이터베이스 로그인은 AWS 프로파일, IAM 자격 증명, 또는 ID 페더레이션(자격 증명 공급자 연동, Identity provider federation) 방식으로 구현할 수 있습니다. 이 글에서는 AWS 외부 시스템에서 사용자 인증을 관리하고 이를 Amazon Redshift와 연동하는 ID 페더레이션 방식에 중점을 둡니다. 이 방식의 주요 이점은 다음과 같습니다.
- 일관된 사용자 경험: 데이터 사용자들은 기존의 기업 자격 증명으로 다른 서비스 제공자(Service Provider, SP, 예: 기존 사내 업무 시스템 등)에 접근하는 것과 동일한 방식으로 싱글 사인온을 통해 Amazon Redshift 클러스터에 접근할 수 있습니다.
- 중앙 집중식 ID 공급자를 통한 사용자 권한 관리: AWS IAM을 활용하여 온프레미스 사용자 계정 관리 체계와 통합하면서 AWS 서비스에 대한 접근 권한을 중앙에서 관리할 수 있습니다. 이 접근 방식은 일관된 보안 정책을 효율적으로 구현하고 유지하는 데 도움이 됩니다.
- 임시 보안 자격 증명: Amazon Redshift는 IAM 인증을 이용해서 임시 데이터베이스 자격 증명을 생성할 수 있는 메커니즘을 제공합니다. 이 임시 자격 증명은 제한된 시간 동안만 유효하기 때문에, 만약 유출되더라도 그 위험이 제한적입니다.
- 세분화된 접근 제어: AWS IAM 정책과 AWS Lake Formation 서비스를 활용하여 데이터 접근 권한을 정밀하게 관리할 수 있습니다. 이를 통해 클러스터, 데이터베이스, 스키마, 테이블은 물론 컬럼 수준에 이르기까지 사용자의 데이터 접근을 효과적으로 제어할 수 있습니다.
- 감사 및 규정 준수: 데이터베이스에 연결하는 사용자에 대한 신원 확인 과정과 데이터베이스에서 실행하는 작업이 AWS CloudTrail, Amazon CloudWatch 그리고 Amazon S3 버킷에 기록되기 때문에 데이터베이스에 대한 모니터링과 감사가 용이합니다.
ID 페더레이션을 통한 인증 및 인가 흐름
다음은 ID 페더레이션을 통해 임시 데이터베이스 자격 증명으로 Amazon Redshift로 로그인 하는 흐름을 설명합니다.
그림 2: 페더레이션 사용자가 Amazon Redshift에 싱글 사인온하는 흐름
- 비공개 네트워크 환경에서 온프레미스 데이터 사용자가 싱글 사인온으로 Amazon Redshift에 안전하게 접근할 수 있도록 다음 단계를 수행합니다. 먼저, AWS IAM과 외부 자격 증명 공급자 간에 SAML 2.0 기반 ID 페더레이션을 구성합니다. 이를 통해 사용자는 기존 자격 증명을 사용하여 Amazon Redshift에 접근할 수 있습니다. 다음으로 클라이언트 도구에서 자격 증명 공급자와의 연동 및 Amazon Redshift 연결을 위해 클라이언트 단말에 SAML 플러그인을 설치합니다. 이 플러그인은 Amazon Redshift JDBC 및 ODBC 드라이버에 기본적으로 포함되어 있습니다. SAML 플러그인 사용에 대한 자세한 내용은 다음을 통해 확인할 수 있습니다.
- 사용자는 SQL 클라이언트나 Python과 같은 클라이언트 도구를 사용하여 Amazon Redshift JDBC 드라이버를 통해 Amazon Redshift에 연결을 요청합니다.
- 사용자는 기존 기업 자격 증명을 사용하여 자격 증명 공급자를 통해 인증합니다.
- 자격 증명 공급자는 사용자를 인증하고 사용자 인증 정보를 담은 SAML 인증 응답을 클라이언트의 SAML 플러그인으로 전송합니다.
- SAML 플러그인은 자격 증명 공급자로부터 받은 SAML 인증 응답을 사용하여 AWS STS(Security Token Service) 엔드포인트의 AssumeRoleWithSAML API를 호출합니다. 이 호출을 통해 AWS IAM으로부터 임시 보안 자격 증명을 획득합니다. 이 프로세스는 Amazon Redshift 클러스터의 배포 유형과 관계없이 동일하게 적용됩니다.
- AWS STS가 임시 보안 자격 증명(Temporary security credentials)을 생성하고 클라이언트에 반환합니다.
- 임시 보안 자격 증명을 획득한 클라이언트는 Amazon Redshift 클러스터에 접속하기 위한 임시 데이터베이스 자격 증명을 Amazon Redshift API 통해 요청합니다. 이 API 호출은 인터넷을 통한 호출도 가능하지만 인터넷으로부터 격리된 네트워크 환경에서는 Amazon Redshift 엔드포인트를 구성하여 API를 호출해야 합니다. Amazon Redshift 클러스터 배포 유형에 따른 Amazon Redshift 엔드포인트와 API는 아래 표를 참조하세요.
Amazon Redshift 클러스터 배포 유형 Amazon Redshift 엔드포인트 임시 데이터베이스 자격 증명 생성 API 서버리스 redshift-serverless.region-code.amazonaws.com redshift-serverless:GetCredentials 프로비저닝 클러스터 redshift.region-code.amazonaws.com redshift:GetClusterCredentialsWithIAM
redshift:GetClusterCredentials
- Amazon Redshift API는 사용자가 Amazon Redshift 클러스터에 로그인할 수 있도록 임시 데이터베이스 자격 증명을 생성하여 클라이언트에 반환합니다.
- 클라이언트는 임시 데이터베이스 자격 증명을 사용해서 Amazon Redshift 클러스터에 연결합니다.
이와 같이 Amazon Redshift와 AWS 외부의 자격 증명 공급자는 비공개 네트워크 환경에서 ID 페더레이션이 가능하기 때문에 기업은 기존의 사용자 계정 관리 체계를 유지할 수 있게 되고, 데이터베이스 사용자는 기존 서비스와 동일한 사용자 경험으로 Amazon Redshift를 사용할 수 있습니다.
Amazon Redshift와 Keycloak을 활용한 ID 페더레이션 단계별 가이드
이 섹션에서는 ID 페더레이션 구축 과정을 단계별로 안내합니다. 구성을 간소화하기 위해 모든 필요한 리소스를 AWS 클라우드에 배포할 것입니다. 자격 증명 공급자로는 오픈 소스이며 SAML 2.0과 호환되는 IAM 솔루션인 Keycloak을 사용합니다.
ID 페더레이션 구축 과정 요약
- ID 페더레이션으로 Amazon Redshift 클러스터에 접속하기 위한 윈도우 인스턴스를 생성하고 클라이언트 도구를 설치합니다.
- AWS 외부 자격 증명 공급자로 Keycloak을 활용하기 위해 리눅스 인스턴스에 Keycloak을 설치하고 Amazon Redshift 클러스터에 ID 페더레이션으로 접속할 사용자 계정을 생성합니다.
- Amazon Redshift 클러스터 또는 서버리스 작업 그룹을 생성하고 Amazon Redshift 엔드포인트를 생성합니다.
- ID 페더레이션으로 Amazon Redshift 클러스터에 접속하고, Amazon Redshift의 주요 기능인 Amazon Redshift Spectrum을 사용하기 위한 AWS 서비스들을 VPC 엔드포인트로 연결합니다.
- AWS IAM과 자격 증명 공급자에서 ID 페더레이션을 구성합니다.
- SQL 클라이언트에서 ID 페더레이션을 실행합니다.
그림 3: Keycloak 자격 증명 공급자를 활용한 ID 페더레이션 구축 단계
단계 1: 사용자 단말 생성 및 클라이언트 도구 설치
1.1. 클라이언트용 프라이빗 서브넷에 Amazon EC2 윈도우 인스턴스를 배포하고, SQL Workbench/J나 Python과 같은 SQL 클라이언트를 설치합니다.
1.2. Keycloak 자격 증명 공급자 페더레이션과 Amazon Redshift와 연결하기 위해 윈도우 인스턴스에 Amazon Redshift JDBC, ODBC 드라이버 또는 Python 커넥터를 설치합니다. Amazon Redshift JDBC 드라이버는 다양한 자격 증명 공급자와 ID 페더레이션을 지원하는 SAML 플러그인을 포함하고 있습니다. 이 글에서는 Keycloak과의 SAML 페더레이션을 위해 브라우저 SAML 플러그인을 사용합니다. 그리고 Keycloak으로부터 SAML 인증 응답을 받는 과정을 원활히 수행하기 위해 윈도우의 기본 브라우저를 파이어폭스로 설정하고 SAML 인증 응답을 확인할 수 있도록 SAML-tracer 플러그인을 설치할 것을 권장합니다.
단계 2: Keycloak 설치 및 페더레이션 사용자 계정 생성
Amazon EC2 리눅스 인스턴스에 Keycloak을 설치하고 페더레이션 사용자 계정을 생성합니다. 그리고 Keycloak 인증 시스템이 올바르게 구성되었는지 검증하기 위해 윈도우 인스턴스에서 사용자 계정으로 로그인합니다.
2.1. 자격 증명 공급자용 프라이빗 서브넷에 Keycloak을 실행할 리눅스 인스턴스를 배포합니다.
2.2. 리눅스 인스턴스에 관리자로 접속해서 Keycloak을 설치합니다.
2.2.1. Java runtime을 설치합니다.
2.2.2. Keycloak 다운로드합니다.
2.2.3. HTTPS 통신을 위해 자체 서명된 인증서와 개인 키를 생성합니다.인증서 생성 시 Common Name은 현재 Keycloak을 설치하고 있는 리눅스 인스턴스의 프라이빗 IP DNS 이름을 입력합니다.
2.2.4. Keycloak 관리자 이름 및 비밀번호를 정의합니다.
2.2.5. HTTPS 프로토콜, 8081 포트로 Keycloak 서비스를 실행합니다.
2.3. Keycloak에 새로운 Realm과 페더레이션 사용자 계정을 생성합니다.
2.3.1. 윈도우 인스턴스에서 Keycloak 관리 콘솔 접속에 접속합니다.
2.3.2. Keycloak에 새로운 Realm을 생성합니다.
– Realm 명 : 이 글에서는 AWS-IAM-IDP를 사용합니다.
2.3.3. 새로 생성한 Realm에 Amazon Redshift 클러스터에 접속할 페더레이션 사용자 계정을 만듭니다.
– Username: redshift.admin
– Email: redshift.admin@mycompany.local
redshift.admin 사용자는 ‘Amazon Redshift와 Keycloak를 활용한 스키마와 사용자 권한 관리’ 섹션에서 Amazon Redshift 클러스터의 스키마 관리자 역할을 위임 받습니다.
2.3.4. Realm에 사용자 그룹을 만들고 앞서 생성한 사용자 계정을 그룹에 추가합니다.
– Group Name : redshift.admin.group
2.3.5. 윈도우 인스턴스에서 Keycloak에서 생성한 사용자 계정이 정상적으로 로그인할 수 있는지 확인합니다.
** 다음 글로 이어집니다.