Amazon EMR 스텝의 런타임 역할 - 아마존 EMR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EMR 스텝의 런타임 역할

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

Amazon 클러스터에 연결할 때와 Amazon EMR Studio Workspace를 EMR 클러스터에 Amazon SageMaker 연결할 때 런타임 역할을 지정할 수도 있습니다. 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참조하십시오. EMRAmazon을 다음과 통합하세요 AWS Lake Formation

참고

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

런타임 역할을 사용하여 Amazon EMR 클러스터를 시작하기 위한 사전 요구 사항

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

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

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

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

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

2단계: Amazon EMR 클러스터의 EC2 인스턴스 프로필 설정

Amazon EMR 클러스터는 Amazon EC2 인스턴스 프로필 역할을 사용하여 런타임 역할을 맡습니다. Amazon EMR Steps에서 런타임 역할을 사용하려면 인스턴스 프로필 IAM 역할로 사용하려는 역할에 다음 정책을 추가하십시오. IAM역할에 정책을 추가하거나 기존 인라인 또는 관리형 정책을 편집하려면 IAMID 권한 추가 및 제거를 참조하십시오.

{ "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" }

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

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

아마존 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스튜디오 노트북에서 런타임 역할을 사용하여 Amazon EMR 클러스터에 연결

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

  1. Amazon SageMaker 스튜디오 시작의 지침에 따라 SageMaker 스튜디오를 생성하십시오.

  2. SageMaker Studio UI에서 지원되는 커널이 포함된 노트북을 시작합니다. 예를 들어 PySpark 커널로 SparkMagic 이미지를 시작하십시오.

  3. SageMaker 스튜디오에서 Amazon EMR 클러스터를 선택한 다음 Connect를 선택합니다.

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

그러면 선택한 Amazon EMR 런타임 역할을 사용하여 Amazon EMR 클러스터에 연결하는 매직 명령이 포함된 SageMaker 노트북 셀이 생성됩니다. 노트북 셀에서 런타임 역할 및 Lake Formation 기반 액세스 제어를 사용하여 쿼리를 입력하고 실행할 수 있습니다. 자세한 예는 AWS Lake Formation Amazon Studio의 및 Amazon을 사용하여 세분화된 데이터 액세스 제어 적용을 참조하십시오. EMR SageMaker

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

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

중요

다음 예와 같이 호출자에게 or를 호출할 수 있는 액세스 권한을 부여할 때는 elasticmapreduce:ExecutionRoleArn 컨텍스트 키를 기반으로 조건을 만들어야 합니다. AddJobFlowSteps GetClusterSessionCredentials APIs

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

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

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를 사용하는 방법에 대한 자세한 내용은 제3자에게 AWS 리소스에 대한 액세스 권한을 부여할 때 외부 ID를 사용하는 방법을 참조하십시오.

감사

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

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

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

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

이 속성을 사용하려면 다음과 같이 인스턴스 프로파일에 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 릴리스에서는 Studio에서 SageMaker Amazon EMR 클러스터에 연결할 때 간헐적으로 장애가 발생할 수 있습니다. 이 문제를 해결하기 위해 클러스터를 시작할 때 부트스트랩 작업으로 패치를 설치할 수 있습니다. 패치에 대한 자세한 내용은 Amazon EMR 릴리스 6.9.0의 알려진 문제를 참조하십시오.

또한 Amazon의 런타임 역할을 구성할 때는 다음 사항을 고려하십시오EMR.

  • EMRAmazon은 모든 커머셜에서 런타임 역할을 지원합니다 AWS 리전.

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

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

  • 런타임 역할을 지원하는 노트북 커널은 다음과 같습니다. SageMaker

    • DataScience — 파이썬 3 커널

    • DataScience 2.0 — 파이썬 3 커널

    • DataScience 3.0 — 파이썬 3 커널

    • SparkAnalytics 1.0 — SparkMagic 및 PySpark 커널

    • SparkAnalytics 2.0 — SparkMagic 및 커널 PySpark

    • SparkMagic — 커널 PySpark

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

  • EMRAmazon은 가용성이 높도록 구성한 클러스터의 런타임 역할을 지원하지 않습니다.

  • 파일로 명령을 실행할 때는 Bash 명령 인수를 이스케이프해야 합니다. command-runner.jar JAR

    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