Amazon EMR 단계의 런타임 역할 - Amazon EMR

Amazon EMR 단계의 런타임 역할

런타임 역할은 Amazon EMR 클러스터에 작업 또는 쿼리를 제출할 때 지정할 수 있는 AWS Identity and Access Management(IAM) 역할입니다. Amazon EMR 클러스터에 제출하는 작업 또는 쿼리는 런타임 역할을 사용하여 Amazon S3의 객체와 같은 AWS 리소스에 액세스합니다. Spark 및 Hive용 Amazon EMR 작업에서 런타임 역할을 지정할 수 있습니다.

또한 Amazon SageMaker에서 Amazon EMR 클러스터에 연결할 때와 Amazon EMR Studio Workspace를 EMR 클러스터에 연결할 때 런타임 역할을 지정할 수 있습니다. 자세한 내용은 Studio에서 Amazon EMR 클러스터에 연결런타임 역할로 EMR Studio Workspace 실행 섹션을 참조하세요.

이전에는 Amazon EMR 클러스터가 클러스터를 시작하는 데 사용한 인스턴스 프로파일에 연결된 IAM 정책을 기반으로 한 권한으로 Amazon EMR 작업 또는 쿼리를 실행했습니다. 즉, 정책에는 Amazon EMR 클러스터에서 실행되는 모든 작업 및 쿼리에 대한 모든 권한의 통합이 포함되어야 했습니다. 런타임 역할을 사용하면 이제 클러스터의 Amazon EMR 인스턴스 프로파일을 공유하는 대신, 각 작업 또는 쿼리에 대한 액세스 제어를 개별적으로 관리할 수 있습니다.

런타임 역할이 있는 Amazon EMR 클러스터에서는 데이터 레이크에서의 Spark, Hive, Presto 작업 및 쿼리에 AWS Lake Formation 기반 액세스 제어를 적용할 수도 있습니다. AWS Lake Formation과의 통합 방법에 대한 자세한 내용은 Amazon EMR과 AWS Lake Formation 통합 섹션을 참조하세요.

참고

Amazon EMR 단계의 런타임 역할을 지정하는 경우 제출하는 작업 또는 쿼리는 런타임 역할에 연결된 정책에서 허용하는 AWS 리소스에만 액세스할 수 있습니다. 이러한 작업 및 쿼리는 클러스터의 EC2 인스턴스에 있는 인스턴스 메타데이터 서비스에 액세스하거나 클러스터의 EC2 인스턴스 프로파일을 사용하여 AWS 리소스에 액세스할 수 없습니다.

런타임 역할을 사용하여 Amazon EMR 클러스터를 시작하기 위한 필수 조건

1단계: Amazon EMR에서 보안 구성 설정

다음 JSON 구조를 사용하여 AWS Command Line Interface(AWS CLI)에서 보안 구성을 생성하고 EnableApplicationScopedIAMRoletrue로 설정합니다. 보안 구성에 대한 자세한 내용은 보안 구성을 사용하여 Amazon EMR 클러스터 보안 설정 단원을 참조하세요.

{ "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true } } }

인터넷을 통해 전송되는 데이터가 일반 텍스트 형식이 아니라 암호화되도록 보안 구성에서 전송 중 암호화 옵션을 항상 활성화하는 것이 좋습니다. SageMaker Runtime Studio 또는 EMR Studio의 런타임 역할을 사용하여 Amazon EMR 클러스터에 연결하지 않으려면 이 옵션을 건너뛰어도 됩니다. 데이터 암호화를 구성하려면 데이터 암호화 구성을 참조하세요.

또는 AWS Management Console을 사용하여 사용자 지정 설정을 통해 보안 구성을 생성할 수 있습니다.

2단계: Amazon EMR 클러스터용 EC2 인스턴스 프로파일 설정

Amazon EMR 클러스터는 Amazon EC2 인스턴스 프로파일 역할을 사용하여 런타임 역할을 수임합니다. Amazon EMR 단계에서 런타임 역할을 사용하려면 인스턴스 프로파일 역할로 사용하려는 IAM 역할에 다음 정책을 추가합니다. IAM 역할에 정책을 추가하거나 기존 인라인 또는 관리형 정책을 편집하려면 IAM 자격 증명 권한 추가 및 제거를 참조하세요.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowRuntimeRoleUsage", "Effect":"Allow", "Action":[ "sts:AssumeRole", "sts:TagSession" ], "Resource":[ <runtime-role-ARN> ] } ] }

3단계: 신뢰 정책 설정

런타임 역할로 사용하려는 각 IAM 역할에 대해 인스턴스 프로파일을 EMR_EC2_DefaultRole로 대체하여 다음과 같은 신뢰 정책을 설정합니다. IAM 역할의 신뢰 정책을 수정하려면 역할 신뢰 정책 수정을 참조하세요.

{ "Sid":"AllowAssumeRole", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole" }, "Action":"sts:AssumeRole" }

역할 기반 액세스 제어로 Amazon EMR 클러스터 시작

구성을 설정한 후 1단계: Amazon EMR에서 보안 구성 설정의 보안 구성을 사용하여 Amazon EMR 클러스터를 시작할 수 있습니다. Amazon EMR 단계에서 런타임 역할을 사용하려면 릴리스 레이블 emr-6.7.0 이상을 사용하고 Hive, Spark 또는 둘 다를 클러스터 애플리케이션으로 선택합니다. SageMaker Studio에서 연결하려면 릴리스 emr-6.9.0 이상을 사용하고 Livy, Spark, Hive 또는 Presto를 클러스터 애플리케이션으로 선택합니다. 클러스터를 시작하는 방법에 대한 지침은 Amazon EMR 클러스터에 대한 보안 구성 지정 섹션을 참조하세요.

Amazon EMR 단계를 사용하여 Spark 작업 제출

다음은 Apache Spark에 포함된 HdfsTest 예제를 실행하는 방법에 관한 예제입니다. 이 API 직접 호출은 제공된 Amazon EMR 런타임 역할이 S3_LOCATION에 액세스할 수 있는 경우에만 성공합니다.

RUNTIME_ROLE_ARN=<runtime-role-arn> S3_LOCATION=<s3-path> REGION=<aws-region> CLUSTER_ID=<cluster-id> aws emr add-steps --cluster-id $CLUSTER_ID \ --steps '[{ "Name": "Spark Example", "ActionOnFailure": "CONTINUE","HadoopJarStep": { "Jar":"command-runner.jar","Args" : ["spark-example","HdfsTest", "$S3_LOCATION"] } }]' \ --execution-role-arn $RUNTIME_ROLE_ARN \ --region $REGION
참고

Amazon EMR 클러스터에 대한 SSH 액세스를 끄고 Amazon EMR AddJobFlowSteps API만 클러스터에 액세스하도록 허용하는 것이 좋습니다.

Amazon EMR 단계를 사용하여 Hive 작업 제출

다음 예제에서는 Amazon EMR 단계와 함께 Apache Hive를 사용하여 QUERY_FILE.hql 파일을 실행하기 위한 작업을 제출합니다. 이 쿼리는 제공된 런타임 역할이 쿼리 파일의 Amazon S3 경로에 액세스할 수 있는 경우에만 성공합니다.

RUNTIME_ROLE_ARN=<runtime-role-arn> REGION=<aws-region> CLUSTER_ID=<cluster-id> aws emr add-steps --cluster-id $CLUSTER_ID \ --steps '[{ "Name": "Run hive query using command-runner.jar - simple select","ActionOnFailure":"CONTINUE","HadoopJarStep": { "Jar": "command-runner.jar","Args" :["hive - f","s3://DOC_EXAMPLE_BUCKET/QUERY_FILE.hql"] } }]' \ --execution-role-arn $RUNTIME_ROLE_ARN \ --region $REGION

SageMaker Studio 노트북에서 런타임 역할을 사용하여 Amazon EMR 클러스터에 연결

SageMaker Studio의 Amazon EMR 클러스터에서 실행하는 쿼리에 Amazon EMR 런타임 역할을 적용할 수 있습니다. 이를 수행하려면 다음 단계를 수행합니다.

  1. Amazon SageMaker Studio 시작의 지침에 따라 SageMaker Studio를 생성합니다.

  2. SageMaker Studio UI에서 지원되는 커널을 사용하여 노트북을 시작합니다. 예를 들어, PySpark 커널을 사용하여 SparkMagic 이미지를 시작합니다.

  3. SageMaker Studio에서 Amazon EMR 클러스터를 선택하고 연결을 선택합니다.

  4. 런타임 역할을 선택하고 연결을 선택합니다.

그러면 선택한 Amazon EMR 런타임 역할을 사용하여 Amazon EMR 클러스터에 연결하기 위해 매직 명령을 포함하는 SageMaker 노트북 셀이 생성됩니다. 노트북 셀에서 런타임 역할 및 Lake Formation 기반 액세스 제어를 사용하여 쿼리를 입력하고 실행할 수 있습니다. 자세한 예제는 Apply fine-grained data access controls with AWS Lake Formation and Amazon EMR from Amazon SageMaker Studio를 참조하세요.

Amazon EMR 런타임 역할에 대한 액세스 제어

elasticmapreduce:ExecutionRoleArn 조건 키를 사용하여 런타임 역할에 대한 액세스를 제어할 수 있습니다. 다음 정책은 IAM 보안 주체가 런타임 역할로 Caller IAM 역할 또는 CallerTeamRole 문자열로 시작하는 모든 IAM 역할을 사용할 수 있도록 허용합니다.

중요

다음 예제와 같이 직접 호출자에게 AddJobFlowSteps 또는 GetClusterSessionCredentials API를 직접 호출할 수 있는 액세스 권한을 부여하는 경우 elasticmapreduce:ExecutionRoleArn 컨텍스트 키를 기반으로 조건을 생성해야 합니다.

{ "Sid":"AddStepsWithSpecificExecRoleArn", "Effect":"Allow", "Action":[ "elasticmapreduce:AddJobFlowSteps" ], "Resource":"*", "Condition":{ "StringEquals":{ "elasticmapreduce:ExecutionRoleArn":[ "arn:aws:iam::<AWS_ACCOUNT_ID>:role/Caller" ] }, "StringLike":{ "elasticmapreduce:ExecutionRoleArn":[ "arn:aws:iam::<AWS_ACCOUNT_ID>:role/CallerTeamRole*" ] } } }

런타임 역할과 Amazon EMR 클러스터 간 신뢰 구축

Amazon EMR은 활성화된 런타임 역할 인증을 통해 각 보안 구성의 고유한 ExternalId 식별자를 생성합니다. 이 인증을 통해 모든 사용자는 자신에게 속한 클러스터에서 사용할 런타임 역할 세트를 소유할 수 있습니다. 예를 들어 엔터프라이즈의 모든 부서가 외부 ID를 사용하여 자체 런타임 역할 세트에 대한 신뢰 정책을 업데이트할 수 있습니다.

외부 ID는 다음 예제와 같이 Amazon EMR DescribeSecurityConfiguration API에서 찾을 수 있습니다.

aws emr describe-security-configuration --name 'iamconfig-with-lf'{"Name": "iamconfig-with-lf", "SecurityConfiguration": "{\"AuthorizationConfiguration\":{\"IAMConfiguration\":{\"EnableApplicationScopedIAMRole\ ":true,\"ApplicationScopedIAMRoleConfiguration\":{\"PropagateSourceIdentity\":true,\"Exter nalId\":\"FXH5TSACFDWUCDSR3YQE2O7ETPUSM4OBCGLYWODSCUZDNZ4Y\"}},\"Lake FormationConfiguration\":{\"AuthorizedSessionTagValue\":\"Amazon EMR\"}}}", "CreationDateTime": "2022-06-03T12:52:35.308000-07:00" }

외부 ID 사용 방법에 대한 자세한 내용은 How to use an external ID when granting access to your AWS resources to a third party를 참조하세요.

감사

최종 사용자가 IAM 역할로 수행하는 작업을 모니터링하고 제어하기 위해 소스 ID 기능을 활성화할 수 있습니다. 소스 ID에 대해 자세히 알아보려면 위임된 역할로 수행한 작업 모니터링 및 제어를 참조하세요.

소스 ID를 추적하려면 다음과 같이 보안 구성에서 ApplicationScopedIAMRoleConfiguration/PropagateSourceIdentitytrue로 설정합니다.

{ "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true, "ApplicationScopedIAMRoleConfiguration":{ "PropagateSourceIdentity":true } } } }

PropagateSourceIdentitytrue로 설정하면 Amazon EMR은 직접 호출 보안 인증의 소스 ID를 사용자가 런타임 역할로 생성한 작업 또는 쿼리 세션에 적용합니다. 직접 호출 보안 인증에 소스 ID가 없는 경우 Amazon EMR은 소스 ID를 설정하지 않습니다.

이 속성을 사용하려면 다음과 같이 인스턴스 프로파일에 sts:SetSourceIdentity 권한을 제공합니다.

{ // PropagateSourceIdentity statement "Sid":"PropagateSourceIdentity", "Effect":"Allow", "Action":"sts:SetSourceIdentity", "Resource":[ <runtime-role-ARN> ], "Condition":{ "StringEquals":{ "sts:SourceIdentity":<source-identity> } } }

또한 런타임 역할의 신뢰 정책에 AllowSetSourceIdentity 문을 추가해야 합니다.

{ // AllowSetSourceIdentity statement "Sid":"AllowSetSourceIdentity", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole" }, "Action":[ "sts:SetSourceIdentity", "sts:AssumeRole" ], "Condition":{ "StringEquals":{ "sts:SourceIdentity":<source-identity> } } }

추가 고려 사항

참고

Amazon EMR 릴리스 emr-6.9.0에서는 SageMaker Studio에서 Amazon EMR 클러스터에 연결할 때 간헐적으로 장애가 발생할 수 있습니다. 이 문제를 해결하기 위해 클러스터를 시작할 때 부트스트랩 작업으로 패치를 설치할 수 있습니다. 패치에 대한 자세한 내용은 Amazon EMR 릴리스 6.9.0 알려진 문제를 참조하세요.

또한 Amazon EMR의 런타임 역할을 구성하는 경우 다음 사항을 고려합니다.

  • Amazon EMR은 모든 상용 AWS 리전에서 런타임 역할을 지원합니다.

  • Amazon EMR 단계는 릴리스 emr-6.7.0 이상을 사용할 때 런타임 역할이 있는 Apache Spark 및 Apache Hive 작업을 지원합니다.

  • SageMaker Studio는 릴리스 emr-6.9.0 이상을 사용할 때 런타임 역할이 있는 Spark, Hive 및 Presto 쿼리를 지원합니다.

  • SageMaker의 다음 노트북 커널에서 런타임 역할을 지원합니다.

    • DataScience – Python 3 커널

    • DataScience 2.0 – Python 3 커널

    • DataScience 3.0 – Python 3 커널

    • SparkAnalytics 1.0 – SparkMagic 및 PySpark 커널

    • SparkAnalytics 2.0 – SparkMagic 및 PySpark 커널

    • SparkMagic – PySpark 커널

  • Amazon EMR은 클러스터 생성 시에만 RunJobFlow를 사용하는 단계를 지원합니다. 이 API는 런타임 역할을 지원하지 않습니다.

  • Amazon EMR은 고가용성으로 구성한 클러스터의 런타임 역할을 지원하지 않습니다.

  • command-runner.jar JAR 파일을 사용해 명령을 실행하는 경우 Bash 명령 인수를 이스케이프 처리해야 합니다.

    aws emr add-steps --cluster-id <cluster-id> --steps '[{"Name":"sample-step","ActionOnFailure":"CONTINUE","Jar":"command-runner.jar","Properties":"","Args":["bash","-c","\"aws s3 ls\""],"Type":"CUSTOM_JAR"}]' --execution-role-arn <IAM_ROLE_ARN>
  • 런타임 역할은 HDFS 및 HMS와 같은 클러스터 내 리소스에 대한 액세스 제어를 지원하지 않습니다.