기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
계정 간에 Amazon Redshift 클러스터에서 Amazon S3로 데이터 언로드
작성자: Andrew Kamel(AWS)
코드 리포지토리: aws-unload-redshift-to-s3-python | 환경: 프로덕션 | 기술: 데이터베이스, 분석, 서버리스 |
워크로드: 오픈 소스 | AWS 서비스: AWS Lambda, Amazon Redshift, Amazon S3, AWS Secrets Manager |
요약
애플리케이션을 테스트할 때는 테스트 환경에 프로덕션 데이터를 두는 것이 좋습니다. 프로덕션 데이터를 사용하면 개발 중인 애플리케이션을 보다 정확하게 평가할 수 있습니다.
이 패턴은 프로덕션 환경의 Amazon Redshift 클러스터에서 Amazon Web Services()의 개발 환경의 Amazon Simple Storage Service(Amazon S3) 버킷으로 데이터를 추출합니다AWS.
패턴은 다음을 포함하여 DEV 및 PROD 계정의 설정을 단계별로 수행합니다.
필수 리소스
AWS Identity and Access Management (IAM) 역할
Amazon Redshift 연결을 지원하기 위한 서브넷, 보안 그룹 및 가상 프라이빗 클라우드(VPC)에 대한 네트워크 조정
아키텍처를 테스트하기 위한 Python 런타임이 있는 AWS Lambda 함수 예제
Amazon Redshift 클러스터에 대한 액세스 권한을 부여하기 위해 패턴은 를 사용하여 관련 자격 증명을 AWS Secrets Manager 저장합니다. 이점은 Amazon Redshift 클러스터의 위치를 알 필요 없이 Amazon Redshift 클러스터에 직접 연결하는 데 필요한 모든 정보를 확보하는 것입니다. 또한 보안 암호의 사용을 모니터링할 수 있습니다.
Secrets Manager에 저장된 보안 암호에는 Amazon Redshift 클러스터의 호스트, 데이터베이스 이름, 포트 및 관련 보안 인증 정보가 포함됩니다.
이 패턴을 사용할 때의 보안 고려 사항에 대한 자세한 내용은 모범 사례 섹션을 참조하세요.
사전 조건 및 제한 사항
사전 조건
PROD 계정에서 실행되는 Amazon Redshift 클러스터
DEV 계정에 생성된 S3 버킷
DEV 및 PROD 계정 간VPC 피어링, 그에 따라 라우팅 테이블 조정
피어링된 둘 다DNS에 대해 활성화된 호스트 이름 및 DNS 확인 VPCs
제한 사항
쿼리할 데이터의 양에 따라 Lambda 함수가 시간 초과될 수 있습니다.
실행에 최대 Lambda 제한 시간(15분)보다 많은 시간이 걸리는 경우 Lambda 코드에 비동기식 접근 방식을 사용합니다. 이 패턴의 코드 예제는 현재 비동기 처리를 지원하지 않는 Python용 psycopg2
라이브러리를 사용합니다. 일부 AWS 서비스 는 일부 에서 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 서비스 리전별 섹션을
참조하세요. 특정 엔드포인트는 서비스 엔드포인트 및 할당량 페이지를 참조하고 서비스의 링크를 선택합니다.
아키텍처
다음 다이어그램은 DEV 및 PROD 계정이 있는 대상 아키텍처를 보여줍니다.
이 다이어그램은 다음 워크플로를 보여줍니다.
DEV 계정의 Lambda 함수는 PROD 계정의 Secrets Manager에서 Amazon Redshift 보안 인증 정보에 액세스하는 데 필요한 IAM 역할을 수임합니다.
그러면 Lambda 함수가 Amazon Redshift 클러스터 보안 암호를 검색합니다.
DEV 계정의 Lambda 함수는 정보를 사용하여 피어링된 를 통해 PROD 계정의 Amazon Redshift 클러스터에 연결합니다VPCs.
그런 다음 Lambda 함수는 PROD 계정의 Amazon Redshift 클러스터를 쿼리하기 위해 언로드 명령을 보냅니다.
PROD 계정의 Amazon Redshift 클러스터는 DEV 계정의 S3 버킷에 액세스하는 관련 IAM 역할을 맡습니다.
Amazon Redshift 클러스터는 쿼리된 데이터를 DEV 계정의 S3 버킷으로 언로드합니다.
Amazon Redshift에서 데이터 쿼리
다음 다이어그램은 Amazon Redshift 자격 증명을 검색하고 Amazon Redshift 클러스터에 연결하는 데 사용되는 역할을 보여줍니다. 워크플로는 Lambda 함수에 의해 시작됩니다.
이 다이어그램은 다음 워크플로를 보여줍니다.
DEV 계정
CrossAccount-SM-Read-Role
의 는 PROD 계정SM-Read-Role
의 를 수임합니다.SM-Read-Role
역할은 연결된 정책을 사용하여 Secrets Manager에서 보안 암호를 검색합니다.자격 증명은 Amazon Redshift 클러스터에 액세스하는 데 사용됩니다.
Amazon S3에 데이터 업로드
다음 다이어그램은 데이터를 추출하고 Amazon S3에 업로드하기 위한 교차 계정 읽기-쓰기 프로세스를 보여줍니다. 워크플로는 Lambda 함수에 의해 시작됩니다. 패턴은 Amazon Redshift 의 IAM 역할을 연결합니다. Amazon Redshift 클러스터에서 오는 언로드 명령은 를 수임CrossAccount-S3-Write-Role
한 다음 를 수임합니다S3-Write-Role
. 이 역할 체인을 통해 Amazon Redshift는 Amazon S3에 액세스할 수 있습니다.
워크플로에는 다음 단계가 포함됩니다.
DEV 계정
CrossAccount-SM-Read-Role
의 는 PROD 계정SM-Read-Role
의 를 수임합니다.는 Secrets Manager에서 Amazon Redshift 보안 인증을
SM-Read-Role
검색합니다.Lambda 함수는 Amazon Redshift 클러스터에 연결하고 쿼리를 전송합니다.
Amazon Redshift 클러스터는 를 수임합니다
CrossAccount-S3-Write-Role
.는 DEV 계정
S3-Write-Role
에서 를CrossAccount-S3-Write-Role
수임합니다.쿼리 결과는 DEV 계정의 S3 버킷으로 언로드됩니다.
도구
AWS 서비스
AWS Key Management Service (AWS KMS)는 암호화 키를 생성하고 제어하여 데이터를 보호하는 데 도움이 됩니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
Amazon Redshift는 AWS 클라우드의 관리형 페타바이트 규모 데이터 웨어하우스 서비스입니다.
AWS Secrets Manager 는 암호를 포함하여 코드의 하드코딩된 보안 인증 정보를 Secrets Manager에 프로그래밍 방식으로 검색하라는 API 호출로 대체하는 데 도움이 됩니다.
Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
코드 리포지토리
이 패턴의 코드는 GitHub unload-redshift-to-s3-python
모범 사례
보안 면책 조항
이 솔루션을 구현하기 전에 다음과 같은 중요한 보안 권장 사항을 고려하세요.
개발 및 프로덕션 계정을 연결하면 범위가 증가하고 전반적인 보안 태세가 저하될 수 있습니다. 이 솔루션을 일시적으로만 배포하고 필요한 데이터 부분을 추출한 다음 배포된 리소스를 즉시 폐기하는 것이 좋습니다. 리소스를 폐기하려면 Lambda 함수를 삭제하고, 이 솔루션에 대해 생성된 IAM 역할 및 정책을 제거하고, 계정 간에 부여된 네트워크 액세스를 취소해야 합니다.
프로덕션 환경에서 개발 환경으로 데이터를 복사하기 전에 보안 및 규정 준수 팀에 문의하세요. 개인 식별 정보(PII), 보호 대상 건강 정보(PHI) 및 기타 기밀 또는 규제 데이터는 일반적으로 이러한 방식으로 복사해서는 안 됩니다. 공개적으로 사용할 수 있는 기밀이 아닌 정보(예: 매장 프런트엔드의 퍼블릭 주식 데이터)만 복사합니다. 가능하면 프로덕션 데이터를 사용하는 대신 데이터를 토큰화하거나 익명화하거나 합성 테스트 데이터를 생성하는 것을 고려해 보세요. AWS 보안 원칙 중 하나는 데이터로부터 사람들을 보호하는 것입니다. 즉, 개발자는 프로덕션 계정에서 작업을 수행해서는 안 됩니다.
개발 계정에서 Lambda 함수에 대한 액세스를 제한합니다. 프로덕션 환경에서 Amazon Redshift 클러스터에서 데이터를 읽을 수 있기 때문입니다.
프로덕션 환경이 중단되지 않도록 다음 권장 사항을 구현합니다.
테스트 및 개발 활동에 별도의 전용 개발 계정을 사용합니다.
엄격한 네트워크 액세스 제어를 구현하고 계정 간 트래픽을 필요한 것으로만 제한합니다.
프로덕션 환경 및 데이터 소스에 대한 액세스를 모니터링하고 감사합니다.
관련된 모든 리소스 및 서비스에 대해 최소 권한 액세스 제어를 구현합니다.
AWS Secrets Manager 보안 암호 및 IAM 역할 액세스 키와 같은 자격 증명을 정기적으로 검토하고 교체하세요.
이 문서에서 사용되는 서비스에 대한 다음 보안 설명서를 참조하세요.
프로덕션 데이터 및 리소스에 액세스할 때 보안이 최우선 순위입니다. 항상 모범 사례를 따르고, 최소 권한 액세스 제어를 구현하고, 보안 조치를 정기적으로 검토하고 업데이트합니다.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
Amazon Redshift 클러스터의 보안 암호를 생성합니다. | Amazon Redshift 클러스터의 보안 암호를 생성하려면 다음을 수행합니다.
| DevOps 엔지니어 |
Secrets Manager에 액세스할 역할을 생성합니다. | 역할을 생성하려면 다음을 수행합니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
S3 버킷에 액세스할 역할을 생성합니다. | S3 버킷에 액세스하기 위한 역할을 생성하려면 다음을 수행합니다.
| DevOps 엔지니어 |
Amazon Redshift 역할을 생성합니다. | Amazon Redshift 역할을 생성하려면 다음을 수행합니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
Lambda 함수를 배포합니다. | 피어링된 에 Lambda 함수를 배포하려면 다음을 VPC수행합니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
필요한 리소스를 가져옵니다. | 필요한 리소스를 가져오려면 다음 명령을 실행합니다.
| 앱 개발자 |
Lambda 핸들러 함수를 실행합니다. | Lambda 함수는 계정 간 액세스 및 임시 자격 증명 관리에 AWS Security Token Service (AWS STS)를 사용합니다. 함수는 작업을 사용하여 AssumeRole API Lambda 함수를 실행하려면 다음 예제 코드를 사용합니다.
| 앱 개발자 |
보안 암호를 가져옵니다. | Amazon Redshift 보안 암호를 가져오려면 다음 예제 코드를 사용합니다.
| 앱 개발자 |
언로드 명령을 실행합니다. | 데이터를 S3 버킷으로 언로드하려면 다음 예제 코드를 사용합니다.
| 앱 개발자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
Lambda 함수를 삭제합니다. | 예기치 않은 비용이 발생하지 않도록 리소스와 DEV 및 PROD 계정 간의 연결을 제거합니다. Lambda 함수를 제거하려면 다음을 수행합니다.
| DevOps 엔지니어 |
IAM 역할 및 정책을 제거합니다. | DEV 및 PROD 계정에서 IAM 역할 및 정책을 제거합니다. DEV 계정에서 다음을 수행합니다.
PROD 계정에서 다음을 수행합니다.
| DevOps 엔지니어 |
Secrets Manager에서 보안 암호를 삭제합니다. | 보안 암호를 삭제하려면 다음을 수행합니다.
| DevOps 엔지니어 |
VPC 피어링 및 보안 그룹 규칙을 제거합니다. | VPC 피어링 및 보안 그룹 규칙을 제거하려면 다음을 수행합니다.
| DevOps 엔지니어 |
S3 버킷에서 데이터를 제거합니다. | Amazon S3에서 데이터를 제거하려면 다음을 수행합니다.
| DevOps 엔지니어 |
AWS KMS 키를 정리합니다. | 암호화를 위해 사용자 지정 AWS KMS 키를 생성한 경우 다음을 수행합니다.
| DevOps 엔지니어 |
Amazon CloudWatch 로그를 검토하고 삭제합니다. | CloudWatch 로그를 삭제하려면 다음을 수행합니다.
| DevOps 엔지니어 |
관련 리소스
추가 정보
Amazon Redshift에서 Amazon S3로 데이터를 언로드한 후 Amazon Athena 를 사용하여 데이터를 분석할 수 있습니다.
Amazon Athena는 대용량 데이터에 액세스해야 할 때 유용한 빅 데이터 쿼리 서비스입니다. 서버 또는 데이터베이스를 프로비저닝하지 않고도 Athena를 사용할 수 있습니다. Athena는 복잡한 쿼리를 지원하며 다양한 객체에서 실행할 수 있습니다.
대부분의 와 마찬가지로 Athena를 사용할 때 AWS 서비스얻을 수 있는 주요 이점은 복잡성을 추가하지 않고도 쿼리를 실행하는 방법에 뛰어난 유연성을 제공한다는 것입니다. Athena를 사용하는 경우 데이터 유형을 변경하지 않고 Amazon S3JSON에서 CSV 및 와 같은 다양한 데이터 유형을 쿼리할 수 있습니다. 외부 를 포함하여 다양한 소스에서 데이터를 쿼리할 수 있습니다 AWS. Athena는 서버를 관리할 필요가 없기 때문에 복잡성을 줄입니다. Athena는 쿼리를 실행하기 전에 데이터를 로드하거나 변경하지 않고 Amazon S3에서 직접 데이터를 읽습니다.