Amazon S3에 대한 EMRFS 요청의 IAM 역할 구성
참고
이 페이지에서 설명하는 EMRFS 역할 매핑 기능은 Amazon EMR 6.15.0에 Amazon S3 Access Grants가 도입된 후 개선되었습니다. Amazon S3의 데이터에 대한 확장 가능한 액세스 제어 솔루션의 경우 Amazon EMR과 함께 S3 Access Grants를 사용하는 것이 좋습니다.
클러스터에서 실행되는 애플리케이션이 s3://
형식을 사용하여 데이터를 참조할 경우 Amazon EMR에서는 EMRFS를 사용하여 요청합니다. Amazon S3와 상호 작용하기 위해 EMRFS는 Amazon EC2 인스턴스 프로파일에 연결된 권한 정책을 가정합니다. 애플리케이션을 사용하는 사용자나 그룹 또는 Amazon S3에서 데이터의 위치에 관계없이 동일한 Amazon EC2 인스턴스 프로파일이 사용됩니다.mydata
Amazon S3에서 EMRFS를 통해 다양한 수준으로 데이터에 액세스해야 하는 여러 명의 사용자가 클러스터에 있는 경우 EMRFS에 대한 IAM 역할로 보안 구성을 설정할 수 있습니다. EMRFS는 요청하는 사용자나 그룹에 따라 또는 Amazon S3에서 데이터의 위치에 따라 클러스터 EC2 인스턴스의 다른 서비스 역할을 수임할 수 있습니다. EMRFS에 대한 각 IAM 역할은 Amazon S3에서 다양한 데이터 액세스 권한을 가질 수 있습니다. 클러스터 EC2 인스턴스의 서비스 역할에 대한 자세한 내용은 클러스터 EC2 인스턴스에 대한 서비스 역할(EC2 인스턴스 프로파일) 섹션을 참조하세요.
EMRFS에 대한 사용자 지정 IAM 역할 사용은 Amazon EMR 버전 5.10.0 이상에서 지원됩니다. 이전 릴리스 버전을 사용하고 있거나 EMRFS의 IAM 역할이 제공하는 것 이상의 요구 사항이 있는 경우에는 대신 사용자 지정 보안 인증 제공업체를 생성할 수 있습니다. 자세한 내용은 Amazon S3에서 EMRFS 데이터에 대한 액세스 권한 부여를 참조하세요.
보안 구성을 사용하여 EMRFS의 IAM 역할을 지정할 경우 역할 매핑을 설정합니다. 각 역할 매핑은 식별자에 해당하는 IAM 역할을 지정합니다. 이러한 식별자는 EMRFS를 통해 Amazon S3에 액세스하기 위한 기준을 결정합니다. 사용자, 그룹 또는 Amazon S3 접두사가 데이터 위치를 나타내는 식별자가 될 수 있습니다. EMRFS가 Amazon S3에 요청할 때 요청이 액세스 기준과 일치하는 경우 EMRFS는 클러스터 EC2 인스턴스가 요청에 해당하는 IAM 역할을 맡도록 합니다. 클러스터 EC2 인스턴스의 서비스 역할에 연결된 IAM 권한 대신, 해당 역할에 연결된 IAM 권한이 적용됩니다.
역할 매핑의 사용자와 그룹은 클러스터에 정의된 하둡 사용자와 그룹입니다. 역할 매핑을 사용하여 애플리케이션 맥락에서 EMRFS로 사용자와 그룹이 전달됩니다(예: YARN 사용자 구체화). Amazon S3 접두사는 버킷 지정자(깊이에 상관없음)일 수 있습니다(예: s3://amzn-s3-demo-bucket
또는 s3://amzn-s3-demo-bucket/myproject/mydata
). 단일 역할 매핑 내에서 여러 식별자를 지정할 수 있지만, 모두 같은 유형이어야 합니다.
중요
EMRFS의 IAM 역할은 애플리케이션 사용자 간에 애플리케이션 수준 격리를 제공합니다. 호스트 상의 사용자 간에 호스트 수준 격리를 제공하지는 않습니다. 클러스터에 대한 액세스 권한이 있는 모든 사용자는 격리를 우회하여 이러한 역할을 맡을 수 있습니다.
클러스터 애플리케이션이 EMRFS를 통해 Amazon S3에 요청을 하면 EMRFS는 역할 매핑을 위에서 아래로 평가하여 보안 구성에 표시합니다. EMRFS를 통해 생성된 요청이 식별자와 일치하지 않는 경우 EMRFS는 클러스터 EC2 인스턴스의 서비스 역할을 사용하여 돌아갑니다. 이러한 이유에서 이 역할에 연결된 정책의 권한을 Amazon S3로 제한하는 것이 좋습니다. 자세한 내용은 클러스터 EC2 인스턴스에 대한 서비스 역할(EC2 인스턴스 프로파일) 단원을 참조하십시오.
역할 구성
EMRFS의 IAM 역할을 사용하여 보안 구성을 설정하기 전에 역할과 해당 역할에 연결하려는 권한 정책을 계획하고 생성합니다. 자세한 내용은 IAM 사용 설명서에서 EC2 인스턴스의 역할은 어떻게 작동하나요?를 참조하세요. 권한 정책을 생성할 때는 EC2의 기본 Amazon EMR 역할에 연결된 관리형 정책부터 시작해서 요구사항에 따라 이 정책을 편집하는 것이 좋습니다. 기본 역할은 EMR_EC2_DefaultRole
이고, 편집할 기본 관리형 정책은 AmazonElasticMapReduceforEC2Role
입니다. 자세한 내용은 클러스터 EC2 인스턴스에 대한 서비스 역할(EC2 인스턴스 프로파일) 단원을 참조하십시오.
역할 권한을 수임하기 위해 신뢰 정책 업데이트
EMRFS가 사용하는 각 역할에는 EC2에 대한 클러스터의 Amazon EMR 역할이 이를 수임하도록 허용하는 신뢰 정책이 있어야 합니다. 마찬가지로 EC2에 대한 클러스터의 Amazon EMR 역할에는 EMRFS 역할이 이를 수임하도록 허용하는 신뢰 정책이 있어야 합니다.
다음 예제 신뢰 정책은 EMRFS의 역할에 연결됩니다. 이 명령문에서는 EC2에 대한 기본 Amazon EMR 역할이 역할을 수임하도록 허용합니다. 예를 들어 EMRFSRole_First
및 EMRFSRole_Second
와 같은 두 개의 가상 EMRFS 역할이 있는 경우 이 정책 구문은 각각의 신뢰 정책에 추가됩니다.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::
AWSAcctID
:role/EMR_EC2_DefaultRole" }, "Action":"sts:AssumeRole" } ] }
또한 다음 예제 신뢰 정책 구문이 EMR_EC2_DefaultRole
에 추가되어 두 개의 가상 EMRFS 역할이 이를 수임하도록 허용합니다.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS": ["arn:aws:iam::
AWSAcctID
:role/EMRFSRole_First
", "arn:aws:iam::AWSAcctID
:role/EMRFSRole_Second
"] }, "Action":"sts:AssumeRole" } ] }
IAM 역할의 신뢰 정책을 업데이트하는 방법
https://console.aws.amazon.com/iam/
-
Roles(역할)를 선택하고 Search(검색)에서 이름을 입력한 다음 Role name(역할 이름)을 선택합니다.
-
신뢰 관계(Trust relationships), 신뢰 관계 편집(Edit trust relationship)을 차례대로 선택합니다.
-
위 지침에 따라 정책 문서를 기준으로 신뢰 명령문을 추가하고 신뢰 정책 업데이트를 선택합니다.
역할을 키 사용자로 지정
역할이 AWS KMS key를 사용하여 암호화된 Amazon S3 위치에 대한 액세스를 허용하는 경우에는 해당 역할이 키 사용자로 지정되어 있는지 확인합니다. 이렇게 하면 해당 역할에 KMS 키를 사용할 수 있는 권한이 부여됩니다. 자세한 내용은 AWS Key Management Service 개발자 안내서의 AWS KMS의 키 정책을 참조하세요.
EMRFS의 IAM 역할을 사용하여 보안 구성 설정
중요
지정된 EMRFS의 IAM 역할이 적용되지 않는 경우 EMRFS는 EC2의 Amazon EMR 역할로 돌아갑니다. 애플리케이션에서 Amazon S3에 대한 권한을 적절하게 제한하도록 이 역할을 사용자 지정한 다음, 클러스터를 생성할 때 EMR_EC2_DefaultRole
대신 이 사용자 지정 역할을 지정하는 것이 좋습니다. 자세한 정보는 Amazon EMR을 사용하여 IAM 역할 사용자 지정 및 클러스터를 생성할 때 사용자 지정 IAM 역할 지정 섹션을 참조하세요.
콘솔을 사용하여 Amazon S3에 대한 EMRFS 요청의 IAM 역할을 지정하는 방법
-
역할 매핑을 지정하는 보안 구성을 생성합니다.
-
Amazon EMR 콘솔에서 보안 구성, 생성을 선택합니다.
-
보안 구성의 이름을 입력합니다. 클러스터를 생성할 때 이 이름을 사용하여 보안 구성을 지정합니다.
-
Amazon S3에 대한 EMRFS 요청의 IAM 역할 사용을 선택합니다.
-
적용할 IAM 역할을 선택하고 액세스의 기준 아래에 있는 목록에서 식별자 유형(사용자, 그룹 또는 S3 접두사)을 선택한 후 해당 식별자를 입력합니다. 여러 식별자를 사용할 경우 공백 없이 쉼표로 구분합니다. 각 식별자 유형에 대한 자세한 내용은 아래 JSON configuration reference를 참조하세요.
-
역할 추가를 선택하여 이전 단계에서 설명한 추가 역할 매핑을 설정합니다.
-
다른 보안 구성 옵션을 적절히 설정하고 생성을 선택합니다. 자세한 내용은 Amazon EMR 콘솔 또는 AWS CLI를 사용하여 보안 구성 생성 단원을 참조하십시오.
-
-
클러스터를 생성할 때 위에서 생성한 보안 구성을 지정합니다. 자세한 내용은 Amazon EMR 클러스터에 대한 보안 구성 지정 단원을 참조하십시오.
AWS CLI를 사용하여 Amazon S3에 대한 EMRFS 요청의 IAM 역할을 지정하는 방법
-
보안 구성의 이름과 보안 구성 세부 정보를 JSON 형식으로 지정하여
aws emr create-security-configuration
명령을 사용합니다.아래 표시된 예시 명령에서는 이름이
EMRFS_Roles_Security_Configuration
인 보안 구성을 생성합니다. 보안 구성은MyEmrfsSecConfig.json
파일의 JSON 구조를 기반으로 하며, 명령이 실행되는 위치와 동일한 디렉터리에 저장됩니다.aws emr create-security-configuration --name
EMRFS_Roles_Security_Configuration
--security-configurationfile://MyEmrFsSecConfig.json
.MyEmrFsSecConfig.json
파일의 구조에 대해 다음 지침을 사용합니다. 이 구조를 다른 보안 구성 옵션에 대한 구조와 함께 지정할 수 있습니다. 자세한 내용은 Amazon EMR 콘솔 또는 AWS CLI를 사용하여 보안 구성 생성 단원을 참조하십시오.다음은 보안 구성에서 EMRFS에 대한 사용자 지정 IAM 역할을 지정하기 위한 예제 JSON 코드 조각입니다. 이 예제에서는 세 가지 식별자 유형에 대한 역할 매핑을 보여줍니다. 뒤이어 파라미터 참조가 나옵니다.
{ "AuthorizationConfiguration": { "EmrFsConfiguration": { "RoleMappings": [{ "Role": "
arn:aws:iam::123456789101:role/allow_EMRFS_access_for_user1
", "IdentifierType": "User", "Identifiers": [ "user1
" ] },{ "Role": "arn:aws:iam::123456789101:role/allow_EMRFS_access_to_demo_s3_buckets
", "IdentifierType": "Prefix", "Identifiers": [ "s3://amzn-s3-demo-bucket1/","s3://amzn-s3-demo-bucket2/
" ] },{ "Role": "arn:aws:iam::123456789101:role/allow_EMRFS_access_for_AdminGroup
", "IdentifierType": "Group", "Identifiers": [ "AdminGroup
" ] }] } } }파라미터 설명 "AuthorizationConfiguration":
필수 사항입니다.
"EmrFsConfiguration":
필수 사항입니다. 역할 매핑을 포함합니다.
"RoleMappings":
필수 사항입니다. 역할 매핑 정의를 하나 이상 포함. 역할 매핑은 표시되는 순서대로 위에서부터 아래로 평가됩니다. 역할 매핑이 Amazon S3 내 데이터에 대한 EMRFS 호출에 true로 평가되는 경우 역할 매핑은 추가로 평가되지 않으며 EMRFS가 해당 요청에 지정된 IAM 역할을 사용합니다. 역할 매핑은 다음과 같은 필수 파라미터로 구성됩니다.
"Role":
IAM 역할의 ARN 식별자를
arn:aws:iam::
형식으로 지정합니다. 이는 Amazon S3에 대한 EMRFS 요청이 지정된account-id
:role/role-name
Identifiers
중 하나와 일치하는 경우 Amazon EMR에서 수임하는 IAM 역할입니다."IdentifierType":
다음 중 하나가 될 수 있습니다.
"User"
는 식별자가 하나 이상의 Hadoop 사용자이도록 지정하는데, Linux 계정 사용자 또는 Kerberos 보안 주체일 수 있습니다. EMRFS 요청이 지정된 사용자로 시작하는 경우 IAM 역할이 수임됩니다."Prefix"
에서는 식별자가 Amazon S3 위치가 되도록 지정합니다. 지정된 접두사가 있는 위치에 대한 호출에는 IAM 역할이 수임됩니다. 예를 들어s3://amzn-s3-demo-bucket/
접두사는s3://amzn-s3-demo-bucket/mydir
및s3://amzn-s3-demo-bucket/yetanotherdir
과 일치합니다."Group"
은 식별자가 한 개 이상의 하둡 그룹이 되도록 지정합니다. 요청이 지정된 그룹의 사용자에서 시작되는 경우 IAM 역할이 수임됩니다.
"Identifiers":
해당 식별자 유형의 하나 이상의 식별자를 지정합니다. 공백 없이 콤마로 구분된 여러 개의 식별자.
-
aws emr create-cluster
명령을 사용하여 클러스터를 생성하고 이전 단계에서 생성한 보안 구성을 지정합니다.다음 예제에서는 기본 코어 하둡 애플리케이션이 설치된 상태로 클러스터를 생성합니다. 클러스터에서는 위에서 생성한 보안 구성을
EMRFS_Roles_Security_Configuration
으로 사용하며,EC2_Role_EMR_Restrict_S3
파라미터의InstanceProfile
인수를 사용하여 지정되는 EC2의 사용자 지정 Amazon EMR 역할(--ec2-attributes
)을 사용합니다.참고
가독성을 위해 Linux 줄 연속 문자(\)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.
aws emr create-cluster --name
MyEmrFsS3RolesCluster
\ --release-labelemr-7.3.0
--ec2-attributes InstanceProfile=EC2_Role_EMR_Restrict_S3
,KeyName=MyKey
\ --instance-typem5.xlarge
--instance-count3
\ --security-configurationEMRFS_Roles_Security_Configuration