3단계: AWS Glue에 액세스하는 IAM 사용자에게 정책 연결 - AWS Glue

3단계: AWS Glue에 액세스하는 IAM 사용자에게 정책 연결

AWS Glue 콘솔 또는 AWS Command Line Interface(AWS CLI)에 로그인하는 모든 IAM 사용자는 특정 리소스에 액세스할 수 있는 권한이 필요합니다. 정책을 통해 AWS Identity and Access Management(IAM)를 사용하여 권한을 제공합니다.

이 단계가 완료되면 IAM 사용자는 다음과 같은 정책을 연결합니다.

  • AWS 관리횽 정책 AWSGlueConsoleFullAccess 또는 사용자 정책 GlueConsoleAccessPolicy

  • AWSGlueConsoleSageMakerNotebookFullAccess

  • CloudWatchLogsReadOnlyAccess

  • AWSCloudFormationReadOnlyAccess

  • AmazonAthenaFullAccess

인라인 정책을 연결하고 IAM 사용자에 포함하려면

AWS 관리형 정책 또는 인라인 정책을 IAM 사용자에게 연결하여 AWS Glue 콘솔에 액세스할 수 있습니다. 이 정책에 지정된 몇 가지 리소스는 Amazon S3 버킷, Amazon S3 ETL 스크립트, CloudWatch Logs, AWS CloudFormation 및 Amazon EC2 리소스에 대해 AWS Glue에서 사용하는 기본 이름을 나타냅니다. 간소화를 위해 AWS Glue는 기본적으로 aws-glue-*가 접두사인 계정에서 몇 가지 Amazon S3 객체를 버킷에 작성합니다.

참고

AWS 관리형 정책 AWSGlueConsoleFullAccess를 사용하면 이 단계를 생략해도 좋습니다.

중요

AWS Glue는 사용자를 대신하여 작업을 수행하는 데 사용되는 역할에 대한 권한이 필요합니다. 이 과정을 완료하려면 iam:PassRole 권한을 AWS Glue 사용자에게 부여합니다. 이 정책은 AWS Glue 서비스 역할의 경우 AWSGlueServiceRole로 시작되는 역할에 권한을 부여하고, 노트북 서버를 생성할 때 필요한 역할 중에는 AWSGlueServiceNotebookRole로 시작하는 역할에 권한을 부여합니다. 이름 전환에 따라 iam:PassRole 권한에 대한 자체 정책을 생성할 수도 있습니다.

보안 모범 사례에 따라 Amazon S3 버킷 및 Amazon CloudWatch 로그 그룹에 대한 액세스를 추가로 제한하는 정책을 강화하여 액세스를 제한하는 것이 좋습니다. Amazon S3 정책 예제는 IAM 정책 작성하기: Amazon S3 버킷으로의 액세스를 보장하는 방법을 참조하세요.

이 단계에서는AWSGlueConsoleFullAccess과 비슷한 정책을 만듭니다. IAM 콘솔에서 AWSGlueConsoleFullAccess의 최신 버전을 확인할 수 있습니다.

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 사용자를 선택합니다.

  3. 목록에서 정책을 삽입할 사용자 이름을 선택합니다.

  4. 권한 탭을 선택하고 필요하다면 Permissions policies(권한 정책) 섹션을 확장합니다.

  5. [Add Inline Policy(인라인 정책 추가)] 링크를 선택합니다.

  6. [Create Policy(정책 생성)] 화면에서 탭으로 이동하여 JSON을 편집합니다. 다음 JSON 설명으로 정책 문서를 만든 다음 [Review policy(정책 보기)]를 선택합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:*", "redshift:DescribeClusters", "redshift:DescribeClusterSubnetGroups", "iam:ListRoles", "iam:ListUsers", "iam:ListGroups", "iam:ListRolePolicies", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeVpcEndpoints", "ec2:DescribeRouteTables", "ec2:DescribeVpcAttribute", "ec2:DescribeKeyPairs", "ec2:DescribeInstances", "rds:DescribeDBInstances", "rds:DescribeDBClusters", "rds:DescribeDBSubnetGroups", "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketAcl", "s3:GetBucketLocation", "cloudformation:DescribeStacks", "cloudformation:GetTemplateSummary", "dynamodb:ListTables", "kms:ListAliases", "kms:DescribeKey", "cloudwatch:GetMetricData", "cloudwatch:ListDashboards" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*/*aws-glue-*/*", "arn:aws:s3:::aws-glue-*" ] }, { "Effect": "Allow", "Action": [ "tag:GetResources" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:PutBucketPublicAccessBlock" ], "Resource": [ "arn:aws:s3:::aws-glue-*" ] }, { "Effect": "Allow", "Action": [ "logs:GetLogEvents" ], "Resource": [ "arn:aws:logs:*:*:/aws-glue/*" ] }, { "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack" ], "Resource": "arn:aws:cloudformation:*:*:stack/aws-glue*/*" }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:image/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:volume/*" ] }, { "Effect": "Allow", "Action": [ "ec2:TerminateInstances", "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "arn:aws:ec2:*:*:instance/*" ], "Condition": { "StringLike": { "ec2:ResourceTag/aws:cloudformation:stack-id": "arn:aws:cloudformation:*:*:stack/aws-glue-*/*" }, "StringEquals": { "ec2:ResourceTag/aws:cloudformation:logical-id": "ZeppelinInstance" } } }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": "arn:aws:iam::*:role/AWSGlueServiceRole*", "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": "arn:aws:iam::*:role/AWSGlueServiceNotebookRole*", "Condition": { "StringLike": { "iam:PassedToService": [ "ec2.amazonaws.com" ] } } }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/service-role/AWSGlueServiceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } } ] }

    다음 테이블은 이 정책이 보장하는 권한을 설명합니다.

    Action 리소스 설명

    "glue:*"

    "*"

    모든 AWS Glue API 작업을 실행할 수 있는 권한을 부여합니다.

    "glue:*" 작업 없이 이전에 정책을 생성했다면 정책에 다음과 같은 개별 권한을 추가해야 합니다.

    • "glue:ListCrawlers"

    • "glue:BatchGetCrawlers"

    • "glue:ListTriggers"

    • "glue:BatchGetTriggers"

    • "glue:ListDevEndpoints"

    • "glue:BatchGetDevEndpoints"

    • "glue:ListJobs"

    • "glue:BatchGetJobs"

    "redshift:DescribeClusters", "redshift:DescribeClusterSubnetGroups"

    "*"

    Amazon Redshift로 연결을 생성하도록 허용합니다.

    "iam:ListRoles", "iam:ListRolePolicies", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies"

    "*"

    크롤러, 작업, 개발 엔드포인트 및 노트북 서버와 작업할 경우 IAM 역할 목록을 허용합니다.

    "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeVpcEndpoints", "ec2:DescribeRouteTables", "ec2:DescribeVpcAttribute", "ec2:DescribeKeyPairs", "ec2:DescribeInstances"

    "*"

    작업, 크롤러 및 개발 엔드포인트를 실행할 때 VPC와 같은 Amazon EC2 네트워크 항목의 설치를 허용합니다.

    "rds:DescribeDBInstances"

    "*"

    Amazon RDS로 연결을 생성하도록 허용합니다.

    "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketAcl", "s3:GetBucketLocation"

    "*"

    크롤러, 작업, 개발 엔드포인트 및 노트북 서버와 작업할 경우, Amazon S3 버킷 목록을 허용합니다.

    "dynamodb:ListTables"

    "*"

    DynamoDB 테이블 나열을 허용합니다.

    "kms:ListAliases", "kms:DescribeKey"

    "*"

    KMS 키 작업을 허용합니다.

    "cloudwatch:GetMetricData", "cloudwatch:ListDashboards"

    "*"

    CloudWatch 지표 작업을 허용합니다.

    "s3:GetObject", "s3:PutObject"

    "arn:aws:s3::: aws-glue-*/*", "arn:aws:s3::: */*aws-glue-*/*", "arn:aws:s3::: aws-glue-*"

    ETL 스크립트 및 노트북 서버 위치와 같은 객체를 저장할 때 Amazon S3 객체를 계정에서 얻고 넣는 것을 허용합니다.

    명명 규칙: 이름이 aws-glue-로 시작하는 Amazon S3 버킷 또는 폴더에 권한을 부여합니다.

    "tag:GetResources"

    "*"

    AWS 태그 검색을 허용합니다.

    "s3:CreateBucket", "s3:PutBucketPublicAccessBlock"

    "arn:aws:s3::: aws-glue-*"

    ETL 스크립트 및 노트북 서버 위치와 같은 객체를 저장할 때 Amazon S3 버킷을 계정에 생성하는 것을 허용합니다.

    명명 규칙: 이름이 aws-glue-로 시작하는 Amazon S3 버킷에 권한을 부여합니다.

    AWS Glue를 사용하여 퍼블릭 액세스를 차단하는 버킷을 생성합니다.

    "logs:GetLogEvents"

    "arn:aws:logs:*:*: /aws-glue/*"

    CloudWatch Logs의 검색 허용

    이름 전환: AWS Glue는 aws-glue로 시작하는 로그 투 로그 그룹 이름을 작성합니다.

    "cloudformation:CreateStack", "cloudformation:DeleteStack"

    "arn:aws:cloudformation:*:*:stack/ aws-glue*/*"

    노트북 서버로 작업할 때 AWS CloudFormation 스택 관리를 허용합니다.

    이름 전환: AWS Glue는 aws-glue로 시작하는 스택 이름을 생성합니다.

    "ec2:RunInstances"

    "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:image/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:volume/*"

    개발 엔드포인트 및 노트북 서버의 실행을 허용합니다.

    "ec2:TerminateInstances", "ec2:CreateTags", "ec2:DeleteTags"

    "arn:aws:ec2:*:*:instance/*"

    개발 엔드포인트 및 노트북 서버의 조작을 허용합니다.

    명명 규칙: 이름이 aws-glue-로 시작하고 logical-id가 ZeppelinInstance인 AWS Glue AWS CloudFormation 스택입니다.

    "iam:PassRole"

    "arn:aws:iam::*:role/ AWSGlueServiceRole*"

    AWS Glue가 AWSGlueServiceRole로 시작하는 역할에 대해 PassRole 권한을 수임하도록 허용합니다.

    "iam:PassRole"

    "arn:aws:iam::*:role/ AWSGlueServiceNotebookRole*"

    Amazon EC2가 AWSGlueServiceNotebookRole로 시작하는 역할에 대해 PassRole 권한을 수임하도록 허용합니다.

    "iam:PassRole"

    "arn:aws:iam::*:role/service-role/ AWSGlueServiceRole*"

    AWS Glue가 service-role/AWSGlueServiceRole로 시작하는 역할에 대해 PassRole 권한을 수임하도록 허용합니다.

  7. 정책 검토 화면에서 정책의 이름을 입력합니다(예: GlueConsoleAccessPolicy). 정책에 만족하면 정책 생성을 선택합니다. 화면 상단에 있는 빨간색 상자에 표시되는 오류가 있지 않은지 확인합니다. 표시되는 오류가 있다면 수정합니다.

    참고

    [Use autoformatting]을 선택하면 정책을 열거나 [Validate Policy]를 선택할 때마다 정책의 형식이 다시 지정됩니다.

AWSGlueConsoleFullAccess 관리 정책을 연결하는 방법

AWSGlueConsoleFullAccess 정책을 추가하여 AWS Glue 콘솔 사용자가 필요한 권한을 제공합니다.

참고

AWS Glue 콘솔 액세스용 자체 정책을 생성했다면 이 단계를 건너뛸 수 있습니다.

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 정책(Policies)을 선택합니다.

  3. 정책 목록에서 AWSGlueConsoleFullAccess 옆의 확인란을 선택합니다. [Filter] 메뉴와 검색 상자를 사용하여 정책 목록을 필터링할 수 있습니다.

  4. [Policy actions]를 선택한 후 [Attach]를 선택합니다.

  5. 정책을 연결하려는 사용자를 선택합니다. [Filter] 메뉴와 검색 상자를 사용하면 보안 주체 개체 목록을 필터링할 수 있습니다. 정책을 추가할 사용자를 선택한 다음 [Attach policy(정책 추가)]를 선택합니다.

AWSGlueConsoleSageMakerNotebookFullAccess 관리형 정책을 연결하려면

AWSGlueConsoleSageMakerNotebookFullAccess 정책을 사용자에게 연결해 AWS Glue 콘솔에서 생성한 SageMaker 노트북을 관리할 수 있습니다. 필요한 다른 AWS Glue 콘솔 권한 이외에도 이 정책은 SageMaker 노트북 관리에 필요한 리소스에 대한 액세스 권한을 부여합니다.

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 정책(Policies)을 선택합니다.

  3. 정책 목록에서 AWSGlueConsoleSageMakerNotebookFullAccess 옆의 확인란을 선택합니다. [Filter] 메뉴와 검색 상자를 사용하여 정책 목록을 필터링할 수 있습니다.

  4. [Policy actions]를 선택한 후 [Attach]를 선택합니다.

  5. 정책을 연결하려는 사용자를 선택합니다. [Filter] 메뉴와 검색 상자를 사용하면 보안 주체 개체 목록을 필터링할 수 있습니다. 정책을 추가할 사용자를 선택한 다음 [Attach policy(정책 추가)]를 선택합니다.

CloudWatchLogsReadOnlyAccess 관리 정책을 연결하는 방법

CloudWatchLogsReadOnlyAccess 정책을 사용자에게 연결하고 CloudWatch Logs 콘솔에서 AWS Glue가 생성한 로그를 볼 수 있습니다.

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 정책(Policies)을 선택합니다.

  3. 정책 목록에서 [CloudWatchLogsReadOnlyAccess] 이름 옆의 확인란을 선택합니다. [Filter] 메뉴와 검색 상자를 사용하여 정책 목록을 필터링할 수 있습니다.

  4. [Policy actions]를 선택한 후 [Attach]를 선택합니다.

  5. 정책을 연결하려는 사용자를 선택합니다. [Filter] 메뉴와 검색 상자를 사용하면 보안 주체 개체 목록을 필터링할 수 있습니다. 정책을 추가할 사용자를 선택한 다음 [Attach policy(정책 추가)]를 선택합니다.

AWSCloudFormationReadOnlyAccess 관리 정책을 연결하는 방법

AWSCloudFormationReadOnlyAccess 정책을 사용자에게 연결하고 AWS Glue가 사용한 AWS CloudFormation 스택을 AWS CloudFormation 콘솔에서 볼 수 있습니다.

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 정책(Policies)을 선택합니다.

  3. 정책 목록에서 AWSCloudFormationReadOnlyAccess 이름 옆의 확인란을 선택합니다. [Filter] 메뉴와 검색 상자를 사용하여 정책 목록을 필터링할 수 있습니다.

  4. [Policy actions]를 선택한 후 [Attach]를 선택합니다.

  5. 정책을 연결하려는 사용자를 선택합니다. [Filter] 메뉴와 검색 상자를 사용하면 보안 주체 개체 목록을 필터링할 수 있습니다. 정책을 추가할 사용자를 선택한 다음 [Attach policy(정책 추가)]를 선택합니다.

AmazonAthenaFullAccess 관리 정책을 추가하는 방법

AmazonAthenaFullAccess 정책을 사용자에게 연결하고 Amazon S3 데이터를 Athena 콘솔에서 볼 수 있습니다.

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 정책(Policies)을 선택합니다.

  3. 정책 목록에서 [AmazonAthenaFullAccess(Amazon Athena 완전한 액세스)] 옆의 확인란을 선택합니다. [Filter] 메뉴와 검색 상자를 사용하여 정책 목록을 필터링할 수 있습니다.

  4. [Policy actions]를 선택한 후 [Attach]를 선택합니다.

  5. 정책을 연결하려는 사용자를 선택합니다. [Filter] 메뉴와 검색 상자를 사용하면 보안 주체 개체 목록을 필터링할 수 있습니다. 정책을 추가할 사용자를 선택한 다음 [Attach policy(정책 추가)]를 선택합니다.