EMR Serverless를 사용하는 데이터 보호를 위한 Secrets Manager - Amazon EMR

EMR Serverless를 사용하는 데이터 보호를 위한 Secrets Manager

AWS Secrets Manager은(는) 데이터베이스 보안 인증, API 키 및 기타 보안 암호 정보를 보호하는 데 사용할 수 있는 보안 암호 저장소 서비스입니다. 그런 다음, 코드에서 하드코딩된 자격 증명를 Secrets Manager에 대한 API 직접 호출로 교체할 수 있습니다. 그러면 보안 암호가 해당 위치에 있지 않기 때문에 여러분의 코드를 검사하는 누군가에 의해 보안 암호가 손상되지 않도록 방지할 수 있습니다. 개요는 AWS Secrets Manager 사용 설명서를 참조하십시오.

Secrets Manager는 AWS Key Management Service키를 사용하여 보안 암호를 암호화합니다. 자세한 내용은 AWS Secrets Manager 사용 설명서의 보안 암호 암호화 및 복호화를 참조하세요.

사용자가 지정한 일정에 따라 Secrets Manager가 자동으로 보안 암호를 교체하도록 구성할 수 있습니다. 따라서 단기 보안 암호로 장기 보안 암호를 교체할 수 있어 손상 위험이 크게 줄어듭니다. 자세한 내용은 AWS Secrets Manager 사용 설명서에서 AWS Secrets Manager 보안 암호 교체를 참조하십시오.

Amazon EMR Serverless는 AWS Secrets Manager과 통합되므로 Secrets Manager에 데이터를 저장하고 구성에서 보안 암호 ID를 사용할 수 있습니다.

EMR Serverless에서 보안 암호를 사용하는 방법

Secrets Manager에 데이터를 저장하고 EMR Serverless에 대한 구성에서 보안 암호 ID를 사용하는 경우 민감한 구성 데이터를 일반 텍스트로 EMR Serverless에 전달하지 않고 외부 API에 노출하지 않습니다. 키-값 페어가 Secrets Manager에 저장한 보안 암호의 보안 암호 ID를 포함함을 나타내는 경우 EMR Serverless는 작업을 실행하기 위해 작업자로 구성 데이터를 전송할 때 보안 암호를 검색합니다.

구성의 키-값 페어가 Secrets Manager에 저장된 보안 암호에 대한 참조를 포함함을 나타내려면 구성 값에 EMR.secret@ 주석을 추가합니다. 보안 암호 ID 주석이 있는 구성 속성의 경우 EMR Serverless는 Secrets Manager를 직접 호출하고 작업 실행 시 보안 암호를 확인합니다.

보안 암호 생성 방법

보안 암호를 생성하려면 AWS Secrets Manager 사용 설명서에서 AWS Secrets Manager 보안 암호 생성의 단계를 따릅니다. 3단계에서 일반 텍스트 필드를 선택하여 민감한 값을 입력합니다.

구성 분류에서 보안 암호 제공

다음 예제에서는 StartJobRun의 구성 분류에서 보안 암호을 제공하는 방법을 보여줍니다. 애플리케이션 수준에서 Secrets Manager에 대한 분류를 구성하려면 EMR Serverless에 대한 기본 애플리케이션 구성 섹션을 참조하세요.

예제에서 SecretName을 검색할 보안 암호의 이름으로 바꿉니다. 하이픈과 Secrets Manager가 보안 암호 ARN 끝에 추가하는 6개의 문자를 포함합니다. 자세한 내용은 보안 암호 생성 방법 단원을 참조하십시오.

보안 암호 참조 지정 - Spark

예 - Spark에 대한 외부 Hive 메타스토어 구성에서 보안 암호 참조 지정
aws emr-serverless start-job-run \ --application-id "application-id" \ --execution-role-arn "job-role-arn" \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://amzn-s3-demo-bucket/scripts/spark-jdbc.py", "sparkSubmitParameters": "--jars s3://amzn-s3-demo-bucket/mariadb-connector-java.jar --conf spark.hadoop.javax.jdo.option.ConnectionDriverName=org.mariadb.jdbc.Driver --conf spark.hadoop.javax.jdo.option.ConnectionUserName=connection-user-name --conf spark.hadoop.javax.jdo.option.ConnectionPassword=EMR.secret@SecretName --conf spark.hadoop.javax.jdo.option.ConnectionURL=jdbc:mysql://db-host:db-port/db-name --conf spark.driver.cores=2 --conf spark.executor.memory=10G --conf spark.driver.memory=6G --conf spark.executor.cores=4" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket/spark/logs/" } } }'
예 - spark-defaults 분류에서 외부 Hive 메타스토어 구성에 대한 보안 암호 참조 지정
{ "classification": "spark-defaults", "properties": { "spark.hadoop.javax.jdo.option.ConnectionDriverName":"org.mariadb.jdbc.Driver" "spark.hadoop.javax.jdo.option.ConnectionURL":"jdbc:mysql://db-host:db-port/db-name" "spark.hadoop.javax.jdo.option.ConnectionUserName":"connection-user-name" "spark.hadoop.javax.jdo.option.ConnectionPassword": "EMR.secret@SecretName", } }

보안 암호 참조 지정 - Hive

예 - Hive에 대한 외부 Hive 메타스토어 구성에서 보안 암호 참조 지정
aws emr-serverless start-job-run \ --application-id "application-id" \ --execution-role-arn "job-role-arn" \ --job-driver '{ "hive": { "query": "s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql", "parameters": "--hiveconf hive.exec.scratchdir=s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/scratch --hiveconf hive.metastore.warehouse.dir=s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/warehouse --hiveconf javax.jdo.option.ConnectionUserName=username --hiveconf javax.jdo.option.ConnectionPassword=EMR.secret@SecretName --hiveconf hive.metastore.client.factory.class=org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory --hiveconf javax.jdo.option.ConnectionDriverName=org.mariadb.jdbc.Driver --hiveconf javax.jdo.option.ConnectionURL=jdbc:mysql://db-host:db-port/db-name" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket" } } }'
예 - hive-site 분류에서 외부 Hive 메타스토어 구성에 대한 보안 암호 참조 지정
{ "classification": "hive-site", "properties": { "hive.metastore.client.factory.class": "org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory", "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver", "javax.jdo.option.ConnectionURL": "jdbc:mysql://db-host:db-port/db-name", "javax.jdo.option.ConnectionUserName": "username", "javax.jdo.option.ConnectionPassword": "EMR.secret@SecretName" } }

EMR Serverless에서 보안 암호를 검색할 액세스 권한 부여

EMR Serverless가 Secrets Manager로부터 보안 암호 값을 검색할 수 있도록 하려면 생성 시 보안 암호에 다음 정책 명령문을 추가합니다. EMR Serverless가 보안 암호 값을 읽으려면 고객 관리형 KMS 키를 사용하여 보안 암호를 생성해야 합니다. 자세한 내용은 AWS Secrets Manager 사용 설명서의 KMS 키에 대한 권한을 참조하십시오.

다음 정책에서 applicationId를 애플리케이션의 ID로 바꿉니다.

보안 암호에 대한 리소스 정책

EMR Serverless에서 보안 암호 값을 검색할 수 있도록 AWS Secrets Manager에서 보안 암호에 대한 리소스 정책에 다음 권한을 포함해야 합니다. 특정 애플리케이션만 이 보안 암호를 검색할 수 있도록 하려면 선택적으로 정책의 조건으로 EMR Serverless 애플리케이션 ID를 지정할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Principal": { "Service": [ "emr-serverless.amazonaws.com" ] }, "Resource": [ "*" ], "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:emr-serverless:AWS 리전:aws_account_id:/applications/applicationId" } } } ] }

고객 관리형 AWS Key Management Service(AWS KMS) 키에 대해 다음 정책을 사용하여 보안 암호를 생성합니다.

고객 관리형 AWS KMS 키에 대한 정책

{ "Sid": "Allow EMR Serverless to use the key for decrypting secrets", "Effect": "Allow", "Principal": { "Service": [ "emr-serverless.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.AWS 리전.amazonaws.com" } } }

보안 암호 교체

교체는 보안 암호를 주기적으로 업데이트하는 것입니다. 사용자가 지정한 일정에 따라 자동으로 보안 암호를 교체하도록 AWS Secrets Manager를 구성할 수 있습니다. 그러면 장기 보안 암호를 단기 보안 암호로 교체할 수 있습니다. 이를 통해 침해 위험을 줄일 수 있습니다. EMR Serverless는 작업이 실행 중 상태로 전환될 때 주석이 달린 구성에서 보안 암호 값을 검색합니다. 사용자 또는 프로세스가 Secrets Manager에서 보안 암호 값을 업데이트하는 경우 작업이 업데이트된 값을 가져올 수 있도록 새 작업을 제출해야 합니다.

참고

이미 실행 중 상태인 작업은 업데이트된 보안 암호 값을 가져올 수 없습니다. 이로 인해 작업이 실패할 수 있습니다.