AWS Data Pipeline에서 데이터베이스 자격 증명을 숨기거나 암호화하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 3월 19일

AWS Data Pipeline에서 데이터베이스 자격 증명을 숨기거나 암호화하려고 합니다.

간략한 설명

Data Pipeline은 전송 시 데이터베이스 자격 증명을 암호화합니다. 그러나 내보내는 동안 파이프라인에 액세스하면 파이프라인 JSON 정의 암호를 볼 수 있습니다.

다음 중 하나를 수행하면 파이프라인에서 데이터베이스 자격 증명을 마스킹할 수 있습니다.

  • 태그를 생성하고 사용하여 AWS Identity and Access Management(IAM) 사용자가 암호를 볼 수 없도록 제한합니다.
  • 데이터베이스 자격 증명을 환경 변수로 내보내서 사용자 지정 Amazon Machine Image(AMI)를 생성합니다.
  • AWS Secrets Manager를 사용하여 파이프라인에 데이터베이스 암호를 저장합니다.

해결 방법

태그 지정

AWS IAM(AWS Identity Access Management) 사용자에게 태그를 기반으로 파이프라인에 대한 전체 또는 제한된 액세스 권한을 부여할 수 있습니다.

IAM 사용자가 암호를 볼 수 없도록 제한하려면 Describe, GetPipelineDefinition, QueryObjects와 같은 읽기 전용 Data Pipeline 작업의 사용을 허용하는 IAM 정책을 생성하고 연결합니다. 자세한 내용은 AWS Data Pipeline에 대한 정책의 예를 참조하세요.

사용자 지정 AMI

다음을 수행하여 파이프라인에서 데이터베이스 자격 증명을 보호할 수 있습니다.

1.    데이터베이스 사용자 이름과 암호를 Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스의 환경 변수로 내보냅니다. 다음 명령을 실행하여 데이터베이스 자격 증명을 Amazon EC2 인스턴스에서 환경 변수로 내보냅니다.

sudo vi /etc/profile
export USERNAME=awsuser
export PASSWORD=

2.    Amazon EC2 인스턴스에서 사용자 지정 AMI를 생성합니다.

3.    PostgreSQL 연결 메서드에서 이 변수를 데이터베이스 인스턴스에 ShellCommandActivity로 전달합니다. Data Pipeline Architect를 사용하여 다음 ShellCommandActivity를 정의합니다.

psql "host=redshiftendpoint port=5439 dbname=Dbname user=$USERNAME password=$PASSWORD" -c "select 1;"

자세한 내용은 AWS Data Pipeline Architect를 사용하여 활동 정의를 참조하세요.

AWS Secrets Manager

파이프라인에서 데이터베이스 자격 증명을 암호화하는 가장 안전한 방법은 다음을 수행하는 것입니다.

  1. AWS Secrets Manager를 사용하여 암호를 저장합니다.
  2. PostgreSQL을 설치하여 Redshift 데이터베이스 인스턴스에 연결하거나 SQL Workbench를 설치하여 다른 데이터베이스 인스턴스에 연결합니다.

AWS Secrets Manager를 사용하여 암호를 환경 변수로 저장할 수 있습니다. 그런 다음 PostgreSQL 연결 메서드에서 이 변수를 데이터베이스 인스턴스에 ShellCommandActivity로 전달할 수 있습니다. 자세한 내용은 psql 도구를 사용하여 클러스터에 연결을 참조하세요.

1.    AWS Secrets Manager에 Redshift 데이터베이스 자격 증명을 생성하고 저장합니다.

2.    다음 정책을 DatapipelineDefaultResource 역할을 연결하여 AWS Secret Manager에 저장된 보안 암호에 대한 열거/읽기 액세스 권한을 부여합니다.

{
"Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SecretPolicytoretrievesecretvalue",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:1111222233334444:secret:mysecret/secret-10aaPx"
        }
    ]
}

위의 정책을 다음과 같이 수정합니다.

  • us-east-1: 보안 암호가 존재하는 리전
  • 1111222233334444: 해당 AWS 계정 ID
  • mysecret: 가상 폴더의 이름
  • secret-10aaPx: 보안 암호의 이름

3.    Data Pipeline Architect를 사용하여 다음 ShellCommandActivity를 정의합니다.

sudo yum -y install aws-cli jq postgresql95-server.x86_64 postgresql95-contrib.x86_64 postgresql95.x86_64 postgresql95-libs.x86_64 && export USERNAME=`aws secretsmanager get-secret-value --secret-id mysecret/secret --region regionname | jq -r '.SecretString' | cut -f4 -d \"\\\"\"` && export AWS_REGION=region_name && export PASSWORD=`aws secretsmanager get-secret-value --secret-id mysecret/secret --region region_name | jq -r '.SecretString' | cut -f8 -d \"\\\"\"` && psql "host=redshiftendpointname port=5439 dbname=sampledbname user=$USERNAME password=$PASSWORD" -c "select 1";

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?