IAM을 이용한 대화형 세션 - AWS Glue

IAM을 이용한 대화형 세션

이 섹션에서는 AWS Glue 대화형 세션의 보안 고려 사항에 대해 설명합니다.

대화형 세션에 사용되는 IAM 보안 주체

AWS Glue 대화형 세션에 사용되는 두 가지 IAM 보안 주체를 사용합니다.

  • 클라이언트 보안 주체: 클라이언트 보안 주체(사용자 또는 역할)는 보안 주체의 ID 기반 자격 증명으로 구성된 AWS Glue 클라이언트의 대화형 세션에 대한 API 작업에 권한을 부여합니다. 예를 들어 자격 증명이 AWS Command Line Interface에 사용되는 IAM 사용자이거나 대화형 세션 Jupyter 커널에서 사용하는 AWS Glue 클라이언트일 수 있습니다. 이는 일반적으로 AWS Glue 콘솔에 액세스하는 데 사용하는 IAM 역할 보안 주체일 수도 있습니다.

  • 런타임 역할: 런타임 역할은 클라이언트 보안 주체가 대화형 세션 API 작업에 전달하는 IAM 역할입니다. AWS Glue는 이 역할을 사용하여 세션에서 문을 실행합니다. 예를 들어, 이 역할은 AWS Glue ETL 작업 실행에 사용되는 역할일 수 있습니다.

    자세한 정보는 런타임 역할 설정을 참조하십시오.

클라이언트 보안 주체 설정

대화형 세션 API를 호출할 수 있도록 하려면 클라이언트 보안 주체에 자격 증명 정책을 연결해야 합니다. 이 역할에는 CreateSession과 같은 대화형 세션 API로 전달할 실행 역할에 대한 iam:PassRole 액세스 권한이 있어야 합니다. 예를 들어, 동일하거나 유사한 정책이 연결된 계정의 모든 IAM 사용자가 계정에 생성된 모든 세션(예: 런타임 문 또는 취소 문)에 액세스할 수 있도록 허용하는 AWSGlueConsoleFullAccess 관리형 정책을 IAM 사용자에게 연결할 수 있습니다.

세션을 보호하고 세션을 생성한 IAM 사용자에게만 공개하도록 설정하려면 AWS Glue 대화형 세션의 태그 기반 권한 부여 제어인 TagOnCreate를 사용할 수 있습니다. 소유자 태그 기반 범위 축소 관리형 정책이 TagonCreate를 사용하여 세션을 비공개로 만드는 방법에 대한 자세한 내용은 TagOnCreate로 세션 비공개 설정 섹션을 참조하세요. 자격 증명 기반 정책에 대한 자세한 내용은 자격 증명 기반 정책 사용을 참조하세요.

런타임 역할 설정

AWS Glue가 대화형 세션에서 문을 가정하고 실행할 수 있도록 하려면 CreateSession API 작업에 IAM 역할을 전달해야 합니다. 역할에는 일반적인 AWS Glue 작업을 실행하는 데 필요한 IAM 권한과 동일한 IAM 권한이 있어야 합니다. 예를 들어 AWS Glue가 사용자를 대신하여 AWS 서비스를 호출하도록 허용하는 AWSGlueServiceRole 정책을 사용하여 서비스 역할을 생성할 수 있습니다. AWS Glue 콘솔을 사용하는 경우 자동으로 사용자를 대신하여 서비스 역할을 생성하거나 기존 역할을 사용합니다. 고유한 IAM 역할을 생성하고 고유한 IAM 정책을 연결하여 유사한 권한을 허용할 수도 있습니다.

세션을 보호하고 세션을 생성한 IAM 사용자에게만 공개하도록 설정하려면 AWS Glue 대화형 세션의 태그 기반 권한 부여 제어인 TagOnCreate를 사용할 수 있습니다. 소유자 태그 기반 범위 축소 관리형 정책이 TagonCreate를 사용하여 세션을 비공개로 만드는 방법에 대한 자세한 내용은 TagOnCreate로 세션 비공개 설정 섹션을 참조하세요. 자격 증명 기반 정책에 대한 자세한 내용은 자격 증명 기반 정책 사용을 참조하세요. IAM 콘솔에서 직접 실행 역할을 생성하고 TagOnCreate 기능을 사용하여 서비스를 비공개로 설정하려면 아래 단계를 따르세요.

  1. 역할 유형이 Glue로 설정된 IAM 역할을 생성합니다.

  2. AwsGlueSessionUserRestrictedServiceRole이라는 AWS Glue 관리형 정책을 연결합니다.

  3. 역할 이름 앞에 정책 이름 AwsGlueSessionUserRestrictedServiceRole을 붙입니다. 예를 들어, AwsGlueSessionUserRestrictedServiceRole-myrole이라는 이름을 가진 역할을 생성해서 AWS Glue 관리형 정책 AwsGlueSessionUserRestrictedServiceRole을 연결할 수 있습니다.

  4. AWS Glue이(가) 역할을 수임할 수 있도록 다음과 같이 신뢰 정책을 연결합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } }

대화형 세션 Jupyter 커널의 경우 AWS Command Line Interface 프로파일에 iam_role 키를 지정할 수 있습니다. 자세한 내용은 ~/.aws/configure를 사용하여 세션 구성을 참조하세요. AWS Glue 노트북을 사용하여 대화형 세션과 상호 작용하는 경우 실행하는 첫 번째 셀에서 %iam_role 매직의 실행 역할을 전달할 수 있습니다.

TagOnCreate로 세션 비공개 설정

AWS Glue 대화형 세션은 대화형 세션에 대한 태그 지정 및 TBAC(태그 기반 권한 부여)를 명명된 리소스로 지원합니다. TagResource 및 UntagResource API를 사용하는 TBAC 외에도, AWS Glue 대화형 세션은 CreateSession 작업을 통해 세션을 생성하는 동안에만 지정된 태그가 있는 세션을 ‘태그 지정’하는 TagOnCreate 기능을 지원합니다. 이는 또한 이러한 태그가 DeleteSession에서 제거됨을 의미합니다(일명 UntagOnDelete).

TagOnCreate는 세션 생성자가 세션을 비공개로 만들 수 있는 강력한 보안 메커니즘을 제공합니다. 예를 들어, 호출자의 userId와 일치하는 값을 가진 ‘owner’ 태그가 CreateSession 요청에서 userId 태그로서 제공되는 경우에만 세션 생성을 허용하려면 ‘owner’ RequestTag 및 ${aws:userId} 값이 있는 IAM 정책을 클라이언트 보안 주체(예: IAM 사용자)에 연결할 수 있습니다. 이 정책은 AWS Glue 대화형 세션이 세션 리소스를 생성하도록 하고 세션 생성 시간 동안에만 userId 태그가 있는 세션에 태그를 지정하도록 허용합니다. 또한 CreateSession 중에 전달한 실행 역할에 ‘owner’ ResourceTag가 있는 IAM 정책을 연결하여 세션 생성자(${aws:userId} 값을 가진 소유자 태그)들 대상으로만 세션에 대한 액세스 범위를 좁힐 수 있습니다.

TagOnCreate 기능을 사용하여 세션을 더 쉽게 비공개로 만들기 위해, AWS Glue에서는 특화된 관리형 정책 및 서비스 역할을 제공합니다. 예를 들어, AWSGlueSessionUserRestrictedPolicy를 계정의 각 IAM 사용자에게 연결하여 자신의 ${aws:userId}와 일치하는 값을 가진 소유자 태그로만 세션을 생성하도록 제한할 수 있습니다. 자세한 내용은 자격 증명 기반 정책 사용을 참조하세요. 이 정책은 자체 ${aws:userId}를 드러낸 소유자 태그로 세션을 생성한 IAM 사용자의 ${aws:userId}인 생성자에게만 세션에 대한 액세스 범위를 좁힙니다. 런타임 역할 설정의 단계에 따라 IAM 콘솔을 사용하여 직접 실행 역할을 생성한 경우, AwsGlueSessionUserRestrictedPolicy 관리형 정책 연결 외에도 계정의 각 IAM 사용자에게 다음과 같은 인라인 정책을 연결하여 이전에 생성한 실행 역할에 대해 iam:PassRole을 허용합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AwsGlueSessionUserRestrictedServiceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } }] }

IAM AssumeRole 보안 주체(즉, IAM 역할을 수임하여 발급받은 자격 증명 사용)를 사용하여 AWS Glue 대화형 세션을 생성하고 생성자 외에는 비공개로 설정하려면 AWSGlueSessionUserRestrictedPolicyAWSGlueSessionUserRestrictedServiceRole을 사용하는 대신 AWSGlueSessionUserRestrictedNotebookPolicyAWSGlueSessionUserRestrictedNotebookServiceRole과 유사한 정책을 각각 사용해야 합니다. 이 정책은 AWS Glue가 ${aws:PrincipalTag}를 사용하여 소유자 태그 값을 추출하도록 허용합니다. 이렇게 하려면 수임 역할 자격 증명에서 ${aws:userId} 값을 가진 userId 태그를 SessionTag로 전달해야 합니다. ID 세션 태그를 참조하세요. 자격 증명을 발급하는 인스턴스 프로파일이 있는 Amazon EC2 인스턴스를 사용하고 있고 Amazon EC2 인스턴스 내에서 세션을 생성하거나 세션과 상호 작용하려면, 수임 역할 자격 증명에서 ${aws:userId} 값을 가진 userId 태그를 SessionTag로 전달해야 합니다.

예를 들어, IAM AssumeRole 보안 주체 자격 증명을 사용하여 세션을 생성하고, TagOnCreate 기능을 사용하여 서비스를 비공개로 설정하려는 경우 아래 단계를 따르세요.

  1. IAM 콘솔에서 직접 런타임 역할을 생성합니다. 이 AWS Glue 관리형 정책 AwsGlueSessionUserRestrictedNotebookServiceRole을 연결하고 역할 이름 앞에 정책 이름 AwsGlueSessionUserRestrictedNotebookServiceRole을 붙이세요. 예를 들어 AwsGlueSessionUserRestrictedNotebookServiceRole-myrole이라는 이름을 가진 역할을 생성해서 AWS Glue 관리형 정책 AwsGlueSessionUserRestrictedNotebookServiceRole을 연결할 수 있습니다.

  2. AWS Glue가 위의 역할을 수임할 수 있도록 허용하려면 아래와 같이 신뢰 정책을 연결하세요.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }
  3. 이름에 접두사 AwsGlueSessionUserRestrictedNotebookPolicy가 붙은 다른 역할을 생성하고 AWS Glue 관리형 정책 AwsGlueSessionUserRestrictedNotebookPolicy를 연결하여 세션을 비공개로 만듭니다. 관리형 정책 외에도 다음 인라인 정책을 연결하여 iam:PassRole을 1단계에서 생성한 역할에 허용합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AwsGlueSessionUserRestrictedNotebookServiceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } } ] }
  4. 다음과 같이 위의 IAM AWS Glue에 신뢰 정책을 연결하여 역할을 수임합니다.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] }] }
    참고

    선택적으로 단일 역할(예: 노트북 역할)을 사용하고 위의 관리형 정책 AwsGlueSessionUserRestrictedNotebookServiceRoleAwsGlueSessionUserRestrictedNotebookPolicy를 모두 연결할 수 있습니다. 또한 추가 인라인 정책을 연결하여 iam:passrole을 AWS Glue에 허용하세요. 마지막으로 위의 신뢰 정책을 연결하여 sts:AssumeRolests:TagSession을 허용하세요.

AWSGlueSessionUserRestrictedPolicy

AWSGlueSessionUserRestrictedPolicy는 태그 키 ‘owner’ 및 AWS 사용자 ID와 일치하는 값이 제공된 경우에만 CreateSession API를 사용하여 AWS Glue 대화형 세션을 생성할 수 있는 액세스를 제공합니다. 이 자격 증명 정책은 CreateSession API를 호출하는 IAM 사용자에게 연결됩니다. 또한 이 정책은 ‘owner’ 태그 및 AWS 사용자 ID와 일치하는 값으로 생성된 AWS Glue 대화형 세션 리소스와 상호 작용하도록 허용합니다. 이 정책은 세션이 생성된 후 AWS Glue 세션 리소스에서 ‘owner’ 태그를 변경하거나 제거할 수 있는 권한을 거부합니다.

AWSGlueSessionUserRestrictedServiceRole

AWSGlueSessionUserRestrictedServiceRole은 세션을 제외한 모든 AWS Glue 리소스에 대한 전체 액세스 권한을 제공하고 사용자가 자신과 연결된 대화형 세션만 생성하고 사용할 수 있도록 허용합니다. 이 정책에는 AWS Glue에서 다른 AWS 서비스의 Glue 리소스를 관리하는 데 필요한 기타 권한도 포함됩니다. 또한 이 정책은 다른 AWS 서비스의 AWS Glue 리소스에 태그를 추가할 수 있도록 허용합니다.

AWSGlueSessionUserRestrictedNotebookPolicy

AWSGlueSessionUserRestrictedNotebookPolicy는 태그 키 ‘owner’ 및 보안 주체(IAM 사용자 또는 역할)의 AWS 사용자 ID와 일치하는 값이 있는 경우에만 노트북에서 AWS Glue 대화형 세션을 생성할 수 있는 액세스 권한을 제공합니다. 자세한 내용은 정책 변수를 사용할 수 있는 경우를 참조하세요. 이 정책은 AWS Glue Studio에서 AWS Glue 대화형 세션 노트북을 생성하는 보안 주체(IAM 사용자 또는 역할)에 연결됩니다. 또한 이 정책은 보안 주체의 AWS 사용자 ID와 일치하는 ‘owner’ 태그 값으로 생성된 AWS Glue Studio 대화형 세션 리소스와 상호 작용할 수 있는 충분한 액세스 권한을 AWS Glue Studio 노트북에 허용합니다. 이 정책은 세션이 생성된 후 AWS Glue 세션 리소스에서 ‘owner’ 태그를 변경하거나 제거할 수 있는 권한을 거부합니다.

AWSGlueSessionUserRestrictedNotebookServiceRole

AWSGlueSessionUserRestrictedNotebookServiceRole은 노트북을 생성하는 보안 주체(IAM 사용자 또는 역할)의 AWS 사용자 ID와 일치하는 ‘owner’ 태그 값으로 생성된 AWS Glue 대화형 세션 리소스와 상호 작용할 수 있는 충분한 액세스 권한을 AWS Glue Studio 노트북에 제공합니다. 자세한 내용은 정책 변수를 사용할 수 있는 경우를 참조하세요. 이 서비스-역할 정책은 노트북에 매직으로 전달되었거나 CreateSession API에 실행 역할로 전달된 역할에 연결됩니다. 또한 이 정책은 태그 키 ‘owner’ 및 보안 주체의 AWS 사용자 ID와 일치하는 값이 제공된 경우에만 노트북에서 AWS Glue 대화형 세션을 생성할 수 있도록 허용합니다. 이 정책은 세션이 생성된 후 AWS Glue 세션 리소스에서 ‘owner’ 태그를 변경하거나 제거할 수 있는 권한을 거부합니다. 이 정책에는 Amazon S3 버킷에서 읽고 쓰기, CloudWatch 로그 쓰기, AWS Glue에서 사용되는 Amazon EC2 리소스에 대한 태그 생성 및 삭제 권한도 포함됩니다.

IAM 정책 고려 사항

대화형 세션은 AWS Glue의 IAM 리소스입니다. IAM 리소스이기 때문에 세션에 대한 액세스 및 상호 작용은 IAM 정책에 의해 관리됩니다. 클라이언트 보안 주체 또는 관리자가 구성한 실행 역할에 연결된 IAM 정책을 기반으로 클라이언트 보안 주체(사용자 또는 역할)는 새 세션을 생성하고 자신의 세션 및 다른 세션과 상호 작용할 수 있습니다.

관리자가 해당 계정의 모든 AWS Glue 리소스에 액세스할 수 있는 AWSGlueConsoleFullAccess(https://docs.aws.amazon.com/glue/latest/dg/using-identity-based-policies.html) 또는 AWSGlueServiceRole(https://docs.aws.amazon.com/glue/latest/dg/using-identity-based-policies.html)과 같은 IAM 정책을 연결한 경우 클라이언트 보안 주체는 서로 협업할 수 있습니다. 예를 들어 정책에서 허용하는 경우 한 IAM 사용자는 다른 IAM 사용자가 생성한 세션과 상호 작용할 수 있습니다.

특정 요구 사항에 맞는 정책을 구성하려면 정책용 리소스 구성에 대한 IAM 설명서를 참조하세요. 예를 들어, 어떤 IAM 사용자에 속한 세션을 격리하려면 Glue IS에서 지원하는 TagOnCreate 기능을 사용할 수 있습니다. TagOnCreate로 세션 비공개 설정 섹션을 참조하세요.