

# AWS Glue의 Identity and Access Management
<a name="security-iam"></a>



AWS Identity and Access Management(IAM)는 관리자가 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있도록 지원하는 AWS 서비스입니다. IAM 관리자는 어떤 사용자가 AWS Glue 리소스를 사용할 수 있는 *인증*(로그인) 및 *권한*(권한 있음)을 받을 수 있는지 제어합니다. IAM은 추가 비용 없이 사용할 수 있는 AWS 서비스입니다.

**참고**  
AWS Glue 메서드 또는 AWS Lake Formation 권한 부여를 사용하여 AWS Glue 데이터 카탈로그 내 데이터에 대한 액세스 권한을 부여할 수 있습니다. AWS Identity and Access Management(IAM) 정책을 사용하여 AWS Glue 메서드로 세분화된 액세스 제어를 수행합니다. Lake Formation은 관계형 데이터베이스 시스템의 `GRANT/REVOKE` 명령과 유사한 더 간단한 `GRANT/REVOKE` 권한 모델을 사용합니다.  
이 섹션에는 AWS Glue 메서드 사용 방법에 대한 정보를 포함합니다. Lake Formation 권한 부여 사용에 대한 자세한 내용은 *AWS Lake Formation Developer Guide*의 [Granting Lake Formation permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/lake-formation-permissions.html)를 참조하세요.

**Topics**
+ [대상](#security_iam_audience)
+ [ID를 통한 인증](#security_iam_authentication)
+ [정책을 사용하여 액세스 관리](#security_iam_access-manage)
+ [AWS Glue에서 IAM을 사용하는 방식](security_iam_service-with-iam.md)
+ [AWS Glue에 대한 IAM 권한 구성](configure-iam-for-glue.md)
+ [AWS Glue 액세스 제어 정책 예제](glue-policy-examples.md)
+ [AWS Glue에 대한 AWS 관리형 정책 부여](security-iam-awsmanpol.md)
+ [작업 실행에 대해 동적 범위의 정책 부여](dynamically-scoped-policies.md)
+ [AWS Glue 리소스 ARN 지정](glue-specifying-resource-arns.md)
+ [교차 계정 액세스 권한 부여](cross-account-access.md)
+ [AWS Glue 자격 증명 및 액세스 문제 해결](security_iam_troubleshoot.md)

## 대상
<a name="security_iam_audience"></a>

AWS Identity and Access Management(IAM)를 사용하는 방법은 역할에 따라 다릅니다.
+ **서비스 사용자** - 기능에 액세스할 수 없는 경우 관리자에게 권한 요청(참조[AWS Glue 자격 증명 및 액세스 문제 해결](security_iam_troubleshoot.md))
+ **서비스 관리자** - 사용자 액세스 결정 및 권한 요청 제출([AWS Glue에서 IAM을 사용하는 방식](security_iam_service-with-iam.md) 참조)
+ **IAM 관리자** - 액세스를 관리하기 위한 정책 작성([AWS Glue 자격 증명 기반 정책 예제](security_iam_id-based-policy-examples.md) 참조)

## ID를 통한 인증
<a name="security_iam_authentication"></a>

인증은 ID 자격 증명을 사용하여 AWS에 로그인하는 방식입니다. AWS 계정 루트 사용자이나 IAM 사용자로, 또는 IAM 역할을 수임하여 인증(에 로그인)받아야 합니다.

AWS IAM Identity Center(IAM Identity Center), Single Sign-On 인증 또는 Google/Facebook 자격 증명과 같은 자격 증명 소스의 자격 증명을 사용하여 페더레이션 ID로 로그인할 수 있습니다. 로그인하는 방법에 대한 자세한 내용은 *AWS Sign-In사용 설명서*의 [AWS 계정에 로그인하는 방법](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) 섹션을 참조하세요.

프로그래밍 방식 액세스를 위해 AWS는 요청에 암호화 방식으로 서명할 수 있는 SDK 및 CLI를 제공합니다. 자세한 내용은 *IAM 사용 설명서*의 [API 요청용 AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) 섹션을 참조하세요.

### AWS 계정 루트 사용자
<a name="security_iam_authentication-rootuser"></a>

 AWS 계정을 생성하는 경우에는 모든 AWS 서비스 서비스와 리소스에 대한 완전한 액세스 권한이 있는 AWS 계정 *루트 사용자*라는 단일 로그인 ID로 시작합니다. 일상적인 태스크에 루트 사용자를 사용하지 않을 것을 강력히 권장합니다. 루트 사용자 자격 증명이 필요한 작업은 *IAM 사용 설명서*의 [루트 사용자 자격 증명이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) 섹션을 참조하세요.

### 페더레이션 ID
<a name="security_iam_authentication-federated"></a>

가장 좋은 방법은 인간 사용자가 ID 공급자와의 페더레이션을 사용하여 임시 자격 증명으로 AWS 서비스에 액세스하도록 하는 것입니다.

*페더레이션 ID*는 엔터프라이즈 사용자 디렉터리, 웹 ID 제공업체 또는 Directory Service의 사용자로, ID의 자격 증명을 사용하여 AWS 서비스에 액세스합니다. 페더레이션 ID는 임시 자격 증명을 제공하는 역할을 수임합니다.

중앙 집중식 액세스 관리를 위해 AWS IAM Identity Center를 추천합니다. 자세한 정보는 *AWS IAM Identity Center사용 설명서*의 [What is IAM Identity Center?](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)를 참조하세요.

### IAM 사용자 및 그룹
<a name="security_iam_authentication-iamuser"></a>

*[IAM 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*는 단일 개인 또는 애플리케이션에 대한 특정 권한을 가진 ID입니다. 장기 자격 증명이 있는 IAM 사용자 대신 임시 자격 증명을 사용하는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*에서 [임시 자격 증명을 사용하여 AWS에 액세스하려면 인간 사용자가 ID 제공업체와의 페더레이션을 사용하도록 요구](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)를 참조하세요.

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)은 IAM 사용자 모음을 지정하고 대규모 사용자 집합에 대한 관리 권한을 더 쉽게 만듭니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자 사용 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) 섹션을 참조하세요.

### IAM 역할
<a name="security_iam_authentication-iamrole"></a>

*[IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*은 임시 자격 증명을 제공하는 특정 권한이 있는 자격 증명입니다. [사용자에서 IAM 역할(콘솔)로 전환](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)하거나 AWS CLI 또는 AWS API 작업을 직접적으로 호출하여 역할을 수임할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [역할 수임 방법](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)을 참조하세요.

IAM 역할은 페더레이션 사용자 액세스, 임시 IAM 사용자 권한, 교차 계정 액세스, 교차 서비스 액세스 및 Amazon EC2에서 실행되는 애플리케이션에 유용합니다. 자세한 내용은 *IAM 사용 설명서*의 [교차 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.

## 정책을 사용하여 액세스 관리
<a name="security_iam_access-manage"></a>

정책을 생성하고 AWS ID 또는 리소스에 연결하여 AWS에서 내 액세스를 제어합니다. 정책은 자격 증명이나 리소스와 연결될 때 해당 권한을 정의합니다. AWS는 보안 주체가 요청을 보낼 때 이러한 정책을 평가합니다. 대부분의 정책은 AWS에 JSON 문서로 저장됩니다. JSON 정책 문서에 대한 자세한 내용은 *IAM 사용 설명서*의 [JSON 정책 개요](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) 섹션을 참조하세요.

정책을 사용하여 관리자는 어떤 **보안 주체**가 어떤 **리소스**에 대해 어떤 **조건**에서 **작업**을 수행할 수 있는지 정의하여 누가 무엇을 액세스할 수 있는지 지정합니다.

기본적으로 사용자 및 역할에는 어떠한 권한도 없습니다. IAM 관리자는 IAM 정책을 생성하고 사용자가 수임할 수 있는 역할에 추가합니다. IAM 정책은 작업을 수행하기 위해 사용하는 방법과 관계없이 작업에 대한 권한을 정의합니다.

### ID 기반 정책
<a name="security_iam_access-manage-id-based-policies"></a>

ID 기반 정책은 ID(사용자, 사용자 그룹 또는 역할)에 연결하는 JSON 권한 정책 문서입니다. 이러한 정책은 자격 증명이 수행할 수 있는 작업, 대상 리소스 및 이에 관한 조건을 제어합니다. ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*에서 [고객 관리형 정책으로 사용자 지정 IAM 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)를 참조하세요.

ID 기반 정책은 *인라인 정책*(단일 ID에 직접 포함) 또는 *관리형 정책*(여러 ID에 연결된 독립 실행형 정책)일 수 있습니다. 관리형 정책 또는 인라인 정책을 선택하는 방법을 알아보려면 *IAM 사용 설명서*의 [관리형 정책 및 인라인 정책 중에서 선택](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) 섹션을 참조하세요.

### 리소스 기반 정책
<a name="security_iam_access-manage-resource-based-policies"></a>

리소스 기반 정책은 리소스에 연결하는 JSON 정책 설명서입니다. 예를 들어 IAM *역할 신뢰 정책* 및 Amazon S3 *버킷 정책*이 있습니다. 리소스 기반 정책을 지원하는 서비스에서 서비스 관리자는 이러한 정책을 사용하여 특정 리소스에 대한 액세스를 통제할 수 있습니다. 리소스 기반 정책에서 [보안 주체를 지정](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)해야 합니다.

리소스 기반 정책은 해당 서비스에 있는 인라인 정책입니다. 리소스 기반 정책에서는 IAM의 AWS관리형 정책을 사용할 수 없습니다.

### 기타 정책 유형
<a name="security_iam_access-manage-other-policies"></a>

AWS는 이러한 정책 타입이 부여하는 최대 권한을 설정할 수 있는 추가 정책 타입을 지지합니다.
+ **권한 경계** - ID 기반 정책에서 IAM 엔터티에 부여할 수 있는 최대 권한을 설정합니다. 자세한 정보는 *IAM 사용 설명서*의 [IAM 엔터티의 권한 범위](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)를 참조하세요.
+ **서비스 제어 정책(SCP)** - AWS Organizations내 조직 또는 조직 단위에 대한 최대 권한을 지정합니다. 자세한 내용은 AWS Organizations사용 설명서의 [서비스 제어 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)을 참조하세요.**
+ **리소스 제어 정책(RCP)** – 계정의 리소스에 사용할 수 있는 최대 권한을 설정합니다. 자세한 내용은 *AWS Organizations사용 설명서*의 [리소스 제어 정책(RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)을 참조하세요.
+ **세션 정책** – 역할 또는 페더레이션 사용자에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 고급 정책입니다. 자세한 내용은 *IAM 사용 설명서*의 [세션 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)을 참조하세요.

### 여러 정책 유형
<a name="security_iam_access-manage-multiple-policies"></a>

여러 정책 유형이 요청에 적용되는 경우, 결과 권한은 이해하기가 더 복잡합니다. 여러 정책 유형이 관련될 때 AWS가 요청을 허용할지를 결정하는 방법을 알아보려면 IAM 사용 설명서**의 [정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)을 참조하세요.

# AWS Glue에서 IAM을 사용하는 방식
<a name="security_iam_service-with-iam"></a>

IAM을 사용하여 AWS Glue에 대한 액세스를 관리하기 전에 AWS Glue와 함께 사용할 수 있는 IAM 기능을 알아보세요.






**AWS Glue를 통해 사용할 수 있는 IAM 기능**  

| IAM 특성 | AWS Glue 지원 | 
| --- | --- | 
|  [자격 증명 기반 정책](#security_iam_service-with-iam-id-based-policies)  |   예  | 
|  [리소스 기반 정책](#security_iam_service-with-iam-resource-based-policies)  |   부분적  | 
|  [정책 작업](#security_iam_service-with-iam-id-based-policies-actions)  |   예  | 
|  [정책 리소스](#security_iam_service-with-iam-id-based-policies-resources)  |   예  | 
|  [정책 조건 키(서비스별)](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   예  | 
|  [ACL](#security_iam_service-with-iam-acls)  |   아니요   | 
|  [ABAC(정책 내 태그)](#security_iam_service-with-iam-tags)  |   부분적  | 
|  [임시 자격 증명](#security_iam_service-with-iam-roles-tempcreds)  |   예  | 
|  [위탁자 권한](#security_iam_service-with-iam-principal-permissions)  |   아니요   | 
|  [서비스 역할](#security_iam_service-with-iam-roles-service)  |   예  | 
|  [서비스 연결 역할](#security_iam_service-with-iam-roles-service-linked)  |   아니요   | 

AWS Glue 및 기타 AWS 서비스에서 대부분의 IAM 기능을 사용하는 방법을 전체적으로 알아보려면 *IAM 사용 설명서*의 [IAM으로 작업하는 AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)를 참조하세요.

## AWS Glue에 대한 자격 증명 기반 정책
<a name="security_iam_service-with-iam-id-based-policies"></a>

**ID 기반 정책 지원:** 예

ID 기반 정책은 IAM 사용자, 사용자 그룹 또는 역할과 같은 ID에 연결할 수 있는 JSON 권한 정책 문서입니다. 이러한 정책은 사용자 및 역할이 어떤 리소스와 어떤 조건에서 어떤 작업을 수행할 수 있는지를 제어합니다. 자격 증명 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*에서 [고객 관리형 정책으로 사용자 지정 IAM 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)를 참조하세요.

IAM ID 기반 정책을 사용하면 허용되거나 거부되는 작업과 리소스뿐 아니라 작업이 허용되거나 거부되는 조건을 지정할 수 있습니다. JSON 정책에서 사용할 수 있는 모든 요소에 대해 알아보려면 *IAM 사용 설명서*의 [IAM JSON 정책 요소 참조](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)를 참조하세요.

AWS Glue는 모든 AWS Glue 작업에 대해 자격 증명 기반 정책(IAM 정책)을 지원합니다. 정책을 연결하여 AWS Glue Data Catalog의 테이블과 같은 AWS Glue 리소스를 생성, 액세스 또는 수정할 수 있는 권한을 부여할 수 있습니다.

### AWS Glue 자격 증명 기반 정책 예제
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



AWS Glue 자격 증명 기반 정책의 예를 보려면 [AWS Glue 자격 증명 기반 정책 예제](security_iam_id-based-policy-examples.md) 섹션을 참조하세요.

## AWS Glue 내의 리소스 기반 정책
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**리소스 기반 정책 지원:** 부분적

리소스 기반 정책은 리소스에 연결하는 JSON 정책 설명서입니다. 리소스 기반 정책의 예제는 IAM *역할 신뢰 정책*과 Amazon S3 *버킷 정책*입니다. 리소스 기반 정책을 지원하는 서비스에서 서비스 관리자는 이러한 정책을 사용하여 특정 리소스에 대한 액세스를 통제할 수 있습니다. 정책이 연결된 리소스의 경우 정책은 지정된 보안 주체가 해당 리소스와 어떤 조건에서 어떤 작업을 수행할 수 있는지를 정의합니다. 리소스 기반 정책에서 [보안 주체를 지정](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)해야 합니다. 위탁자에는 계정, 사용자, 역할, 페더레이션 사용자 또는 AWS 서비스가 포함될 수 있습니다.

교차 계정 액세스를 활성화하려는 경우, 전체 계정이나 다른 계정의 IAM 개체를 리소스 기반 정책의 보안 주체로 지정할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM에서 교차 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.

**참고**  
AWS Glue 리소스 정책은 데이터 카탈로그 리소스에 대한 권한을 관리하는 데에만 사용할 수 있습니다. 작업, 트리거, 개발 엔드포인트, 크롤러 또는 분류자 등과 같은 다른 AWS Glue 리소스에는 리소스 정책을 연결할 수 없습니다.  
카탈로그당 **하나의 리소스 정책만 허용되며, 크기는 10KB로 제한됩니다.

AWS Glue에서 리소스 정책은 앞에서 언급한 모든 종류의 데이터 카탈로그 리소스에 대한 가상 컨테이너인 *카탈로그*에 연결됩니다. 각 AWS 계정은 카탈로그 ID가 AWS 계정 ID와 동일한 AWS 리전의 단일 카탈로그를 소유합니다. 카탈로그는 삭제하거나 수정할 수 없습니다.

리소스 정책은 호출자 보안 주체가 정책 문서의 `"Principal"` 블록에 포함되어 있는 카탈로그에 대한 모든 API 호출에 대해 평가됩니다.



AWS Glue 리소스 기반 정책의 예제는 [AWS Glue용 리소스 기반 정책 예제](security_iam_resource-based-policy-examples.md) 섹션을 참조하세요.

## AWS Glue 정책 작업
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**정책 작업 지원:** 예

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지를 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

JSON 정책의 `Action`요소는 정책에서 액세스를 허용하거나 거부하는 데 사용할 수 있는 작업을 설명합니다. 연결된 작업을 수행할 수 있는 권한을 부여하기 위한 정책에 작업을 포함하세요.



AWS Glue 작업 목록을 보려면 *서비스 인증 참조*에서 [AWS Glue로 정의되는 작업](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-actions-as-permissions)을 참조하세요.

AWS Glue의 정책 작업은 작업 앞에 다음 접두사를 사용합니다.

```
glue
```

단일 문에서 여러 작업을 지정하려면 쉼표로 구분합니다.

```
"Action": [
      "glue:action1",
      "glue:action2"
         ]
```





와일드카드(\$1)를 사용하여 여러 작업을 지정할 수 있습니다. 예를 들어, `Get`라는 단어로 시작하는 모든 작업을 지정하려면 다음 작업을 포함합니다.

```
"Action": "glue:Get*"
```

정책 예시를 보려면 [AWS Glue 액세스 제어 정책 예제](glue-policy-examples.md)를 참조하세요.

## AWS Glue 정책 리소스
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**정책 리소스 지원:** 예

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지를 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

`Resource` JSON 정책 요소는 작업이 적용되는 하나 이상의 객체를 지정합니다. 모범 사례에 따라 [Amazon 리소스 이름(ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)을 사용하여 리소스를 지정합니다. 리소스 수준 권한을 지원하지 않는 작업의 경우, 와일드카드(\$1)를 사용하여 해당 문이 모든 리소스에 적용됨을 나타냅니다.

```
"Resource": "*"
```

ARN을 사용하여 AWS Glue 리소스에 대한 액세스를 제어하는 방법에 대한 자세한 내용은 [AWS Glue 리소스 ARN 지정](glue-specifying-resource-arns.md) 섹션을 참조하세요.

AWS Glue 리소스 유형 및 해당 ARN의 목록을 보려면 *서비스 승인 참조*의 [AWS Glue에서 정의한 리소스](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-resources-for-iam-policies)를 참조하세요. 각 리소스의 ARN을 지정할 수 있는 작업을 알아보려면 [AWS Glue에서 정의한 작업](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-actions-as-permissions)을 참조하세요.



## AWS Glue 정책 조건 키
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**서비스별 정책 조건 키 지원:** 예

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지를 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

`Condition` 요소는 정의된 기준에 따라 문이 실행되는 시기를 지정합니다. 같음(equals) 또는 미만(less than)과 같은 [조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)를 사용하여 정책의 조건을 요청의 값과 일치시키는 조건식을 생성할 수 있습니다. 모든 AWS 전역 조건 키를 보려면 *IAM 사용자 설명서*의 [AWS 전역 조건 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)를 참조하세요.

AWS Glue 조건 키 목록을 보려면 *서비스 승인 참조*의 [AWS Glue의 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-policy-keys)를 참조하세요. 조건 키를 사용할 수 있는 작업과 리소스를 알아보려면 [AWS Glue가 정의한 작업](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-actions-as-permissions)을 참조하세요.

정책 예시를 보려면 [조건 키 또는 컨텍스트 키를 사용하여 설정 제어](security_iam_id-based-policy-examples.md#glue-identity-based-policy-condition-keys)를 참조하세요.

## AWS Glue의 ACL
<a name="security_iam_service-with-iam-acls"></a>

**ACL 지원:** 아니요 

액세스 제어 목록(ACL)은 어떤 보안 주체(계정 멤버, 사용자 또는 역할)가 리소스에 액세스할 수 있는 권한을 가지고 있는지를 제어합니다. ACL은 JSON 정책 문서 형식을 사용하지 않지만 리소스 기반 정책과 유사합니다.

## ABAC와 AWS Glue
<a name="security_iam_service-with-iam-tags"></a>

**ABAC 지원(정책의 태그):** 부분적

속성 기반 액세스 제어(ABAC)는 태그라고 불리는 속성을 기반으로 권한을 정의하는 권한 부여 전략입니다. IAM 엔터티 및 AWS 리소스에 태그를 연결하면 보안 주체의 태그가 리소스 태그와 일치할 때 작업을 허용하도록 ABAC 정책을 설계할 수 있습니다.

태그에 근거하여 액세스를 제어하려면 `aws:ResourceTag/key-name`, `aws:RequestTag/key-name`또는 `aws:TagKeys`조건 키를 사용하여 정책의 [조건 요소](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)에 태그 정보를 제공합니다.

서비스가 모든 리소스 유형에 대해 세 가지 조건 키를 모두 지원하는 경우, 값은 서비스에 대해 **예**입니다. 서비스가 일부 리소스 유형에 대해서만 세 가지 조건 키를 모두 지원하는 경우, 값은 **부분적**입니다.

ABAC에 대한 자세한 내용은 *IAM 사용 설명서*의 [ABAC 권한 부여를 통한 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)를 참조하세요. ABAC 설정 단계가 포함된 자습서를 보려면 *IAM 사용 설명서*의 [속성 기반 액세스 제어(ABAC) 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)을 참조하세요.

**중요**  
조건 컨텍스트 키는 크롤러, 작업, 트리거 및 개발 엔드포인트에서 AWS Glue API 작업에만 적용됩니다. 영향을 받는 API 작업에 대한 자세한 내용은 [AWS Glue의 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-policy-keys)를 참조하세요.  
AWS Glue 데이터 카탈로그 API 작업은 현재 `aws:referer` 및 `aws:UserAgent` 글로벌 조건 컨텍스트 키를 지원하지 않습니다.

리소스의 태그를 기반으로 리소스에 대한 액세스를 제한하는 자격 증명 기반 정책의 예시는 [태그를 사용한 액세스 권한 부여](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-allow)에서 확인할 수 있습니다.

## AWS Glue에서 임시 자격 증명 사용
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**임시 자격 증명 지원:** 예

임시 자격 증명은 AWS리소스에 대한 단기 액세스를 제공하며 페더레이션 또는 전환 역할을 사용할 때 자동으로 생성됩니다. AWS에서는 장기 액세스 키를 사용하는 대신 임시 자격 증명을 동적으로 생성할 것을 권장합니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 임시 보안 자격 증명](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) 및 [IAM으로 작업하는 AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) 섹션을 참조하세요.

## AWS Glue의 서비스 간 보안 주체 권한
<a name="security_iam_service-with-iam-principal-permissions"></a>

**전달 액세스 세션(FAS) 지원:** 아니요 

 전달 액세스 세션(FAS)은 AWS 서비스를 직접 호출하는 위탁자의 권한과 요청하는 AWS 서비스를 함께 사용하여 다운스트림 서비스에 대한 요청을 수행합니다. FAS 요청 시 정책 세부 정보는 [전달 액세스 세션](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)을 참조하세요.

## AWS Glue의 서비스 역할
<a name="security_iam_service-with-iam-roles-service"></a>

**서비스 역할 지원:** 예

 서비스 역할은 서비스가 사용자를 대신하여 작업을 수행하는 것으로 가정하는 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)입니다. IAM 관리자는 IAM 내에서 서비스 역할을 생성, 수정 및 삭제할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 서비스 AWS에 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하세요.

**주의**  
서비스 역할에 대한 권한을 변경하면 AWS Glue 기능이 중단될 수 있습니다. AWS Glue가 관련 지침을 제공하는 경우에만 서비스 역할을 편집합니다.

AWS Glue의 서비스 역할 생성에 대한 자세한 지침은 [1단계: AWS Glue 서비스를 위한 IAM 정책 생성](create-service-policy.md) 및 [2단계: AWS Glue에 대한 IAM 역할 생성](create-an-iam-role.md) 섹션을 참조하세요.

## AWS Glue에 대한 서비스 연결 역할
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**서비스 연결 역할 지원:** 아니요 

 서비스 연결 역할은 AWS 서비스에 연결된 서비스 역할의 한 유형입니다. 서비스는 사용자를 대신하여 작업을 수행하기 위해 역할을 수임할 수 있습니다. 서비스 연결 역할은 AWS 계정에 나타나고, 서비스가 소유합니다. IAM 관리자는 서비스 연결 역할의 권한을 볼 수 있지만 편집은 할 수 없습니다.

서비스 연결 역할 생성 또는 관리에 대한 자세한 내용은 [IAM으로 작업하는 AWS서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)를 참조하세요. **서비스 연결 역할** 열에서 `Yes`가 포함된 서비스를 테이블에서 찾습니다. 해당 서비스에 대한 서비스 연결 역할 설명서를 보려면 **예(Yes)** 링크를 선택합니다.

# AWS Glue에 대한 IAM 권한 구성
<a name="configure-iam-for-glue"></a>

AWS Identity and Access Management(IAM)를 사용하여 AWS Glue에서 리소스에 액세스하는 데 사용하는 정책과 역할을 정의합니다. 다음 단계는 AWS Glue에 대한 권한 설정을 위한 다양한 옵션을 소개합니다. 비즈니스의 요구 사항에 따라 리소스 액세스를 추가하거나 줄여야 할 경우도 있습니다.

**참고**  
대신 AWS Glue에 대한 기본 IAM 권한으로 시작하려면 [AWS Glue에 대한 IAM 권한 설정](set-up-iam.md) 섹션을 참조하세요.

1. [AWS Glue 서비스를 위한 IAM 정책 생성](create-service-policy.md): AWS Glue 리소스에 액세스하도록 허용하는 서비스 정책을 생성합니다.

1. [AWS Glue에 대한 IAM 역할 생성](create-an-iam-role.md): IAM 역할을 생성하고 AWS Glue에서 사용하는 Amazon Simple Storage Service(Amazon S3) 리소스에 대한 AWS Glue 서비스 정책 및 정책을 연결합니다.

1. [AWS Glue에 액세스하는 사용자 또는 그룹에 정책 연결](attach-policy-iam-user.md): AWS Glue 콘솔에 로그인하는 모든 사용자 또는 그룹에 정책을 연결합니다.

1. [노트북용 IAM 정책 생성](create-notebook-policy.md): 개발 엔드포인트에서 노트북 서버 생성에 사용할 노트북 서버 정책을 생성합니다.

1. [노트북용 IAM 역할 생성](create-an-iam-role-notebook.md): IAM 역할을 생성하고 노트북 서버 정책을 연결합니다.

1. [Amazon SageMaker AI 노트북에 대한 IAM 정책 생성](create-sagemaker-notebook-policy.md): 개발 엔드포인트에서 Amazon SageMaker AI 노트북을 생성할 때 사용할 IAM 정책을 생성합니다.

1. [Amazon SageMaker AI 노트북용 IAM 역할 생성](create-an-iam-role-sagemaker-notebook.md): IAM 역할을 생성하고 개발 엔드포인트에서 Amazon SageMaker AI 노트북을 생성할 때 권한을 부여하는 정책을 연결합니다.

# 1단계: AWS Glue 서비스를 위한 IAM 정책 생성
<a name="create-service-policy"></a>

Amazon S3 객체에 액세스하는 것처럼 다른 AWS 리소스의 데이터에 액세스하는 작업의 경우, 사용자를 대신하여 리소스에 액세스할 수 있는 권한이 AWS Glue에 있어야 합니다. AWS Identity and Access Management(IAM)을 사용하여 그러한 권한을 제공합니다.

**참고**  
AWS 관리형 정책 `AWSGlueServiceRole`을 사용하면 이 단계를 생략해도 좋습니다.

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

**AWS Glue를 위한 IAM 정책을 생성하려면**

이 정책은 몇 가지 Amazon S3 작업에 대한 권한을 부여하여 이 정책에 따른 역할을 AWS Glue에서 맡을 때 필요한 계정 내 리소스를 관리할 수 있도록 합니다. 이 정책에 지정된 몇 가지 리소스는 Amazon S3 버킷, Amazon S3 ETL 스크립트, CloudWatch Logs 및 Amazon EC2 리소스에 대해 AWS Glue에서 사용하는 기본 이름을 나타냅니다. 간소화를 위해 AWS Glue는 기본적으로 `aws-glue-*`가 접두사인 계정에서 몇 가지 Amazon S3 객체를 버킷에 작성합니다.

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

1. 왼쪽 탐색 창에서 **정책**을 선택합니다.

1. **정책 생성**을 선택하세요.

1. [**Create Policy(정책 생성)**] 화면에서 탭으로 이동하여 JSON을 편집합니다. 다음 JSON 설명으로 정책 문서를 만든 다음 [**Review policy(정책 보기)**]를 선택합니다.
**참고**  
Amazon S3 리소스에 필요한 모든 액세스를 추가합니다. 필요한 리소스만의 액세스 정책에 대한 리소스 섹션의 범위를 정하고자 할 수 있습니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:*",
           "s3:GetBucketLocation",
           "s3:ListBucket",
           "s3:ListAllMyBuckets",
           "s3:GetBucketAcl",
           "ec2:DescribeVpcEndpoints",
           "ec2:DescribeRouteTables",
           "ec2:CreateNetworkInterface",
           "ec2:DeleteNetworkInterface",
           "ec2:DescribeNetworkInterfaces",
           "ec2:DescribeSecurityGroups",
           "ec2:DescribeSubnets",
           "ec2:DescribeVpcAttribute",
           "iam:ListRolePolicies",
           "iam:GetRole",
           "iam:GetRolePolicy",
           "cloudwatch:PutMetricData"
         ],
         "Resource": [
           "*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:CreateBucket",
           "s3:PutBucketPublicAccessBlock"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue-*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue-*/*",
           "arn:aws:s3:::*/*aws-glue-*/*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject"
         ],
         "Resource": [
           "arn:aws:s3:::crawler-public*",
           "arn:aws:s3:::aws-glue-*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents",
           "logs:AssociateKmsKey"
         ],
         "Resource": [
           "arn:aws:logs:*:*:log-group:/aws-glue/*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "ec2:CreateTags",
           "ec2:DeleteTags"
         ],
         "Condition": {
           "ForAllValues:StringEquals": {
             "aws:TagKeys": [
               "aws-glue-service-resource"
             ]
           }
         },
         "Resource": [
           "arn:aws:ec2:*:*:network-interface/*",
           "arn:aws:ec2:*:*:security-group/*",
           "arn:aws:ec2:*:*:instance/*"
         ]
       }
     ]
   }
   ```

------

   다음 테이블은 이 정책이 보장하는 권한을 설명합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/create-service-policy.html)

1. **정책 검토** 화면에서 **정책 이름**을 입력합니다(예: **GlueServiceRolePolicy**). 조건부 설명을 입력하고 정책에 만족하면 **정책 생성**을 선택합니다.

# 2단계: AWS Glue에 대한 IAM 역할 생성
<a name="create-an-iam-role"></a>

AWS Glue가 사용자 대신 다른 서비스를 호출할 때 이용할 수 있도록 IAM 역할 권한을 부여해야 합니다. 여기에는 AWS Glue에서 사용하는 소스, 대상, 스크립트 및 임시 디렉터리에 대한 Amazon S3 액세스 권한이 포함됩니다. 크롤러, 작업 및 개발 엔드포인트는 권한이 필요합니다.

AWS Identity and Access Management(IAM)을 사용하여 그러한 권한을 제공합니다. IAM 역할에 정책을 추가하여 AWS Glue에 전달합니다.

****작업 편집기 내에서 IAM 역할을 생성하려면 다음을 수행합니다.****

1. AWS Glue 콘솔에서 작업을 생성할 때 역할 섹션을 찾습니다.

1. **Create new role**(새 역할 생성)을 선택합니다.

1. 인라인 역할 생성 양식이 열리고 다음을 수행할 수 있습니다.
   + **역할 이름**을 지정합니다. 예: `AWSGlueServiceRoleDefault`.
   + 관리형 정책 `AWSGlueServiceRole`이(가) 자동으로 선택됩니다.
   + 신뢰 정책을 검토하여 역할을 수임합니다.
   + 메타데이터에 대한 선택적 태그를 추가합니다.

1. **역할 생성**을 선택합니다.

1. 새로 생성된 역할은 작업에 대해 자동으로 선택됩니다.

또는 IAM 콘솔을 사용하여 역할을 생성할 수 있습니다.

****IAM 콘솔을 사용하여 AWS Glue에 대해 IAM 역할을 생성하려면 다음을 수행합니다.****

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

1. 왼쪽 탐색 창에서 **역할**을 선택합니다.

1. **역할 생성**을 선택합니다.

1.  신뢰할 수 있는 엔터티 유형으로서 **AWS 서비스**를 선택합니다. 그런 다음, 서비스 또는 사용 사례의 경우 **AWS Glue**을(를) 찾아서 선택합니다. **다음**을 선택합니다.

1. **권한 추가** 페이지에서 필요한 권한이 포함된 정책을 선택합니다. 예를 들어 일반 AWS Glue 권한에 대한 AWS 관리형 정책 `AWSGlueServiceRole`와(과) Amazon S3 리소스에 대한 액세스에 대한 AWS 관리형 정책 **AmazonS3FullAccess**가 있습니다. 그리고 **다음**을 선택합니다.
**참고**  
이 역할의 정책 중 하나가 Amazon S3 소스 및 대상에 대한 권한을 보장한다는 것을 확인합니다. 특정 Amazon S3 리소스에 액세스를 위한 자체 정책을 제공하고자 할 수 있습니다. 데이터 원본은 `s3:ListBucket` 및 `s3:GetObject` 권한을 요구합니다. 데이터 대상은 `s3:ListBucket`, `s3:PutObject` 및 `s3:DeleteObject` 권한을 요구합니다. 리소스에 대한 Amazon S3 정책을 생성하는 방법은 [정책에서 리소스 지정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-arn-format.html)을 참조하세요. Amazon S3 정책 예제는 [IAM 정책 작성하기: Amazon S3 버킷으로의 액세스를 보장하는 방법](https://aws.amazon.com/blogs/security/writing-iam-policies-how-to-grant-access-to-an-amazon-s3-bucket/)을 참조하세요.  
SSE-KMS로 암호화된 Amazon S3 소스 및 대상에 액세스하고자 할 경우, AWS Glue 크롤러, 작업 및 개발 엔드포인트가 데이터를 복호화할 수 있게 허용하는 정책을 연결합니다. 자세한 내용은 [AWS KMS 관리형 키(SSE-KMS)를 사용하는 서버 측 암호화로 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)를 참조하세요.  
다음은 예입니다.  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt"
         ],
         "Resource": [
           "arn:aws:kms:*:111122223333:key/key-id"
         ]
       }
     ]
   }
   ```

1.  역할 이름을 지정하고 설명(선택 사항)을 추가한 다음, 신뢰 정책 및 권한을 검토하세요. [**역할 이름(Role name)**]에 역할 이름을 입력합니다(예: `AWSGlueServiceRoleDefault`). 이름의 접두사가 문자열 `AWSGlueServiceRole`인 역할을 생성하고, 콘솔 사용자가 서비스로 해당 역할을 전달할 수 있도록 합니다. AWS Glue가 제공한 정책에서는 IAM 서비스 역할이 `AWSGlueServiceRole`로 시작될 것으로 예상합니다. 그렇지 않으면 정책을 추가하여 IAM 역할에 대한 `iam:PassRole` 권한을 사용자에게 부여하고 이름 규정과 일치시켜야 합니다. **역할 생성**을 선택합니다.
**참고**  
역할이 있는 노트북을 생성하면 해당 역할이 대화형 세션으로 전달되므로 두 위치에서 동일한 역할을 사용할 수 있습니다. 따라서 `iam:PassRole` 권한은 역할의 정책의 일부여야 합니다.  
다음 예제를 사용하여 역할에 대한 새 정책을 생성합니다. 계정 번호를 사용자의 고유한 역할 이름으로 바꿉니다.  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "iam:PassRole",
         "Resource": "arn:aws:iam::090000000210:role/<role_name>"
       }
     ]
   }
   ```

1.  규칙에 태그를 추가합니다(선택 사항). 태그는 리소스를 식별, 구성 또는 검색하는 데 도움이 되는 AWS 리소스에 추가할 수 있는 키-값 쌍입니다. 그런 다음 **역할 생성**을 선택합니다.

# 3단계: AWS Glue에 액세스하는 사용자 또는 그룹에 정책 연결
<a name="attach-policy-iam-user"></a>

관리자는 AWS Glue 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 모든 사용자, 그룹 또는 역할에 권한을 할당해야 합니다. 정책을 통해 AWS Identity and Access Management(IAM)를 사용하여 권한을 제공합니다. 이 단계에서는 사용자 또는 그룹에 권한을 할당하는 방법을 설명합니다.

이 단계가 완료되면 사용자 또는 그룹은 다음과 같은 정책이 연결됩니다.
+ AWS 관리횽 정책 `AWSGlueConsoleFullAccess` 또는 사용자 정책 **GlueConsoleAccessPolicy**
+ **`AWSGlueConsoleSageMakerNotebookFullAccess`**
+ **`CloudWatchLogsReadOnlyAccess`**
+ **`AWSCloudFormationReadOnlyAccess`**
+ **`AmazonAthenaFullAccess`**

**인라인 정책을 연결하여 사용자 또는 그룹에 추가하는 방법**

AWS 관리형 정책 또는 인라인 정책을 사용자 또는 그룹에 연결하여 AWS Glue 콘솔에 액세스할 수 있습니다. 이 정책에 지정된 몇 가지 리소스는 Amazon S3 버킷, Amazon S3 ETL 스크립트, CloudWatch Logs, 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 버킷으로의 액세스를 보장하는 방법](https://aws.amazon.com/blogs/security/writing-iam-policies-how-to-grant-access-to-an-amazon-s3-bucket/)을 참조하세요.

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

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

1. 탐색 창에서 **사용자** 또는 **사용자 그룹**을 선택합니다.

1. 목록에서 정책을 삽입할 사용자 또는 그룹 이름을 선택합니다.

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

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

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

------
#### [ JSON ]

****  

   ```
   {
     "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/*"
         ]
       },
       {
         "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"
             ]
           }
         }
       }
     ]
   }
   ```

------

   다음 테이블은 이 정책이 보장하는 권한을 설명합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/attach-policy-iam-user.html)

1. **정책 검토** 화면에서 정책의 이름을 입력합니다(예: **GlueConsoleAccessPolicy**). 정책에 만족하면 **정책 생성**을 선택합니다. 화면 상단에 있는 빨간색 상자에 표시되는 오류가 있지 않은지 확인합니다. 표시되는 오류가 있다면 수정합니다.
**참고**  
[**Use autoformatting**]을 선택하면 정책을 열거나 [**Validate Policy**]를 선택할 때마다 정책의 형식이 다시 지정됩니다.

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

`AWSGlueConsoleFullAccess` 정책을 추가하여 AWS Glue 콘솔 사용자가 필요한 권한을 제공합니다.
**참고**  
AWS Glue 콘솔 액세스용 자체 정책을 생성했다면 이 단계를 건너뛸 수 있습니다.

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

1. 탐색 창에서 **정책**을 선택합니다.

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

1. **정책 조치**를 선택한 후 **연결**을 선택합니다.

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

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

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

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

1. 탐색 창에서 **정책**을 선택합니다.

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

1. **정책 조치**를 선택한 후 **연결**을 선택합니다.

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

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

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

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

1. 탐색 창에서 **정책**을 선택합니다.

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

1. **정책 조치**를 선택한 후 **연결**을 선택합니다.

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

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

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

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

1. 탐색 창에서 **정책**을 선택합니다.

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

1. **정책 조치**를 선택한 후 **연결**을 선택합니다.

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

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

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

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

1. 탐색 창에서 **정책**을 선택합니다.

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

1. **정책 조치**를 선택한 후 **연결**을 선택합니다.

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

# 4단계: 노트북 서버용 IAM 정책 생성
<a name="create-notebook-policy"></a>

개발 엔드포인트로 노트북을 사용하고자 한다면 노트북 서버를 생성할 때 권한을 지정해야 합니다. AWS Identity and Access Management(IAM)을 사용하여 그러한 권한을 제공합니다.

이 정책은 몇 가지 Amazon S3 작업에 대한 권한을 부여하여 이 정책에 따른 역할을 AWS Glue에서 맡을 때 필요한 계정 내 리소스를 관리할 수 있도록 합니다. 이 정책에 지정된 몇 가지 리소스는 Amazon S3 버킷, Amazon S3 ETL 스크립트, Amazon EC2 리소스에 대해 AWS Glue에서 사용하는 기본 이름을 나타냅니다. 간소화를 위해 AWS Glue는 기본적으로 접두사가 `aws-glue-*`인 계정에서 몇 가지 Amazon S3 객체를 버킷에 작성합니다.

**참고**  
AWS 관리형 정책 **`AWSGlueServiceNotebookRole`**를 사용하면 이 단계를 생략해도 좋습니다.

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

**노트북에 대한 IAM 정책을 생성하려면**

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

1. 왼쪽 탐색 창에서 **정책**을 선택합니다.

1. **정책 생성**을 선택하세요.

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

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:CreateDatabase",
           "glue:CreatePartition",
           "glue:CreateTable",
           "glue:DeleteDatabase",
           "glue:DeletePartition",
           "glue:DeleteTable",
           "glue:GetDatabase",
           "glue:GetDatabases",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:GetTable",
           "glue:GetTableVersions",
           "glue:GetTables",
           "glue:UpdateDatabase",
           "glue:UpdatePartition",
           "glue:UpdateTable",
           "glue:GetJobBookmark",
           "glue:ResetJobBookmark",
           "glue:CreateConnection",
           "glue:CreateJob",
           "glue:DeleteConnection",
           "glue:DeleteJob",
           "glue:GetConnection",
           "glue:GetConnections",
           "glue:GetDevEndpoint",
           "glue:GetDevEndpoints",
           "glue:GetJob",
           "glue:GetJobs",
           "glue:UpdateJob",
           "glue:BatchDeleteConnection",
           "glue:UpdateConnection",
           "glue:GetUserDefinedFunction",
           "glue:UpdateUserDefinedFunction",
           "glue:GetUserDefinedFunctions",
           "glue:DeleteUserDefinedFunction",
           "glue:CreateUserDefinedFunction",
           "glue:BatchGetPartition",
           "glue:BatchDeletePartition",
           "glue:BatchCreatePartition",
           "glue:BatchDeleteTable",
           "glue:UpdateDevEndpoint",
           "s3:GetBucketLocation",
           "s3:ListBucket",
           "s3:ListAllMyBuckets",
           "s3:GetBucketAcl"
         ],
         "Resource": [
           "*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject"
         ],
         "Resource": [
           "arn:aws:s3:::crawler-public*",
           "arn:aws:s3:::aws-glue*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "ec2:CreateTags",
           "ec2:DeleteTags"
         ],
         "Condition": {
           "ForAllValues:StringEquals": {
             "aws:TagKeys": [
               "aws-glue-service-resource"
             ]
           }
         },
         "Resource": [
           "arn:aws:ec2:*:*:network-interface/*",
           "arn:aws:ec2:*:*:security-group/*",
           "arn:aws:ec2:*:*:instance/*"
         ]
       }
     ]
   }
   ```

------

   다음 테이블은 이 정책이 보장하는 권한을 설명합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/create-notebook-policy.html)

1. **정책 검토** 화면에서 **정책 이름**을 입력합니다(예: **GlueServiceNotebookPolicyDefault**). 조건부 설명을 입력하고 정책에 만족하면 **정책 생성**을 선택합니다.

# 5단계: 노트북 서버용 IAM 역할 생성
<a name="create-an-iam-role-notebook"></a>

개발 엔드포인트로 노트북을 사용하고자 한다면 IAM 역할 권한을 부여해야 합니다. IAM 역할을 통해 AWS Identity and Access Management IAM을 사용하여 권한을 제공합니다.

**참고**  
IAM 콘솔을 사용하여 IAM 역할을 생성하면 인스턴스 프로파일이 자동으로 생성되고 해당 역할과 동일한 이름이 지정됩니다.

**노트북용 IAM 역할을 생성하려면**

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

1. 왼쪽 탐색 창에서 **역할**을 선택합니다.

1. **역할 생성**을 선택합니다.

1. 역할 유형의 경우, **AWS 서비스**를 선택하고 **EC2**를 찾아 선택한 다음 **EC2** 사용 사례를 선택하고 **다음: 권한**을 선택합니다.

1. **권한 정책 연결** 페이지에서 필요한 권한이 포함된 정책을 선택합니다. 예를 들어 일반 AWS Glue 권한에 대한 **AWSGlueServiceNotebookRole**과 Amazon S3 리소스에 대한 액세스에 대한 AWS 관리형 정책 **AmazonS3FullAccess**가 있습니다. 그런 다음 **다음: 검토(Next: Review)**를 선택합니다.
**참고**  
이 역할의 정책 중 하나가 Amazon S3 소스 및 대상에 대한 권한을 보장한다는 것을 확인합니다. 정책이 노트북 서버를 생성할 때 노트북을 저장하는 위치로 완전한 액세스가 허용되는지 확인합니다. 특정 Amazon S3 리소스에 액세스를 위한 자체 정책을 제공하고자 할 수 있습니다. 리소스에 대한 Amazon S3 정책을 생성하는 방법은 [정책에서 리소스 지정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-arn-format.html)을 참조하세요.  
SSE-KMS로 암호화된 Amazon S3 소스 및 대상에 액세스하고자 할 경우, 노트북이 데이터를 복호화할 수 있게 허용하는 정책을 연결합니다. 자세한 내용은 [AWS KMS 관리형 키(SSE-KMS)를 사용하는 서버 측 암호화로 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)를 참조하세요.  
다음은 예입니다.  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt"
         ],
         "Resource": [
           "arn:aws:kms:*:111122223333:key/key-id"
         ]
       }
     ]
   }
   ```

1. **역할 이름**에 역할의 이름을 입력합니다. 이름의 접두사가 문자열 `AWSGlueServiceNotebookRole`인 역할을 생성하고, 콘솔 사용자가 노트북 서버로 해당 역할을 전달할 수 있도록 합니다. AWS Glue가 제공한 정책에서는 IAM 서비스 역할이 `AWSGlueServiceNotebookRole`로 시작될 것으로 예상합니다. 그렇지 않으면 사용자에게 정책을 추가하여 IAM 역할의 `iam:PassRole` 권한이 이름 규정과 일치하도록 해야 합니다. 예를 들면 `AWSGlueServiceNotebookRoleDefault`를 입력합니다. 그런 다음 **역할 생성**을 선택합니다.

# 6단계: SageMaker AI 노트북용 IAM 정책 생성
<a name="create-sagemaker-notebook-policy"></a>

개발 엔드포인트에서 SageMaker AI 노트북을 사용할 계획이라면 노트북을 생성할 때 권한을 지정해야 합니다. AWS Identity and Access Management(IAM)을 사용하여 그러한 권한을 제공합니다.

**SageMaker AI 노트북용 IAM 정책을 생성하려면**

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

1. 왼쪽 탐색 창에서 **정책**을 선택합니다.

1. **정책 생성**을 선택하세요.

1. **정책 생성** 페이지에서 탭으로 이동하여 JSON을 편집합니다. 다음 JSON 문을 사용해 정책 문서를 생성합니다. 환경에 대한 *bucket-name*, *region-code* 및 *account-id*를 편집합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Action": [
                   "s3:ListBucket"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket"
               ]
           },
           {
               "Action": [
                   "s3:GetObject"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket*"
               ]
           },
           {
               "Action": [
                   "logs:CreateLogStream",
                   "logs:DescribeLogStreams",
                   "logs:PutLogEvents",
                   "logs:CreateLogGroup"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws/sagemaker/*",
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws/sagemaker/*:log-stream:aws-glue-*"
               ]
           },
           {
               "Action": [
                   "glue:UpdateDevEndpoint",
                   "glue:GetDevEndpoint",
                   "glue:GetDevEndpoints"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:glue:us-east-1:111122223333:devEndpoint/*"
               ]
           },
           {
               "Action": [
                   "sagemaker:ListTags"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:sagemaker:us-east-1:111122223333:notebook-instance/*"
               ]
           }
       ]
   }
   ```

------

   그런 다음 **정책 검토**를 선택합니다.

   다음 테이블은 이 정책이 보장하는 권한을 설명합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/create-sagemaker-notebook-policy.html)

1. [**정책 검토(Review Policy)**] 화면에서 [**정책 이름(Policy Name)**]을 입력합니다(예: `AWSGlueSageMakerNotebook`). 조건부 설명을 입력하고 정책에 만족하면 **정책 생성**을 선택합니다.

# 7단계: SageMaker AI 노트북용 IAM 역할 생성
<a name="create-an-iam-role-sagemaker-notebook"></a>

개발 엔드포인트로 SageMaker AI 노트북을 사용하고자 한다면 IAM 역할 권한을 부여해야 합니다. IAM 역할을 통해 AWS Identity and Access Management(IAM)를 사용하여 권한을 제공합니다.

**SageMaker AI 노트북용 IAM 역할을 생성하려면**

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

1. 왼쪽 탐색 창에서 **역할**을 선택합니다.

1. **역할 생성**을 선택합니다.

1. 역할 유형의 경우, **AWS 서비스**를 선택하고 **SageMaker**를 찾아 선택한 다음 **SageMaker - 실행** 사용 사례를 선택합니다. 그런 다음 **다음: 권한**을 선택합니다.

1. **Attach permissions policy(권한 정책 연결)** 페이지에서 필요한 권한을 포함한 정책을 선택합니다(예: **AmazonSageMakerFullAccess**). **다음: 검토**를 선택합니다.

   SSE-KMS로 암호화된 Amazon S3 소스 및 대상에 액세스하고자 할 경우, 다음 예에 표시된 것처럼 노트북이 데이터를 복호화하도록 허용하는 정책을 연결합니다. 자세한 내용은 [AWS KMS 관리형 키(SSE-KMS)를 사용하는 서버 측 암호화로 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)를 참조하세요.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt"
         ],
         "Resource": [
           "arn:aws:kms:*:111122223333:key/key-id"
         ]
       }
     ]
   }
   ```

------

1. **역할 이름**에 역할의 이름을 입력합니다. 콘솔 사용자로부터 SageMaker AI로 역할이 전달되도록 하려면 문자열 `AWSGlueServiceSageMakerNotebookRole`로 접두사가 지정된 이름을 사용합니다. AWS Glue에서 제공한 정책은 IAM 역할이 `AWSGlueServiceSageMakerNotebookRole`로 시작할 것이라고 기대합니다. 그렇지 않으면 사용자에게 정책을 추가하여 IAM 역할의 `iam:PassRole` 권한이 이름 규정과 일치하도록 해야 합니다.

   예를 들어 `AWSGlueServiceSageMakerNotebookRole-Default`를 입력한 다음 [**역할 생성(Create role)**]을 선택합니다.

1. 역할을 생성한 후 AWS Glue에서 SageMaker AI 노트북을 생성하는 데 필요한 추가 권한을 허용하는 정책을 연결합니다.

   방금 생성한 역할인 `AWSGlueServiceSageMakerNotebookRole-Default`를 열고 [**정책 연결(Attach policies)**]을 선택합니다. 역할에 생성한 `AWSGlueSageMakerNotebook` 정책을 연결합니다.

# AWS Glue 액세스 제어 정책 예제
<a name="glue-policy-examples"></a>

이 섹션에는 자격 증명 기반(IAM) 액세스 제어 정책과 AWS Glue 리소스 정책 모두의 예제가 포함되어 있습니다.

**Contents**
+ [AWS Glue 자격 증명 기반 정책 예제](security_iam_id-based-policy-examples.md)
  + [정책 모범 사례](security_iam_id-based-policy-examples.md#security_iam_service-with-iam-policy-best-practices)
  + [리소스 수준 권한은 특정 AWS Glue 객체에만 적용됨](security_iam_id-based-policy-examples.md#glue-identity-based-policy-limitations)
  + [AWS Glue Console에서 사용](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-console)
  + [사용자가 자신의 고유한 권한을 볼 수 있도록 허용](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-view-own-permissions)
  + [테이블에 대한 읽기 전용 권한 부여](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-read-only-table-access)
  + [GetTables 권한으로 테이블 필터링](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-filter-tables)
  + [테이블 및 모든 파티션에 전체 액세스 권한 부여](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-full-access-tables-partitions)
  + [이름 접두사 및 명시적 거부로 액세스 제어](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-deny-by-name-prefix)
  + [태그를 사용한 액세스 권한 부여](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-allow)
  + [태그를 사용한 액세스 거부](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-deny)
  + [목록 및 배치 API 작업과 함께 태그 사용](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-list-batch)
  + [조건 키 또는 컨텍스트 키를 사용하여 설정 제어](security_iam_id-based-policy-examples.md#glue-identity-based-policy-condition-keys)
    + [조건 키를 사용하여 설정을 제어하는 정책 제어](security_iam_id-based-policy-examples.md#glue-identity-based-policy-condition-key-vpc)
    + [컨텍스트 키를 사용하여 설정을 제어하는 정책 제어](security_iam_id-based-policy-examples.md#glue-identity-based-policy-context-key-glue)
  + [ID가 데이터 미리 보기 세션을 생성하지 못하게 하기](security_iam_id-based-policy-examples.md#deny-data-preview-sessions-per-identity)
+ [AWS Glue용 리소스 기반 정책 예제](security_iam_resource-based-policy-examples.md)
  + [AWS Glue에서 리소스 기반 정책 사용 시 고려 사항](security_iam_resource-based-policy-examples.md#security_iam_resource-based-policy-examples-considerations)
  + [리소스 정책을 사용하여 동일한 계정에서 액세스 제어](security_iam_resource-based-policy-examples.md#glue-policy-resource-policies-example-same-account)

# AWS Glue 자격 증명 기반 정책 예제
<a name="security_iam_id-based-policy-examples"></a>

기본적으로 사용자 및 역할에는 AWS Glue 리소스를 생성하거나 수정할 수 있는 권한이 없습니다. 사용자에게 사용자가 필요한 리소스에서 작업을 수행할 권한을 부여하려면 IAM 관리자가 IAM 정책을 생성하면 됩니다.

이러한 예제 JSON 정책 문서를 사용하여 IAM ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*의 [IAM 정책 생성(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)을 참조하세요.

각 리소스 유형에 대한 ARN 형식을 포함하여 AWS Glue에서 정의한 작업 및 리소스 유형에 대한 자세한 내용은 *서비스 승인 참조*의 [AWS Glue에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html)를 참조하세요.

**참고**  
이 섹션에 제공된 예제는 모두 `us-west-2` 리전을 사용합니다. 이 리전을 사용하려는 AWS 리전으로 바꿀 수 있습니다.

**Topics**
+ [정책 모범 사례](#security_iam_service-with-iam-policy-best-practices)
+ [리소스 수준 권한은 특정 AWS Glue 객체에만 적용됨](#glue-identity-based-policy-limitations)
+ [AWS Glue Console에서 사용](#security_iam_id-based-policy-examples-console)
+ [사용자가 자신의 고유한 권한을 볼 수 있도록 허용](#security_iam_id-based-policy-examples-view-own-permissions)
+ [테이블에 대한 읽기 전용 권한 부여](#security_iam_id-based-policy-examples-read-only-table-access)
+ [GetTables 권한으로 테이블 필터링](#security_iam_id-based-policy-examples-filter-tables)
+ [테이블 및 모든 파티션에 전체 액세스 권한 부여](#security_iam_id-based-policy-examples-full-access-tables-partitions)
+ [이름 접두사 및 명시적 거부로 액세스 제어](#security_iam_id-based-policy-examples-deny-by-name-prefix)
+ [태그를 사용한 액세스 권한 부여](#tags-control-access-example-triggers-allow)
+ [태그를 사용한 액세스 거부](#tags-control-access-example-triggers-deny)
+ [목록 및 배치 API 작업과 함께 태그 사용](#tags-control-access-example-triggers-list-batch)
+ [조건 키 또는 컨텍스트 키를 사용하여 설정 제어](#glue-identity-based-policy-condition-keys)
+ [ID가 데이터 미리 보기 세션을 생성하지 못하게 하기](#deny-data-preview-sessions-per-identity)

## 정책 모범 사례
<a name="security_iam_service-with-iam-policy-best-practices"></a>

자격 증명 기반 정책에 따라 계정에서 사용자가 AWS Glue 리소스를 생성, 액세스 또는 삭제할 수 있는지 여부가 결정됩니다. 이 작업으로 인해 AWS 계정에 비용이 발생할 수 있습니다. ID 기반 정책을 생성하거나 편집할 때는 다음 지침과 권장 사항을 따르세요.
+ **AWS 관리형 정책으로 시작하고 최소 권한을 향해 나아가기** - 사용자 및 워크로드에 권한 부여를 시작하려면 많은 일반 사용 사례에 대한 권한을 부여하는 *AWS관리형 정책*을 사용합니다. AWS 계정에서 사용할 수 있습니다. 사용 사례에 고유한 AWS고객 관리형 정책을 정의하여 권한을 줄이는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) 또는 [AWS직무에 대한 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)을 참조하세요.
+ **최소 권한 적용** – IAM 정책을 사용하여 권한을 설정하는 경우, 작업을 수행하는 데 필요한 권한만 부여합니다. 이렇게 하려면 *최소 권한*으로 알려진 특정 조건에서 특정 리소스에 대해 수행할 수 있는 작업을 정의합니다. IAM을 사용하여 권한을 적용하는 방법에 대한 자세한 정보는 *IAM 사용 설명서*에 있는 [IAM의 정책 및 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)을 참조하세요.
+ **IAM 정책의 조건을 사용하여 액세스 추가 제한** – 정책에 조건을 추가하여 작업 및 리소스에 대한 액세스를 제한할 수 있습니다. 예를 들어, SSL을 사용하여 모든 요청을 전송해야 한다고 지정하는 정책 조건을 작성할 수 있습니다. CloudFormation와 같이, 특정 AWS 서비스를 통해 사용되는 경우에만 서비스 작업에 대한 액세스 권한을 부여할 수도 있습니다. 자세한 내용은 *IAM 사용자 설명서*의 [IAM JSON 정책 요소: 조건](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)을 참조하세요.
+ **IAM Access Analyzer를 통해 IAM 정책을 확인하여 안전하고 기능적인 권한 보장** - IAM Access Analyzer에서는 IAM 정책 언어(JSON)와 모범 사례가 정책에서 준수되도록 새로운 및 기존 정책을 확인합니다. IAM Access Analyzer는 100개 이상의 정책 확인 항목과 실행 가능한 추천을 제공하여 안전하고 기능적인 정책을 작성하도록 돕습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM Access Analyzer에서 정책 검증](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)을 참조하세요.
+ **다중 인증(MFA) 필요** – AWS 계정에 IAM 사용자 또는 루트 사용자가 필요한 시나리오가 있는 경우, 추가 보안을 위해 MFA를 설정합니다. API 작업을 직접적으로 호출할 때 MFA가 필요하면 정책에 MFA 조건을 추가합니다. 자세한 내용은 *IAM 사용 설명서*의 [MFA를 통한 보안 API 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)를 참조하세요.

IAM의 모범 사례에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

## 리소스 수준 권한은 특정 AWS Glue 객체에만 적용됨
<a name="glue-identity-based-policy-limitations"></a>

AWS Glue에서 특정 객체에 대한 세분화된 제어만 정의할 수 있습니다. 따라서 `Resource` 문에 대한 Amazon 리소스 이름(ARN)을 허용하는 API 작업이 ARN을 허용하지 않는 API 작업과 혼합되지 않도록 클라이언트의 IAM 정책을 작성해야 합니다.

예를 들어, 다음 IAM 정책은 `GetClassifier` 및 `GetJobRun`에 대한 API 작업을 허용합니다. AWS Glue는 식별자와 작업 실행에 ARN을 허용하지 않기 때문에 이 정책은 `Resource`를 `*`로 정의합니다. ARN은 `GetDatabase` 및 `GetTable` 같은 특정 API 작업에 대해 허용이 되기 때문에 정책의 후반부에서 ARN을 지정할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetClassifier*",
        "glue:GetJobRun*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "glue:Get*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/default",
        "arn:aws:glue:us-east-1:111122223333:table/default/e*1*",
        "arn:aws:glue:us-east-1:111122223333:connection/connection2"
      ]
    }
  ]
}
```

------

ARN을 허용하는 AWS Glue 객체 목록은 [AWS Glue 리소스 ARN 지정](glue-specifying-resource-arns.md) 단원을 참조하십시오.

## AWS Glue Console에서 사용
<a name="security_iam_id-based-policy-examples-console"></a>

AWS Glue Console에 액세스하려면 최소 권한 집합이 있어야 합니다. 이러한 권한은 AWS 계정에서 AWS Glue 리소스에 대한 세부 정보를 나열하고 볼 수 있도록 허용해야 합니다. 최소 필수 권한보다 더 제한적인 ID 기반 정책을 생성하는 경우, 콘솔이 해당 정책에 연결된 엔티티(사용자 또는 역할)에 대해 의도대로 작동하지 않습니다.

AWS CLI 또는 AWS API만 직접적으로 호출하는 사용자에게 최소 콘솔 권한을 허용할 필요가 없습니다. 대신, 수행하려는 API 작업과 일치하는 작업에만 액세스할 수 있도록 합니다.

사용자와 역할이 AWS Glue Console을 여전히 사용할 수 있도록 하려면 AWS Glue `ConsoleAccess` 또는 `ReadOnly` AWS 관리형 정책을 엔터티에 추가합니다. 자세한 내용은 *IAM 사용 설명서*의 [사용자에게 권한 추가](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)를 참조하세요.

사용자가 AWS Glue 콘솔로 작업하려면 해당 사용자는 AWS 계정에 대한 AWS Glue 리소스로 작업하도록 허용하는 최소 권한 집합이 있어야 합니다. 이 AWS Glue 권한 이외에 콘솔은 다음 서비스로부터 권한을 필요로 합니다.
+ 로그를 표시할 수 있는 Amazon CloudWatch Logs 권한.
+ 역할을 나열하고 전달할 수 있는 AWS Identity and Access Management(IAM) 권한.
+ 스택으로 작업할 수 있는 AWS CloudFormation 권한.
+ VPC, 서브넷, 보안 그룹, 인스턴스 및 기타 객체를 나열할 수 있는 Amazon Elastic Compute Cloud(Amazon EC2) 권한.
+ 버킷과 객체를 나열하고 스크립트를 검색하고 저장할 수 있는 Amazon Simple Storage Service(Amazon S3) 권한.
+ 클러스터 작업을 위한 Amazon Redshift 권한.
+ 인스턴스를 나열할 수 있는 Amazon Relational Database Service(Amazon RDS) 권한.

사용자가 AWS Glue 콘솔을 보고 작업하는 데 필요한 권한에 대한 자세한 내용은 [3단계: AWS Glue에 액세스하는 사용자 또는 그룹에 정책 연결](attach-policy-iam-user.md) 단원을 참조하세요.

최소 필수 권한보다 더 제한적인 IAM 정책을 만들면 콘솔은 해당 IAM 정책에 연결된 사용자에 대해 의도대로 작동하지 않습니다. 이 사용자가 AWS Glue Console을 사용할 수 있도록 하려면 `AWSGlueConsoleFullAccess` 관리형 정책을 사용자에게 연결합니다([AWS Glue에 대한 AWS 관리형(미리 정의된) 정책](security-iam-awsmanpol.md#access-policy-examples-aws-managed) 참조).

## 사용자가 자신의 고유한 권한을 볼 수 있도록 허용
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

이 예제는 IAM 사용자가 자신의 사용자 ID에 연결된 인라인 및 관리형 정책을 볼 수 있도록 허용하는 정책을 생성하는 방법을 보여줍니다. 이 정책에는 콘솔에서 또는 AWS CLI나 AWS API를 사용하여 프로그래밍 방식으로 이 작업을 완료할 수 있는 권한이 포함됩니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## 테이블에 대한 읽기 전용 권한 부여
<a name="security_iam_id-based-policy-examples-read-only-table-access"></a>

다음 정책은 데이터베이스 `db1`에 있는 테이블 `books`에 대한 읽기 전용 권한을 부여합니다. Amazon 리소스 이름(ARN)에 대한 자세한 내용은 [Data Catalog ARN](glue-specifying-resource-arns.md#data-catalog-resource-arns) 단원을 참조하십시오.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesActionOnBooks",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables",
        "glue:GetTable"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/books"
      ]
    }
  ]
}
```

------

이 정책은 데이터베이스 `db1`에 있는 테이블 `books`에 읽기 전용 권한을 부여합니다. 테이블에 `Get` 권한을 부여하려면 카탈로그 및 데이터베이스 리소스에 대한 권한도 필요합니다.

다음 정책은 데이터베이스 `db1`에서 테이블 `tb1`을 생성하기 위해 필요한 최소 권한을 부여합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:CreateTable"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:table/db1/tbl1",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:catalog"
      ]
    }
  ]
}
```

------

## GetTables 권한으로 테이블 필터링
<a name="security_iam_id-based-policy-examples-filter-tables"></a>

데이터베이스 `db1`에 `customers`, `stores` 및 `store_sales`와 같은 3개의 테이블이 있다고 가정합니다. 다음 정책은 `customers`는 제외하고 `stores` 및 `store_sales`에 대한 `GetTables` 권한을 부여합니다. 이 정책으로 `GetTables`을 호출하면 결과에는 인증된 테이블 두 개만 포함됩니다. `customers` 테이블은 반환되지 않습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesExample",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/store_sales",
        "arn:aws:glue:us-east-1:111122223333:table/db1/stores"
      ]
    }
  ]
}
```

------

`store`로 시작하는 모든 테이블 이름과 일치하도록 `store*`를 사용하여 이전 정책을 간소화할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesExample2",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/store*"
      ]
    }
  ]
}
```

------

마찬가지로, `db1`의 모든 테이블과 일치하도록 `/db1/*`을 사용하면 다음 정책은 `db1`의 모든 테이블에 대한 `GetTables` 액세스 권한을 부여합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesReturnAll",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/*"
      ]
    }
  ]
}
```

------

테이블 ARN을 제공하지 않으면 `GetTables` 호출은 성공하지만 빈 목록이 반환됩니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesEmptyResults",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1"
      ]
    }
  ]
}
```

------

데이터베이스 ARN이 정책에 누락된 경우에는 `GetTables` 호출이 실패하고 `AccessDeniedException`이 발생합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesAccessDeny",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:table/db1/*"
      ]
    }
  ]
}
```

------

## 테이블 및 모든 파티션에 전체 액세스 권한 부여
<a name="security_iam_id-based-policy-examples-full-access-tables-partitions"></a>

다음 정책은 데이터베이스 `db1`에 있는 `books` 테이블에 대한 모든 권한을 부여합니다. 여기에는 테이블 자체, 테이블의 보관된 버전 및 테이블의 모든 파티션에 대한 읽기 및 쓰기 권한이 포함됩니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "FullAccessOnTable",
      "Effect": "Allow",
      "Action": [
        "glue:CreateTable",
        "glue:GetTable",
        "glue:GetTables",
        "glue:UpdateTable",
        "glue:DeleteTable",
        "glue:BatchDeleteTable",
        "glue:GetTableVersion",
        "glue:GetTableVersions",
        "glue:DeleteTableVersion",
        "glue:BatchDeleteTableVersion",
        "glue:CreatePartition",
        "glue:BatchCreatePartition",
        "glue:GetPartition",
        "glue:GetPartitions",
        "glue:BatchGetPartition",
        "glue:UpdatePartition",
        "glue:DeletePartition",
        "glue:BatchDeletePartition"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/books"
      ]
    }
  ]
}
```

------

실제로 이전 정책은 다음과 같이 간소화할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "FullAccessOnTable",
      "Effect": "Allow",
      "Action": [
        "glue:*Table*",
        "glue:*Partition*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/books"
      ]
    }
  ]
}
```

------

세분화된 액세스 제어의 최소 세부 수준은 테이블 수준입니다. 즉, 사용자에게 테이블의 파티션 중 일부 또는 테이블 열 중 일부에 대한 권한을 부여할 수는 없습니다. 사용자는 테이블 전체에 대한 액세스 권한을 갖거나 해당 테이블에 대한 권한을 갖지 못하거나 둘 중 하나입니다.

## 이름 접두사 및 명시적 거부로 액세스 제어
<a name="security_iam_id-based-policy-examples-deny-by-name-prefix"></a>

이 예제에서는 AWS Glue Data Catalog의 데이터베이스 및 테이블이 이름 접두사를 사용하여 구성되었다고 가정합니다. 개발 스테이지의 데이터 베이스에 이름 접두사 `dev-`가 있고, 프로덕션 스테이지의 데이터베이스에는 이름 접두사 `prod-`가 있습니다. 다음 정책을 사용하여 이름 접두사가 `dev-`인 모든 데이터베이스, 테이블, UDF 등에 대한 모든 액세스를 개발자에게 부여할 수 있습니다. 하지만 이름 접두사가 `prod-`인 모든 항목에는 읽기 전용 액세스 권한을 부여합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DevAndProdFullAccess",
      "Effect": "Allow",
      "Action": [
        "glue:*Database*",
        "glue:*Table*",
        "glue:*Partition*",
        "glue:*UserDefinedFunction*",
        "glue:*Connection*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/dev-*",
        "arn:aws:glue:us-east-1:111122223333:database/prod-*",
        "arn:aws:glue:us-east-1:111122223333:table/dev-*/*",
        "arn:aws:glue:us-east-1:111122223333:table/*/dev-*",
        "arn:aws:glue:us-east-1:111122223333:table/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:table/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/dev-*/*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/*/dev-*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:connection/dev-*",
        "arn:aws:glue:us-east-1:111122223333:connection/prod-*"
      ]
    },
    {
      "Sid": "ProdWriteDeny",
      "Effect": "Deny",
      "Action": [
        "glue:*Create*",
        "glue:*Update*",
        "glue:*Delete*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:database/prod-*",
        "arn:aws:glue:us-east-1:111122223333:table/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:table/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:connection/prod-*"
      ]
    }
  ]
}
```

------

이전 정책의 두 번째 문에서는 명시적 `deny`를 사용합니다. 명시적 `deny`를 사용해 보안 주체에 부여된 모든 `allow` 권한을 덮어쓸 수 있습니다. 그러면 중요한 리소스에 대한 액세스를 잠그고 다른 정책이 이러한 리소스에 대해 실수로 액세스 권한을 부여하지 않도록 방지할 수 있습니다.

이전 예제에서는 첫 번째 문이 `prod-` 리소스에 대한 모든 액세스 권한을 부여하더라도 두 번째 문이 리소스에 대한 쓰기 액세스 권한을 명시적으로 취소해 `prod-` 리소스에 대해 일기 전용 액세스만 남아 있게 됩니다.

## 태그를 사용한 액세스 권한 부여
<a name="tags-control-access-example-triggers-allow"></a>

예를 들어 트리거 `t2`에 대한 액세스를 계정에 있는 `Tom`이라는 특정 사용자로 제한하려 한다고 가정합니다. `Sam`을 포함해 다른 모든 사용자들은 `t1`을 트리거하기 위한 액세스 권한을 갖습니다. 트리거 `t1` 및 `t2`는 다음과 같은 속성을 갖추고 있습니다.

```
aws glue get-triggers
{
    "Triggers": [
        {
            "State": "CREATED",
            "Type": "SCHEDULED",
            "Name": "t1",
            "Actions": [
                {
                    "JobName": "j1"
                }
            ],
            "Schedule": "cron(0 0/1 * * ? *)"
        },
        {
            "State": "CREATED",
            "Type": "SCHEDULED",
            "Name": "t2",
            "Actions": [
                {
                    "JobName": "j1"
                }
            ],
            "Schedule": "cron(0 0/1 * * ? *)"
        }
    ]
}
```

`t2`를 트리거하기 위한 태그 값 `Tom`(`aws:ResourceTag/Name": "Tom"`)에 AWS Glue 관리자가 연결되어 있습니다. 또한 AWS Glue 관리자는 태그를 기준으로 조건 문과 함께 IAM 정책을 Tom에게 제공했습니다. 결과적으로 Tom은 태그 값 `Tom`으로 리소스에서 수행되는 AWS Glue 작업만 사용할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "glue:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Name": "Tom"
        }
      }
    }
  ]
}
```

------

Tom이 트리거 `t1`에 대한 액세스를 시도하면 액세스 거부 메시지가 수신됩니다. 한편, Tom은 트리거 `t2`를 성공적으로 검색할 수 있습니다.

```
aws glue get-trigger --name t1

An error occurred (AccessDeniedException) when calling the GetTrigger operation: User: Tom is not authorized to perform: glue:GetTrigger on resource: arn:aws:glue:us-east-1:123456789012:trigger/t1

aws glue get-trigger --name t2
{
    "Trigger": {
        "State": "CREATED",
        "Type": "SCHEDULED",
        "Name": "t2",
        "Actions": [
            {
                "JobName": "j1"
            }
        ],
        "Schedule": "cron(0 0/1 * * ? *)"
    }
}
```

이 작업은 태그에 대한 필터링을 지원하지 않기 때문에 Tom은 여러 개의 `GetTriggers` API 작업을 사용하여 트리거를 나열할 수 없습니다.

Tom에게 `GetTriggers`에 대한 액세스 권한을 부여하기 위해 AWS Glue 관리자는 권한을 두 개의 섹션으로 분할하는 정책을 생성합니다. 첫 번째 섹션에서는 Tom에게 `GetTriggers` API 작업에서 모든 트리거에 액세스할 수 있도록 허용합니다. 두 번째 섹션에서는 Tom에게 `Tom`으로 태그 값이 지정된 API 작업에 액세스할 수 있도록 허용합니다. 이 정책에 따라 Tom에게는 트리거 `t2`에 대한 `GetTriggers` 및 `GetTrigger` 액세스가 모두 허용됩니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "glue:GetTriggers",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "glue:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Name": "Tom"
        }
      }
    }
  ]
}
```

------

## 태그를 사용한 액세스 거부
<a name="tags-control-access-example-triggers-deny"></a>

또 다른 리소스 정책 접근 방식은 리소스에 대한 액세스를 명시적으로 거부하는 것입니다.

**중요**  
명시적 거부 정책은 `GetTriggers`와 같은 여러 개의 API 작업에 적용되지 않습니다.

다음 예제 정책에서는 모든 AWS Glue 작업이 허용됩니다. 그러나 두 번째 `Effect` 명령문은 `Team` 키와 `Special` 값으로 태그가 지정된 작업에 대한 액세스를 *명시적으로* 거부합니다.

관리자가 자격 증명에 다음 정책을 연결하면 해당 자격 증명은 `Team` 키와 `Special` 값이 태그로 지정된 작업을 *제외*한 모든 작업에 액세스할 수 있습니다.

## 목록 및 배치 API 작업과 함께 태그 사용
<a name="tags-control-access-example-triggers-list-batch"></a>

리소스 정책을 작성하는 세 번째 접근 방식은 태그 값에 대해 리소스를 나열하도록 `List` API 작업을 사용해 리소스에 대한 액세스를 허용하는 것입니다. 그런 다음, 해당되는 `Batch` API 작업을 사용하여 특정 리소스의 세부 정보에 대한 액세스를 허용합니다. 이러한 접근 방식에서는 관리자가 여러 개의 `GetCrawlers`, `GetDevEndpoints`, `GetJobs` 또는 `GetTriggers` API 작업에 대한 액세스를 허용할 필요가 없습니다. 대신에 다음 API 작업을 통해 리소스를 나열할 수 있도록 허용할 수 있습니다.
+ `ListCrawlers`
+ `ListDevEndpoints`
+ `ListJobs`
+ `ListTriggers`

그리고 다음 API 작업을 통해 개별 리소스에 대한 세부 정보를 확인할 수 있도록 허용할 수 있습니다.
+ `BatchGetCrawlers`
+ `BatchGetDevEndpoints`
+ `BatchGetJobs`
+ `BatchGetTriggers`

관리자는 이러한 접근 방식을 사용하기 위해 다음을 수행할 수 있습니다.

1. 크롤러, 개발 엔드포인트, 작업 및 트리거에 태그를 추가합니다.

1. `GetCrawlers`, `GetDevEndponts`, `GetJobs`, `GetTriggers` 같은 `Get` API 작업에 대한 사용자 액세스를 거부합니다.

1. 사용자가 액세스 권한을 가진 태그 지정 리소스를 확인할 수 있도록 `ListCrawlers`, `ListDevEndponts`, `ListJobs`, `ListTriggers` 같은 `List` API 작업에 대한 사용자 액세스를 허용합니다.

1. `TagResource` 및 `UntagResource` 같은 AWS Glue 태그 지정 API에 대한 사용자 액세스를 거부합니다.

1. `BatchGetCrawlers`, `BatchGetDevEndponts`, `BatchGetJobs`, `BatchGetTriggers` 같은 `BatchGet` API 작업을 통해 리소스 세부 정보에 대한 사용자 액세스를 허용합니다.

예를 들어, `ListCrawlers` 작업을 호출할 때 사용자 이름과 일치하도록 태그 값을 제공합니다. 그러면 결과는 제공된 태그 값과 일치하는 크롤러의 목록이 됩니다. 주어진 태그를 사용해 각 크롤러에 대한 세부 정보를 얻을 수 있도록 `BatchGetCrawlers`에 이름 목록을 제공합니다.

예를 들어 Tom이 `Tom`으로 태그가 지정된 트리거의 세부 정보만 검색할 수 있도록 하려면 관리자가 `Tom`에서 트리거에 태그를 추가하고, 모든 사용자에 대해 `GetTriggers` API 작업 액세스를 거부하고, 모든 사용자에 대해 `ListTriggers` 및 `BatchGetTriggers` 액세스를 허용할 수 있습니다.

다음은 AWS Glue 관리자가 Tom에게 부여하는 리소스 정책입니다. 이 정책의 첫 번째 섹션에서는 `GetTriggers`에 대한 AWS Glue API 작업이 거부됩니다. 정책의 두 번째 섹션에서는 모든 리소스에 대해`ListTriggers`가 허용됩니다. 그러나 세 번째 섹션에서는 `Tom`이라고 태그가 지정된 리소스에게 `BatchGetTriggers` 액세스가 허용됩니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "glue:GetTriggers",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListTriggers"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "glue:BatchGetTriggers"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Name": "Tom"
        }
      }
    }
  ]
}
```

------

Tom은 이전 예제와 똑같은 트리거를 사용하여 트리거 `t2`에 액세스할 수 있지만, 트리거 `t1`에는 액세스할 수 없습니다. 다음 예제는 Tom이 `BatchGetTriggers`를 통해 `t1` 및 `t2`에 액세스를 시도할 때의 결과를 보여줍니다.

```
aws glue batch-get-triggers --trigger-names t2
{
    "Triggers": {
        "State": "CREATED",
        "Type": "SCHEDULED",
        "Name": "t2",
        "Actions": [
            {
                "JobName": "j2"
            }
        ],
        "Schedule": "cron(0 0/1 * * ? *)"
    }
}

aws glue batch-get-triggers  --trigger-names t1

An error occurred (AccessDeniedException) when calling the BatchGetTriggers operation: No access to any requested resource.
```

다음 예제는 Tom이 동일한 `BatchGetTriggers` 호출에서 트리거 `t2`와 트리거 `t3`(존재하지 않음) 모두에 액세스를 시도할 때의 결과를 보여줍니다. Tom은 트리거 `t2`에 대한 액세스 권한을 가지고 있고 이 트리거가 존재하기 때문에 `t2`만 반환됩니다. Tom에게 트리거 `t3`에 대한 액세스가 허용되지만 트리거 `t3`가 존재하지 않기 때문에 `"TriggersNotFound": []` 목록에서 응답으로 `t3`가 반환됩니다.

```
aws glue batch-get-triggers --trigger-names t2 t3
{
    "Triggers": {
        "State": "CREATED",
        "Type": "SCHEDULED",
        "Name": "t2",
        "Actions": [
            {
                "JobName": "j2"
            }
        ],
        "TriggersNotFound": ["t3"],
        "Schedule": "cron(0 0/1 * * ? *)"
    }
}
```

## 조건 키 또는 컨텍스트 키를 사용하여 설정 제어
<a name="glue-identity-based-policy-condition-keys"></a>

작업 생성 및 업데이트 권한을 부여할 때 조건 키 또는 컨텍스트 키를 사용할 수 있습니다. 다음 섹션에서는 키에 대해 설명합니다.
+ [조건 키를 사용하여 설정을 제어하는 정책 제어](#glue-identity-based-policy-condition-key-vpc)
+ [컨텍스트 키를 사용하여 설정을 제어하는 정책 제어](#glue-identity-based-policy-context-key-glue)

### 조건 키를 사용하여 설정을 제어하는 정책 제어
<a name="glue-identity-based-policy-condition-key-vpc"></a>

AWS Glue는 `glue:VpcIds`, `glue:SubnetIds` 및 `glue:SecurityGroupIds`의 세 가지 IAM 조건 키를 제공합니다. 작업 생성 및 업데이트 권한을 부여할 때 조건 키를 IAM 정책에 사용할 수 있습니다. 이 설정을 사용하여 원하는 VPC 환경 외부에서 실행하려는 경우 작업 또는 세션을 생성하거나 업데이트하지 않도록 할 수 있습니다. VPC 설정 정보는 `CreateJob` 요청에서 직접 입력하지 않고 AWS Glue 연결을 가리키는 작업 '연결' 필드에서 유추됩니다.

**사용 예시**  
원하는 VpcId 'vpc-id1234', SubnetIds, SecurityGroupIds를 사용하여 '트래픽 모니터링 연결'이라는 AWS Glue 네트워크 유형 연결을 생성합니다.

IAM 정책에서 `CreateJob` 및 `UpdateJob` 작업에 대한 조건 키 조건을 지정합니다.

```
{
  "Effect": "Allow",
  "Action": [
    "glue:CreateJob",
    "glue:UpdateJob"
  ],
  "Resource": [
    "*"
  ],
  "Condition": {
    "ForAnyValue:StringLike": {
      "glue:VpcIds": [
        "vpc-id1234"
      ]
    }
  }
}
```

 연결 정보를 지정하지 않고 AWS Glue 작업을 생성할 수 없도록 하는 유사한 IAM 정책을 생성할 수 있습니다.

**VPC의 세션 제한**

 지정된 VPC 내에서 생성된 세션을 실행하도록 하려면 glue:vpc-id가 vpc-<123>이 아니라는 조건에서 `glue:CreateSession` 작업에 `Deny` 적용을 추가하여 역할 권한을 제한합니다. 예제: 

```
"Effect": "Deny",
"Action": [
    "glue:CreateSession"
 ],
"Condition": {
    "StringNotEquals" : {"glue:VpcIds" : ["vpc-123"]} 
}
```

 또한 `glue:vpc-id`가 null이라는 조건에서 `glue:CreateSession` 작업에 `Deny` 적용을 추가하여 VPC 내에서 생성된 세션을 실행하도록 할 수도 있습니다. 예제: 

```
{
    "Effect": "Deny",
    "Action": [
        "glue:CreateSession"
    ],
      "Condition": {
        "Null": {"glue:VpcIds": true}
    }
}, 
{
    "Effect": "Allow",
    "Action": [
        "glue:CreateSession"
    ],
    "Resource": ["*"]
}
```

### 컨텍스트 키를 사용하여 설정을 제어하는 정책 제어
<a name="glue-identity-based-policy-context-key-glue"></a>

AWS Glue는 작업 및 개발자 엔드포인트에서 AWS Glue를 통해 사용할 수 있는 각 역할 세션에 컨텍스트 키(`glue:CredentialIssuingService= glue.amazonaws.com`)를 제공합니다. 이렇게 하면 AWS Glue 스크립트에서 수행하는 작업에 대한 보안 제어를 구현할 수 있습니다. AWS Glue는 고객을 대신하여 AWS Glue가 다른 AWS 서비스를 호출(작업/개발 엔드포인트가 아닌 AWS Glue 서비스를 통해 직접 호출)하는 각 역할 세션에 다른 컨텍스트 키(`glue:RoleAssumedBy=glue.amazonaws.com`)를 제공합니다.

**사용 예시**  
IAM 정책에서 조건부 권한을 지정하고 AWS Glue 작업에서 사용할 역할에 이 권한을 연결합니다. 이렇게 하면 역할 세션이 AWS Glue 작업 런타임 환경에 사용되는지 여부에 따라 특정 작업이 허용/거부됩니다.

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "StringEquals": {
            "glue:CredentialIssuingService": "glue.amazonaws.com"
        }
    }
}
```

## ID가 데이터 미리 보기 세션을 생성하지 못하게 하기
<a name="deny-data-preview-sessions-per-identity"></a>

이 섹션에는 ID가 데이터 미리 보기 세션을 생성하지 못하게 하는 데 사용되는 IAM 정책 예제가 포함되어 있습니다. 실행 중 데이터 미리 보기 세션에서 사용되는 역할과 별개인 ID에 이 정책을 연결합니다.

```
{
    "Sid": "DatapreviewDeny",
    "Effect": "Deny",
     "Action": [
           "glue:CreateSession"
     ],
     "Resource": [
          "arn:aws:glue:*:*:session/glue-studio-datapreview*"
      ]
 }
```

# AWS Glue용 리소스 기반 정책 예제
<a name="security_iam_resource-based-policy-examples"></a>

이 섹션에는 크로스 계정 액세스 권한을 부여하는 정책을 비롯해 리소스 기반 정책 예제가 포함되어 있습니다.

다음 예제에서는 AWS Command Line Interface(AWS CLI)를 사용하여 AWS Glue 서비스 API 작업과 상호 작용합니다. AWS Glue 콘솔에서 또는 AWS SDK 중 하나를 사용하여 동일한 작업을 수행할 수 있습니다.

**중요**  
AWS Glue 리소스 정책을 변경하면 계정 내 기존 AWS Glue 사용자에 대한 권한을 실수로 취소해 예기치 않은 중단을 일으킬 수 있습니다. 다음 예제는 개발 또는 테스트 계정에서만 시도해 보고, 변경하기 전에 이러한 예제가 기존 워크플로우에 문제를 일으키지 않는지 확인하십시오.

**Topics**
+ [AWS Glue에서 리소스 기반 정책 사용 시 고려 사항](#security_iam_resource-based-policy-examples-considerations)
+ [리소스 정책을 사용하여 동일한 계정에서 액세스 제어](#glue-policy-resource-policies-example-same-account)

## AWS Glue에서 리소스 기반 정책 사용 시 고려 사항
<a name="security_iam_resource-based-policy-examples-considerations"></a>

**참고**  
IAM 정책과 AWS Glue 리소스 정책을 둘 다 전파하려면 몇 초 가량 걸립니다. 새 정책을 연결하더라도 새 정책이 시스템 전체에서 전파되기까지 이전 정책이 계속해서 적용됩니다.

JSON 형식으로 작성된 정책 문서를 사용해 리소스 정책을 생성하거나 수정할 수 있습니다. 정책 구문은 자격 증명 기반 IAM 정책에 대해 동일하지만([IAM JSON 정책 참조](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html) 확인) 다음과 같은 예외가 있습니다.
+ 각 정책 설명에는 `"Principal"` 또는 `"NotPrincipal"` 블록이 필요합니다.
+ `"Principal"` 또는 `"NotPrincipal"`은 유효한 기존 보안 주체를 식별해야 합니다. 와일드카드 패턴(예: `arn:aws:iam::account-id:user/*`)은 허용되지 않습니다.
+ 정책의 `"Resource"` 블록에는 다음 정규식 구문과 일치하는 모든 리소스 ARN이 필요합니다. 여기서 첫 번째 `%s`는 *region*이고 두 번째 `%s`는 *account-id*입니다.

  ```
  *arn:aws:glue:%s:%s:(\*|[a-zA-Z\*]+\/?.*)
  ```

  예를 들어, `arn:aws:glue:us-west-2:account-id:*`와 `arn:aws:glue:us-west-2:account-id:database/default` 둘 다 허용되지만 `*`는 허용되지 않습니다.
+ 자격 증명 기반 정책과 달리 AWS Glue 리소스 정책에는 정책이 연결된 카탈로그에 속한 리소스의 Amazon 리소스 이름(ARN)만 포함되어야 합니다. 이러한 ARN은 항상 `arn:aws:glue:`로 시작합니다.
+ 정책은 자격 증명이 추가 정책 생성 또는 수정을 수행할 수 없도록 잠기게 만들 수는 없습니다.
+ 리소스 정책 JSON 문서는 크기가 10KB를 초과할 수 없습니다.

## 리소스 정책을 사용하여 동일한 계정에서 액세스 제어
<a name="glue-policy-resource-policies-example-same-account"></a>

이 예제에서 계정 A의 관리 사용자는 계정 A의 IAM 사용자인 `Alice`에게 카탈로그에 대한 모든 액세스 권한을 부여하는 리소스 정책을 생성합니다. Alice에게는 연결된 IAM 정책이 없습니다.

이렇게 하기 위해 관리 사용자가 다음 AWS CLI 명령을 실행합니다.

```
# Run as admin of Account A
$ aws glue put-resource-policy --profile administrator-name --region us-west-2 --policy-in-json '{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Principal": {
        "AWS": [
          "arn:aws:iam::account-A-id:user/Alice"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:*"
      ],
      "Resource": [
        "arn:aws:glue:us-west-2:account-A-id:*"
      ]
    }
  ]
}'
```

JSON 정책 문서를 AWS CLI 명령의 일부로 입력하는 대신 정책 문서를 파일로 저장한 다음 AWS CLI 명령에서 파일 경로(`file://`로 접두사가 지정됨)를 참조할 수 있습니다. 다음은 이렇게 할 수 있는 방법을 보여주는 예제입니다.

```
$ echo '{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Principal": {
        "AWS": [
          "arn:aws:iam::account-A-id:user/Alice"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:*"
      ],
      "Resource": [
        "arn:aws:glue:us-west-2:account-A-id:*"
      ]
    }
  ]
}' > /temp/policy.json

$ aws glue put-resource-policy --profile admin1 \
    --region us-west-2 --policy-in-json file:///temp/policy.json
```

리소스 정책이 전파된 후 Alice는 다음과 같이 계정 A에 있는 모든 AWS Glue 리소스에 액세스할 수 있습니다.

```
# Run as user Alice
$ aws glue create-database --profile alice --region us-west-2 --database-input '{
    "Name": "new_database",
    "Description": "A new database created by Alice",
    "LocationUri": "s3://amzn-s3-demo-bucket"
}'

$ aws glue get-table --profile alice --region us-west-2 --database-name "default" --table-name "tbl1"}
```

Alice의 `get-table` 호출에 대한 응답으로 AWS Glue 서비스는 다음을 반환합니다.

```
{
  "Table": {
    "Name": "tbl1",
    "PartitionKeys": [],
    "StorageDescriptor": {
        ......
    },
    ......
  }
}
```

# AWS Glue에 대한 AWS 관리형 정책 부여
<a name="security-iam-awsmanpol"></a>

AWS 관리형 정책은 AWS에 의해 생성되고 관리되는 독립 실행형 정책입니다. AWS 관리형 정책은 사용자, 그룹 및 역할에 권한 할당을 시작할 수 있도록 많은 일반 사용 사례에 대한 권한을 제공하도록 설계되었습니다.

AWS 관리형 정책은 모든 AWS 고객이 사용할 수 있기 때문에 특정 사용 사례에 대해 최소 권한을 부여하지 않을 수 있습니다. 사용 사례에 고유한 [고객 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)을 정의하여 권한을 줄이는 것이 좋습니다.

AWS 관리형 정책에서 정의한 권한은 변경할 수 없습니다. 만약 AWS가 AWS 관리형 정책에 정의된 권한을 업데이트할 경우 정책이 연결되어 있는 모든 보안 주체 ID(사용자, 그룹 및 역할)에도 업데이트가 적용됩니다. 새 AWS 서비스을(를) 시작하거나 새 API 작업을 기존 서비스에 이용하는 경우, AWS가 AWS 관리형 정책을 업데이트할 가능성이 높습니다.

자세한 내용은 *IAM 사용자 가이드*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)을 참조하세요.

## AWS Glue에 대한 AWS 관리형(미리 정의된) 정책
<a name="access-policy-examples-aws-managed"></a>

AWS는 AWS에서 생성하고 관리하는 독립형 IAM 정책을 제공하여 많은 일반 사용 사례를 처리합니다. 이러한 AWS 관리형 정책은 사용자가 필요한 권한을 조사할 필요가 없도록 일반 사용 사례에 필요한 권한을 부여합니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)을 참조하세요.

계정의 자격 증명에 연결할 수 있는 다음 AWS 관리형 정책은 AWS Glue에 고유하며, 사용 사례 시나리오를 기준으로 그룹화되어 있습니다.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) - 정책이 연결된 자격 증명이 AWS Management Console을 사용하는 경우 AWS Glue 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 보통 AWS Glue 콘솔의 사용자에게 해당됩니다.
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 다양한 AWS Glue 프로세스를 대신 실행하는 데 필요한 리소스에 대한 액세스 권한을 부여합니다. 이러한 리소스에는 AWS Glue, Amazon S3, IAM, CloudWatch Logs 및 Amazon EC2가 포함됩니다. 이 정책에 지정된 리소스의 이름 변환을 따르고자 한다면 AWS Glue 절차는 필요한 권한을 소유합니다. 이 정책은 크롤러, 작업 및 개발 엔드포인트를 정의할 때 지정된 역할에 일반적으로 추가됩니다.
+ [AwsGlueSessionUserRestrictedServiceRole](https://console.aws.amazon.com/iam/home#policies/details/arn:aws:iam::aws:policy%2Fservice-role%2FAwsGlueSessionUserRestrictedServiceRole) – 세션을 제외한 모든 AWS Glue 리소스에 대한 전체 액세스 권한을 제공합니다. 사용자와 연결된 대화형 세션만 사용자가 생성하고 사용할 수 있도록 허용합니다. 이 정책에는 다른 AWS 서비스에서 AWS Glue 리소스를 관리하는 데 AWS Glue에서 필요한 기타 권한이 포함됩니다. 또한 이 정책은 다른 AWS 서비스의 AWS Glue 리소스에 태그를 추가할 수 있도록 허용합니다.
**참고**  
전체 보안 이점을 얻으려면 `AWSGlueServiceRole`, `AWSGlueConsoleFullAccess` 또는 `AWSGlueConsoleSageMakerNotebookFullAccess` 정책이 할당된 사용자에게 이 정책을 부여하지 않습니다.
+ [AwsGlueSessionUserRestrictedPolicy](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AwsGlueSessionUserRestrictedPolicy) – 태그 키 'owner' 및 담당자의 AWS 사용자 ID와 일치하는 값이 제공된 경우에만 `CreateSession` API 작업을 사용하여 AWS Glue 대화형 세션을 생성할 수 있는 액세스 권한을 제공합니다. 이 자격 증명 정책은 `CreateSession` API 작업을 호출하는 IAM 사용자에게 연결됩니다. 또한 이 정책은 'owner' 태그 및 AWS 사용자 ID와 일치하는 값으로 생성된 AWS Glue 대화형 세션 리소스를 담당자가 조작할 수 있도록 허용합니다. 이 정책은 세션이 생성된 후 AWS Glue 세션 리소스에서 'owner' 태그를 변경하거나 제거할 수 있는 권한을 거부합니다.
**참고**  
전체 보안 이점을 얻으려면 `AWSGlueServiceRole`, `AWSGlueConsoleFullAccess` 또는 `AWSGlueConsoleSageMakerNotebookFullAccess` 정책이 할당된 사용자에게 이 정책을 부여하지 않습니다.
+ [AwsGlueSessionUserRestrictedNotebookServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AwsGlueSessionUserRestrictedNotebookServiceRole) - AWS Glue Studio 노트북 세션에 대해 충분한 액세스 권한을 제공하여 특정 AWS Glue 대화형 세션 리소스와 상호 작용합니다. 노트북을 생성하는 보안 주체(IAM 사용자 또는 역할)의 AWS 사용자 ID와 일치하는 'owner' 태그 값으로 생성된 리소스입니다. 이러한 태그에 대한 자세한 내용은 *IAM 사용 설명서*의 [보안 주체 키 값](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse) 차트를 참조하세요.

  이 서비스-역할 정책은 노트북 내에서 매직 명령문으로 지정되었거나 `CreateSession` API 작업에 역할로 전달된 역할에 연결됩니다. 또한 이 정책은 태그 키 'owner' 및 보안 주체의 AWS 사용자 ID와 일치하는 값이 제공된 경우에만 보안 주체가 AWS Glue Studio 노트북 인터페이스에서 AWS Glue 대화형 세션을 생성할 수 있도록 허용합니다. 이 정책은 세션이 생성된 후 AWS Glue 세션 리소스에서 'owner' 태그를 변경하거나 제거할 수 있는 권한을 거부합니다. 이 정책에는 Amazon S3 버킷에서 읽고 쓰기, CloudWatch 로그 쓰기, AWS Glue에서 사용되는 Amazon EC2 리소스에 대한 태그 생성 및 삭제 권한도 포함됩니다.
**참고**  
전체 보안 이점을 얻으려면 `AWSGlueServiceRole`, `AWSGlueConsoleFullAccess` 또는 `AWSGlueConsoleSageMakerNotebookFullAccess` 정책이 할당된 역할에 이 정책을 부여하지 않습니다.
+ [AwsGlueSessionUserRestrictedNotebookPolicy](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AwsGlueSessionUserRestrictedNotebookPolicy) – 태그 키 'owner' 및 노트북을 생성하는 보안 주체(IAM 사용자 또는 역할)의 AWS 사용자 ID와 일치하는 값이 있는 경우에만 AWS Glue Studio 노트북 인터페이스에서 AWS Glue 대화형 세션을 생성할 수 있는 액세스 권한을 제공합니다. 이러한 태그에 대한 자세한 내용은 *IAM 사용 설명서*의 [보안 주체 키 값](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse) 차트를 참조하세요.

  이 정책은 AWS Glue Studio 노트북 인터페이스에서 세션을 생성하는 보안 주체(IAM 사용자 또는 역할)에 연결됩니다. 또한 이 정책은 AWS Glue Studio 노트북에 충분히 액세스하여 특정 AWS Glue 대화형 세션 리소스와 상호 작용할 수 있도록 허용합니다. 이러한 리소스는 보안 주체의 AWS 사용자 ID와 일치하는 'owner' 태그 값으로 생성됩니다. 이 정책은 세션이 생성된 후 AWS Glue 세션 리소스에서 'owner' 태그를 변경하거나 제거할 수 있는 권한을 거부합니다.
+ [AWSGlueServiceNotebookRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceNotebookRole) – AWS Glue Studio 노트북에서 시작된 AWS Glue 세션에 액세스 권한을 부여합니다. 이 정책은 모든 세션에 대한 세션 정보를 나열하고 가져올 수 있도록 허용하지만 사용자가 AWS 사용자 ID로 태깅된 세션을 생성하고 사용할 수 있도록만 허용합니다. 이 정책은 AWS ID로 태깅된 AWS Glue 세션 리소스에서 'owner' 태그를 변경하거나 제거할 수 있는 권한을 거부합니다.

  AWS Glue Studio에서 노트북 인터페이스를 사용하여 작업을 생성하는 AWS 사용자에게 이 정책을 할당합니다.
+ [AWSGlueConsoleSageMakerNotebookFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleSageMakerNotebookFullAccess) – 정책이 연결된 자격 증명이 AWS Management Console을 사용할 때 AWS Glue 및 SageMaker AI 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 일반적으로 SageMaker AI 노트북을 관리하는 AWS Glue 콘솔의 사용자에게 연결됩니다.
+ [AWSGlueSchemaRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueSchemaRegistryFullAccess) – 정책이 연결된 자격 증명이 AWS Management Console 또는 AWS CLI를 사용할 때 AWS Glue Schema Registry 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 일반적으로 AWS Glue Schema Registry를 관리하는 AWS Glue 콘솔 또는 AWS CLI의 사용자에게 연결됩니다.
+ [AWSGlueSchemaRegistryReadonlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueSchemaRegistryReadonlyAccess) – 정책이 연결된 자격 증명이 AWS Management Console 또는 AWS CLI를 사용할 때 AWS Glue Schema Registry 리소스에 대한 읽기 전용 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 일반적으로 AWS Glue Schema Registry를 사용하는 AWS Glue 콘솔 또는 AWS CLI의 사용자에게 연결됩니다.

**참고**  
IAM 콘솔에 로그인하고 이 콘솔에서 특정 정책을 검색하여 이러한 권한 정책을 검토할 수 있습니다.

AWS Glue 작업 및 리소스에 대한 권한을 허용하는 고유의 사용자 정의 IAM 정책을 생성할 수도 있습니다. 해당 권한이 필요한 IAM 사용자 또는 그룹에 이러한 사용자 지정 정책을 연결할 수 있습니다.

사용자 지정 IAM 역할을 사용하는 동안 VPC 구성과의 연결을 생성하려면 다음 VPC 액세스 작업이 있어야 합니다.
+ secretsmanager:GetSecretValue
+ secretsmanager:PutSecretValue
+ secretsmanager:DescribeSecret
+ ec2:CreateNetworkInterface
+ ec2:DeleteNetworkInterface
+ ec2:DescribeNetworkInterfaces
+ ec2:DescribeSubnets

## AWS 관리형 정책에 대한 AWS Glue 업데이트
<a name="security-iam-awsmanpol-updates"></a>



이 서비스가 이러한 변경 내용을 추적하기 시작한 이후부터 AWS Glue의 AWS 관리형 정책 업데이트에 대한 세부 정보를 봅니다. 이 페이지의 변경 사항에 대한 자동 알림을 받으려면 AWS Glue 문서 기록 페이지에서 RSS 피드를 구독하세요.




| 변경 | 설명 | 날짜 | 
| --- | --- | --- | 
| AwsGlueSessionUserRestrictedNotebookPolicy – 기존 정책에 대한 간단한 업데이트입니다. | 소유자 태그 키에 glue:TagResource 작업 허용을 추가합니다. 소유자 태그 키가 있는 세션의 생성 시 태깅을 지원하는 데 필요합니다. | 2024년 8월 30일 | 
| AwsGlueSessionUserRestrictedNotebookServiceRole - 기존 정책에 대한 마이너 업데이트 | 소유자 태그 키에 glue:TagResource 작업 허용을 추가합니다. 소유자 태그 키가 있는 세션의 생성 시 태깅을 지원하는 데 필요합니다. | 2024년 8월 30일 | 
| AWSGlueServiceServiceServiceRole — 기존 정책에 대한 마이너 업데이트 | 소유자 태그 키에 glue:TagResource 작업 허용을 추가합니다. 소유자 태그 키가 있는 세션의 생성 시 태깅을 지원하는 데 필요합니다. | 2024년 8월 5일 | 
| AwsGlueSessionUserRestrictedServiceRole — 기존 정책에 대한 마이너 업데이트 | 소유자 태그 키에 glue:TagResource 작업 허용을 추가합니다. 소유자 태그 키가 있는 세션의 생성 시 태깅을 지원하는 데 필요합니다. | 2024년 8월 5일 | 
| AWSGlueServiceServiceServiceRole — 기존 정책에 대한 마이너 업데이트 | glue:StartCompletion 및 glue:GetCompletion을 정책에 추가합니다. AWS Glue에서의 Amazon Q 데이터 통합에 필요합니다. | 2024년 4월 30일 | 
| AwsGlueSessionUserRestrictedNotebookServiceRole - 기존 정책에 대한 마이너 업데이트 | glue:StartCompletion 및 glue:GetCompletion을 정책에 추가합니다. AWS Glue에서의 Amazon Q 데이터 통합에 필요합니다. | 2024년 4월 30일 | 
| AwsGlueSessionUserRestrictedServiceRole — 기존 정책에 대한 마이너 업데이트 | glue:StartCompletion 및 glue:GetCompletion을 정책에 추가합니다. AWS Glue에서의 Amazon Q 데이터 통합에 필요합니다. | 2024년 4월 30일 | 
| AWSGlueServiceNotebookRole - 기존 정책에 대한 마이너 업데이트. | glue:StartCompletion 및 glue:GetCompletion을 정책에 추가합니다. AWS Glue에서의 Amazon Q 데이터 통합에 필요합니다. | 2024년 1월 30일 | 
| AwsGlueSessionUserRestrictedNotebookPolicy – 기존 정책에 대한 간단한 업데이트입니다. | glue:StartCompletion 및 glue:GetCompletion을 정책에 추가합니다. AWS Glue에서의 Amazon Q 데이터 통합에 필요합니다. | 2023년 11월 29일 | 
| AWSGlueServiceNotebookRole - 기존 정책에 대한 마이너 업데이트. | codewhisperer:GenerateRecommendations를 정책에 추가합니다. AWS Glue가 CodeWhisperer 권장 사항을 생성하는 새 기능에 필요합니다. | 2023년 10월 9일 | 
|  AWSGlueServiceRole – 기존 정책에 대한 마이너 업데이트.  |  AWS Glue 로깅을 더 잘 반영하도록 CloudWatch 권한 범위를 좁힙니다. | 2023년 8월 4일 | 
|  AWSGlueConsoleFullAccess – 기존 정책에 대한 마이너 업데이트.  |  databrew 레시피 나열 및 설명 권한을 정책에 추가합니다. AWS Glue에서 레시피에 액세스할 수 있는 경우 새 기능에 대한 전체 관리 액세스 권한을 제공하는 데 필요합니다. | 2023년 5월 9일 | 
|  AWSGlueConsoleFullAccess – 기존 정책에 대한 마이너 업데이트.  |  cloudformation:ListStacks를 정책에 추가합니다. CloudFormation 인증 요구 사항이 변경된 후에도 기존 기능을 유지합니다. | 2023년 3월 28일 | 
|  대화형 세션 기능에 대해 추가된 새로운 관리형 정책: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/security-iam-awsmanpol.html)  |  이러한 정책은 AWS Glue Studio에서 대화형 세션과 노트북에 대한 추가 보안을 제공하도록 설계되었습니다. 소유자만 액세스할 수 있도록 정책에서 `CreateSession` API 작업에 대한 액세스를 제한합니다.  | 2021년 11월 30일 | 
|  AWSGlueConsoleSageMakerNotebookFullAccess – 기존 정책 업데이트  |  AWS Glue가 스크립트 및 임시 파일을 저장하는 데 사용하는 Amazon S3 버킷에 대한 읽기/쓰기 권한을 부여하는 작업에 대한 중복 리소스 ARN(`arn:aws:s3:::aws-glue-*/*`)을 제거했습니다. `"StringEquals"`를 `"ForAnyValue:StringLike"`로 변경하여 구문 문제를 수정하고, 순서가 어긋난 각 위치에서 ` "Effect": "Allow"` 줄을 `"Action":` 줄 앞으로 이동했습니다.  | 2021년 7월 15일 | 
|  AWSGlueConsoleFullAccess – 기존 정책 업데이트  | arn:aws:s3:::aws-glue-\$1/\$1가 스크립트 및 임시 파일을 저장하는 데 사용하는 Amazon S3 버킷에 대한 읽기/쓰기 권한을 부여하는 작업에 대한 중복 리소스 ARN(AWS Glue)을 제거했습니다. | 2021년 7월 15일 | 
|  AWS Glue에서 변경 사항 추적 시작  | AWS Glue에서 AWS 관리형 정책에 대한 변경 내용 추적을 시작했습니다. | 2021년 6월 10일 | 

# 작업 실행에 대해 동적 범위의 정책 부여
<a name="dynamically-scoped-policies"></a>

AWS Glue는 작업 실행에 대한 동적 세션 정책이라는 강력한 새 기능을 제공합니다. 이 기능을 사용하면 여러 개의 IAM 역할을 생성하지 않고도 각 작업 실행에 세분화된 사용자 지정 권한을 지정할 수 있습니다.

`StartJobRun` API를 사용하여 Glue 작업을 시작할 때 인라인 세션 정책을 포함할 수 있습니다. 이 정책은 특정 작업 실행 기간 동안 작업 실행 역할의 권한을 일시적으로 수정합니다. 다른 AWS 서비스의 `AssumeRole` API에서 임시 자격 증명을 사용하는 것과 유사합니다.
+ **보안 개선**: 작업 권한을 각 실행에 필요한 최소 권한으로 제한할 수 있습니다.
+ **관리 간소화**: 다양한 시나리오에 맞춰 수많은 IAM 역할을 생성하고 유지할 필요가 없습니다.
+ **유연성**: 런타임 파라미터 또는 테넌트별 요구 사항에 따라 권한을 동적으로 조정할 수 있습니다.
+ **확장성**: 이 방법은 테넌트 간에 리소스를 격리해야 하는 다중 테넌트 환경에 적합합니다.

**동적 범위 정책 사용 부여 예제:**

다음 예제에서는 작업 실행 ID에 따라 경로가 동적으로 결정되는 특정 Amazon S3 버킷 경로에만 **읽기 및 **쓰기 액세스 권한을 작업에 부여하는 방법을 보여줍니다. 각 작업 실행에 대해 세분화된 실행별 권한을 구현하는 방법을 보여줍니다.

**CLI에서**

```
aws glue start-job-run \
    --job-name "your-job-name" \
    --execution-role-session-policy '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": [
                    "arn:aws:s3:::specific-bucket/${JobRunId}/*"
                ]
            }
        ]
    }'
```

# AWS Glue 리소스 ARN 지정
<a name="glue-specifying-resource-arns"></a>

AWS Glue에서 AWS Identity and Access Management(IAM) 정책을 사용하여 리소스에 대한 액세스를 제어할 수 있습니다. 정책에서 Amazon 리소스 이름(ARN)을 사용하여 정책이 적용되는 리소스를 식별합니다. AWS Glue의 일부 리소스는 ARN을 지원하지 않습니다.

**Topics**
+ [Data Catalog ARN](#data-catalog-resource-arns)
+ [AWS Glue에서 카탈로그 이외 객체의 ARN](#non-catalog-resource-arns)
+ [AWS Glue 카탈로그 이외 단수 API 작업에 대한 액세스 제어](#non-catalog-singular-apis)
+ [여러 항목을 검색하는 AWS Glue 카탈로그 이외 API 직업에 대한 액세스 제어](#non-catalog-plural-apis)
+ [AWS Glue 카탈로그 이외 BatchGet API 작업에 대한 액세스 제어](#non-catalog-batch-get-apis)

## Data Catalog ARN
<a name="data-catalog-resource-arns"></a>

Data Catalog 리소스에는 `catalog`가 루트인 계층 구조가 있습니다.

```
arn:aws:glue:region:account-id:catalog
```

각 AWS 계정에는 12자리 계정 ID가 카탈로그 ID인 Data Catalog가 AWS 리전에 하나씩 있습니다. 다음 표와 같이 리소스에는 고유한 ARN이 연결되어 있습니다.


| **리소스 유형**  |  **ARN 형식**  | 
| --- | --- | 
| 카탈로그 |  `arn:aws:glue:region:account-id:catalog` 예: `arn:aws:glue:us-east-1:123456789012:catalog`  | 
| 데이터베이스 |  `arn:aws:glue:region:account-id:database/database name` 예: `arn:aws:glue:us-east-1:123456789012:database/db1`  | 
| 표 |  `arn:aws:glue:region:account-id:table/database name/table name` 예: `arn:aws:glue:us-east-1:123456789012:table/db1/tbl1`  | 
| 페더레이션 S3 테이블 카탈로그(모든 테이블 버킷) |   `arn:aws:glue:region:account-id:catalog/s3tablescatalog`  예: `arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog`  | 
| 페더레이션 S3 테이블 버킷 카탈로그(하위 카탈로그) |   `arn:aws:glue:region:account-id:catalog/s3tablescatalog/bucket name`  예: `arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog/amzn-s3-demo-bucket1`  | 
| 페더레이션 S3 테이블 데이터베이스 |   `arn:aws:glue:region:account-id:database/s3tablescatalog/child catalog name/database name`  예: `arn:aws:glue:us-east-1:123456789012:database/s3tablescatalog/amzn-s3-demo-bucket1/nsdb1`  | 
| 페더레이션 S3 테이블 |   `arn:aws:glue:region:account-id:table/s3tablescatalog/child catalog name/database name/table name`  예: `arn:aws:glue:us-east-1:123456789012:table/s3tablescatalog/amzn-s3-demo-bucket1/nsdb1/s3tbl1`  | 
| 페더레이션 S3 테이블 카탈로그(Lake Formation에 등록된 단일 테이블 버킷) | `arn:aws:glue:region:account-id:catalog`/*카탈로그 이름*  예: `arn:aws:glue:us-east-1:123456789012:catalog/amzn-s3-demo-bucket1`   | 
| 페더레이션 S3 테이블 데이터베이스  | `arn:aws:glue:region:account-id:catalog`/*카탈로그 이름*/*데이터베이스 이름* 예: `arn:aws:glue:us-east-1:123456789012:database/amzn-s3-demo-bucket1/nsdb1`  | 
| 페더레이션 S3 테이블 | `arn:aws:glue:region:account-id:catalog`/*카탈로그 이름*/*데이터베이스 이름*/*테이블 이름*  예: `arn:aws:glue:us-east-1:123456789012:table/amzn-s3-demo-bucket1/nsdb1/s3tbl1`   | 
| 페더레이션 또는 관리형 카탈로그(다중 카탈로그의 최상위 카탈로그) |   `arn:aws:glue:region:account-id:catalog/top-level catalog name`  예: `arn:aws:glue:us-east-1:123456789012:catalog/nscatalog` 관리형 카탈로그의 ARN 형식은 동일한 구조를 따릅니다.  | 
| 페더레이션 다중 레벨 카탈로그(다중 레벨 카탈로그의 하위 카탈로그) |   `arn:aws:glue:region:account-id:catalog/top-level catalog name/child catalog name`  예: `arn:aws:glue:us-east-1:123456789012:catalog/nscatalog/dbcatalog`  | 
| 페더레이션 데이터베이스 |   `arn:aws:glue:region:account-id:database/name space catalog name/child catalog name/database name`  예: `arn:aws:glue:us-east-1:123456789012:database/nscatalog/dbcatalog/schemadb`  | 
| 페더레이션 테이블 |   `arn:aws:glue:region:account-id:table/name space catalog name/child catalog name/database name/table name`  예: `arn:aws:glue:us-east-1:123456789012:table/nscatalog/dbcatalog/schemadb/rstbl1`  | 
| 카탈로그 링크 컨테이너 | `arn:aws:glue:region:account-id:catalog`/*링크 컨테이너 이름* 예: `arn:aws:glue:glue:us-east-1:123456789012:catalog`/linkcontainer-example   | 
| 데이터베이스 | `arn:aws:glue:region:account-id:catalog`/*링크 컨테이너 이름*/*데이터베이스 이름* 예: `arn:aws:glue:glue:us-east-1:123456789012:database`/linkcontainer-example/link-db  | 
| 사용자 정의 함수 |  `arn:aws:glue:region:account-id:userDefinedFunction/database name/user-defined function name` 예: `arn:aws:glue:us-east-1:123456789012:userDefinedFunction/db1/func1`  | 
| 연결 |  `arn:aws:glue:region:account-id:connection/connection name` 예: `arn:aws:glue:us-east-1:123456789012:connection/connection1`  | 
| 대화형 세션 |  `arn:aws:glue:region:account-id:session/interactive session id` 예: `arn:aws:glue:us-east-1:123456789012:session/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`  | 

세분화된 액세스 제어를 사용하려면 IAM 정책 및 리소스 정책에서 이러한 ARN을 사용하여 특정 리소스에 대한 액세스 권한을 부여 및 거부할 수 있습니다. 와일드카드가 정책에서 허용됩니다. 예를 들어, 다음 ARN은 데이터베이스 `default`의 모든 테이블과 일치합니다.

```
arn:aws:glue:us-east-1:123456789012:table/default/*
```

**중요**  
Data Catalog 리소스에 대해 수행된 모든 작업에는 리소스와 해당 리소스의 모든 상위 항목에 대한 권한이 필요합니다. 예를 들어, 테이블에 대한 파티션을 생성하려면 해당 테이블, 데이터베이스 및 이 테이블이 있는 카탈로그에 대한 권한이 필요합니다. 다음 예에서는 Data Catalog에서 데이터베이스 `PrivateDatabase`의 테이블 `PrivateTable`에 대한 파티션을 생성하는 데 필요한 권한을 보여줍니다.  

```
{
   "Sid": "GrantCreatePartitions",
   "Effect": "Allow",
   "Action": [
       "glue:BatchCreatePartitions"
   ],
   "Resource": [
       "arn:aws:glue:us-east-1:123456789012:table/PrivateDatabase/PrivateTable",
       "arn:aws:glue:us-east-1:123456789012:database/PrivateDatabase",
       "arn:aws:glue:us-east-1:123456789012:catalog"
   ]
}
```
리소스와 해당 리소스의 모든 상위 항목에 대한 권한 이외에도 모든 삭제 작업에는 해당 리소스의 모든 하위 항목에 대한 권한이 필요합니다. 예를 들어, 데이터베이스를 삭제하려면 데이터베이스 및 데이터베이스가 위치하고 있는 카탈로그 외에도 데이터베이스에 있는 모든 테이블과 사용자 정의 함수에 대한 권한이 필요합니다. 다음 예에서는 Data Catalog에서 `PrivateDatabase` 데이터베이스를 삭제하는 데 필요한 권한을 보여줍니다.  

```
{
   "Sid": "GrantDeleteDatabase",
   "Effect": "Allow",
   "Action": [
       "glue:DeleteDatabase"
   ],
   "Resource": [
       "arn:aws:glue:us-east-1:123456789012:table/PrivateDatabase/*",
       "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/PrivateDatabase/*",
       "arn:aws:glue:us-east-1:123456789012:database/PrivateDatabase",
       "arn:aws:glue:us-east-1:123456789012:catalog"
   ]
}
```
즉, Data Catalog 리소스에 대한 작업은 다음 권한 규칙을 따릅니다.  
카탈로그에 대한 작업에는 카탈로그에 대한 권한만 필요합니다.
데이터베이스에 대한 작업에는 데이터베이스와 카탈로그에 대한 권한이 필요합니다.
데이터베이스에 대한 삭제 작업에는 데이터베이스 및 카탈로그와 해당 데이터베이스 내 모든 테이블과 사용자 정의 함수에 대한 권한이 필요합니다.
테이블, 파티션 또는 테이블 버전에 대한 작업에는 테이블, 데이터베이스 및 카탈로그에 대한 권한이 필요합니다.
사용자 정의 함수에 대한 작업에는 사용자 정의 함수, 데이터베이스 및 카탈로그에 대한 권한이 필요합니다.
연결에 대한 작업에는 연결과 카탈로그에 대한 권한이 필요합니다.

## AWS Glue에서 카탈로그 이외 객체의 ARN
<a name="non-catalog-resource-arns"></a>

일부 AWS Glue 리소스에서는 ARN을 사용하여 액세스를 제어할 수 있도록 리소스 수준 권한을 허용합니다. IAM 정책에서 이러한 ARN을 사용하여 세분화된 액세스 제어를 활성화할 수 있습니다. 다음 표에는 리소스 ARN을 포함할 수 있는 리소스가 나와 있습니다.


| **리소스 유형**  |  **ARN 형식**  | 
| --- | --- | 
| 크롤러 |  `arn:aws:glue:region:account-id:crawler/crawler-name` 예: `arn:aws:glue:us-east-1:123456789012:crawler/mycrawler`  | 
| 작업 |  `arn:aws:glue:region:account-id:job/job-name` 예: `arn:aws:glue:us-east-1:123456789012:job/testjob`  | 
| 트리거 |  `arn:aws:glue:region:account-id:trigger/trigger-name` 예: `arn:aws:glue:us-east-1:123456789012:trigger/sampletrigger`  | 
| 개발 엔드포인트 |  `arn:aws:glue:region:account-id:devEndpoint/development-endpoint-name` 예: `arn:aws:glue:us-east-1:123456789012:devEndpoint/temporarydevendpoint`  | 
| 기계 학습 변환 |  `arn:aws:glue:region:account-id:mlTransform/transform-id` 예: `arn:aws:glue:us-east-1:123456789012:mlTransform/tfm-1234567890`  | 

## AWS Glue 카탈로그 이외 단수 API 작업에 대한 액세스 제어
<a name="non-catalog-singular-apis"></a>

AWS Glue 카탈로그 이외 *단수* API 작업은 단일 항목(개발 엔드포인트)에 대해 수행됩니다. `GetDevEndpoint`, `CreateUpdateDevEndpoint` 및 `UpdateDevEndpoint`를 예로 들 수 있습니다. 이러한 작업의 경우 정책은 `"action"` 블록에 API 이름을, `"resource"` 블록에 리소스 ARN을 배치해야 합니다.

사용자가 `GetDevEndpoint` 작업을 호출하도록 허용하려 한다고 가정해 보겠습니다. 다음 정책은 `myDevEndpoint-1`이라는 엔드포인트에 필요한 최소 권한을 부여합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "MinimumPermissions",
      "Effect": "Allow",
      "Action": "glue:GetDevEndpoint",
      "Resource": "arn:aws:glue:us-east-1:111122223333:devEndpoint/myDevEndpoint-1"
    }
  ]
}
```

------

다음 정책은 와일드카드(\$1)를 사용하여 `myDevEndpoint-`와 일치하는 리소스에 대한 `UpdateDevEndpoint` 액세스를 허용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "PermissionWithWildcard",
      "Effect": "Allow",
      "Action": "glue:UpdateDevEndpoint",
      "Resource": "arn:aws:glue:us-east-1:111122223333:devEndpoint/myDevEndpoint-*"
    }
  ]
}
```

------

다음 예에서처럼 정책 2개를 결합할 수 있습니다. 이름이 `A`로 시작하는 개발 엔드포인트에 대한 `EntityNotFoundException`을 볼 수 있습니다. 하지만 다른 개발 엔드포인트에 액세스하려고 시도하면 액세스 거부 오류가 반환됩니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CombinedPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:UpdateDevEndpoint",
        "glue:GetDevEndpoint"
      ],
      "Resource": "arn:aws:glue:us-east-1:111122223333:devEndpoint/A*"
    }
  ]
}
```

------

## 여러 항목을 검색하는 AWS Glue 카탈로그 이외 API 직업에 대한 액세스 제어
<a name="non-catalog-plural-apis"></a>

일부 AWS Glue API 작업은 여러 항목(예: 여러 개발 엔드포인트)을 검색합니다(예: `GetDevEndpoints`). 이 작업의 경우 와일드카드(\$1) 리소스만 지정할 수 있으며 특정 ARN을 지정할 수 없습니다.

예를 들어 정책에 `GetDevEndpoints`를 포함하려면 리소스의 범위를 와일드카드(\$1)로 지정해야 합니다. 이 예에서는 단수 작업(`GetDevEndpoint`, `CreateDevEndpoint` 및 `DeleteDevendpoint`)의 범위 또한 모든(\$1) 리소스로 지정합니다.

```
{
            "Sid": "PluralAPIIncluded",
            "Effect": "Allow",
            "Action": [
                "glue:GetDevEndpoints",
                "glue:GetDevEndpoint",
                "glue:CreateDevEndpoint",
                "glue:UpdateDevEndpoint"
            ],
            "Resource": [
                "*"
            ]
}
```

## AWS Glue 카탈로그 이외 BatchGet API 작업에 대한 액세스 제어
<a name="non-catalog-batch-get-apis"></a>

일부 AWS Glue API 작업은 여러 항목(예: 여러 개발 엔드포인트)을 검색합니다(예: `BatchGetDevEndpoints`). 이 작업에서 액세스할 수 있는 리소스의 범위를 제한하도록 ARN을 지정할 수 있습니다.

예를 들어 특정 개발 엔드포인트에 대한 액세스를 허용하려면 정책에 리소스 ARN과 함께 `BatchGetDevEndpoints`를 포함시킵니다.

```
{
            "Sid": "BatchGetAPIIncluded",
            "Effect": "Allow",
            "Action": [
                "glue:BatchGetDevEndpoints"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:123456789012:devEndpoint/de1" 
            ]
}
```

이 정책을 통해 `de1`이라는 개발 엔드포인트에 성공적으로 액세스할 수 있습니다. 그러나 `de2`라는 개발 엔드포인트에 액세스를 시도하면 오류가 반환됩니다.

```
An error occurred (AccessDeniedException) when calling the BatchGetDevEndpoints operation: No access to any requested resource.
```

**중요**  
`List` 및 `BatchGet` API 작업 사용과 같이 IAM 정책을 설정하기 위한 대체 접근 방식은 [AWS Glue 자격 증명 기반 정책 예제](security_iam_id-based-policy-examples.md) 단원을 참조하십시오.

# 교차 계정 액세스 권한 부여
<a name="cross-account-access"></a>

계정 간에 데이터 카탈로그 리소스에 대한 액세스 권한을 부여하면 추출, 변환, 로드(ETL) 작업에서 다른 계정의 데이터를 쿼리하고 결합할 수 있습니다.

**Topics**
+ [AWS Glue에서 교차 계정 액세스 권한을 부여하는 방법](#cross-account-how-works)
+ [데이터 카탈로그 리소스 정책 추가 또는 업데이트](#cross-account-adding-resource-policy)
+ [교차 계정 API 호출 수행](#cross-account-calling)
+ [교차 계정 ETL 호출 수행](#cross-account-calling-etl)
+ [교차 계정 CloudTrail 로깅](#cross-account-ct-logs)
+ [교차 계정 리소스 소유권 및 결제](#cross-account-ownership-and-billing)
+ [교차 계정 액세스 제한 사항](#cross-account-limitations)

## AWS Glue에서 교차 계정 액세스 권한을 부여하는 방법
<a name="cross-account-how-works"></a>

AWS Glue 메서드를 사용하거나 AWS Lake Formation 교차 계정 권한 부여를 사용하여 외부 AWS 계정에 데이터에 대한 액세스 권한을 부여할 수 있습니다. AWS Glue 매서드는 AWS Identity and Access Management(IAM) 정책을 사용하여 세분화된 액세스 제어를 수행합니다. Lake Formation은 관계형 데이터베이스 시스템의 `GRANT/REVOKE` 명령과 유사한 더 간단한 `GRANT/REVOKE` 권한 모델을 사용합니다.

이 섹션에서는 AWS Glue 메서드 사용에 대해 설명합니다. Lake Formation 교차 계정 권한 부여 사용에 대한 자세한 내용은 *AWS Lake Formation Developer Guide*의 [Granting Lake Formation Permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/lake-formation-permissions.html)를 참조하세요.

리소스에 대한 교차 계정 액세스 권한을 부여하기 위한 두 가지 AWS Glue 방법이 있습니다.
+ 데이터 카탈로그 리소스 정책 사용
+ IAM 역할 사용

**리소스 정책을 사용하여 교차 계정 액세스 권한 부여**  
다음은 데이터 카탈로그 리소스 정책을 사용하여 교차 계정 액세스 권한을 부여하는 일반적인 단계입니다.

1. 계정 A의 관리자(또는 기타 권한이 있는 자격 증명)가 계정 A의 데이터 카탈로그에 리소스 정책을 연결합니다. 이 정책은 계정 B에게 계정 A의 카탈로그에 있는 리소스에 대한 작업을 수행할 수 있는 특정 교차 계정 권한을 부여합니다.

1. 계정 B의 관리자는 계정 A에게서 받은 권한을 위임하는 계정 B의 IAM 자격 증명에 IAM 정책을 연결합니다.

   계정 B의 자격 증명이 이제 계정 A의 지정된 리소스에 대한 액세스 권한을 갖습니다.

   자격 증명은 리소스에 액세스하기 위해 리소스 소유자(계정 A)*와* 상위 계정(계정 B) *모두*의 권한이 필요합니다.

**IAM 역할을 사용하여 교차 계정 액세스 권한 부여**  
다음은 IAM 역할을 사용하여 교차 계정 액세스 권한을 부여하는 일반적인 단계입니다.

1. 리소스를 소유한 계정(계정 A)의 관리자(또는 권한이 있는 다른 자격 증명)가 IAM 역할을 생성합니다.

1. 계정 A의 관리자는 문제의 리소스에 대한 교차 계정 액세스 권한을 부여하는 역할에 정책을 연결합니다.

1. 계정 A의 관리자는 다른 계정(계정 B)의 IAM 자격 증명을 해당 역할을 맡을 수 있는 보안 주체로 식별하는 역할에 신뢰 정책을 연결합니다.

   AWS 서비스에 역할을 맡을 수 있는 권한을 부여하고 싶다면, 신뢰 정책의 보안 주체는 AWS 서비스 보안 주체가 됩니다.

1. 이제, 계정 B의 관리자가 계정 B에 있는 하나 이상의 IAM 자격 증명에 권한을 위임해 해당 자격 증명이 역할을 맡을 수 있습니다. 그러면 계정 B의 해당 자격 증명에 계정 A의 리소스에 대한 액세스 권한이 부여됩니다.

IAM을 사용하여 권한을 위임하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*의 [액세스 관리](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html) 단원을 참조하십시오. 사용자, 그룹, 역할 및 권한에 대한 자세한 내용은 *IAM User Guide*의 [Identities (users, groups, and roles)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)를 참조하세요.

두 가지 방법을 비교하려면 *IAM 사용 설명서*의 [IAM 역할과 리소스 기반 정책의 차이점](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html)을 참조하세요. AWS Glue에서는 두 옵션을 모두 지원하지만, 리소스 정책은 데이터 카탈로그 리소스에 대한 액세스 권한만 부여할 수 있다는 제한 사항이 있습니다.

예를 들어, 계정 B의 `Dev` 역할에게 계정 A의 데이터베이스 `db1`에 대한 액세스 권한을 부여하려면 다음 리소스 정책을 계정 A의 카탈로그에 연결합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:role/Dev"
        ]
      },
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1"
      ]
    }
  ]
}
```

------

또한 계정 B는 계정 A의 `db1`에 액세스하기 전에 다음 IAM 정책을 `Dev` 역할에 연결해야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1"
      ]
    }
  ]
}
```

------

## 데이터 카탈로그 리소스 정책 추가 또는 업데이트
<a name="cross-account-adding-resource-policy"></a>

콘솔, API 또는 AWS Command Line Interface(AWS CLI)를 사용하여 AWS Glue 데이터 카탈로그 리소스 정책을 추가하거나 업데이트할 수 있습니다.

**중요**  
AWS Lake Formation이 있는 계정에서 이미 교차 계정 권한을 부여한 경우 데이터 카탈로그 리소스 정책을 추가하거나 업데이트하려면 추가 단계가 필요합니다. 자세한 내용은 *AWS Lake Formation 개발자 가이드*의 [AWS Glue 및 Lake Formation을 모두 사용하여 계정 권한 관리](https://docs.aws.amazon.com/lake-formation/latest/dg/hybrid-cross-account.html)를 참조하세요.  
Lake Formation 크로스 계정 권한 부여가 있는지 확인하려면 `glue:GetResourcePolicies` API 작업 또는 AWS CLI를 사용합니다. `glue:GetResourcePolicies`이(가) 이미 존재하는 데이터 카탈로그 정책 이외의 정책을 반환하는 경우 Lake Formation 권한 부여가 존재합니다. 자세한 내용은 *AWS Lake Formation 개발자 가이드*의 [GetResourcePolicies API 작업을 사용하여 크로스 계정 권한 부여 보기](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-getresourcepolicies.html)를 참조하세요.

**데이터 카탈로그 리소스 정책을 추가하거나 업데이트하려면(콘솔)**

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 엽니다.

   `glue:PutResourcePolicy` 권한이 있는 AWS Identity and Access Management(IAM) 관리 사용자로 로그인합니다.

1. 탐색 창에서 **설정**을 선택합니다.

1. [**데이터 카탈로그 설정(Data catalog settings)**] 페이지의 [**권한(Permissions)**]에서 리소스 정책을 텍스트 영역에 붙여넣습니다. 그런 다음 **저장**을 선택합니다.

   정책의 권한이 Lake Formation을 사용하여 부여된 권한에 추가된다는 알림이 콘솔에 표시되면 [**계속(Proceed)**]을 선택합니다.

**데이터 카탈로그 리소스 정책을 추가하거나 업데이트하려면(AWS CLI)**
+ `aws glue put-resource-policy` 명령을 제출합니다. Lake Formation 권한 부여가 이미 있는 경우 `--enable-hybrid` 옵션을 `'TRUE'` 값과 함께 포함해야 합니다.

  이 명령의 사용 예는 [AWS Glue용 리소스 기반 정책 예제](security_iam_resource-based-policy-examples.md) 섹션을 참조하세요.

## 교차 계정 API 호출 수행
<a name="cross-account-calling"></a>

모든 AWS Glue Data Catalog 작업에는 `CatalogId` 필드가 있습니다. 교차 계정 액세스를 활성화하기 위한 필수 권한이 부여된 경우 호출자는 계정을 교차하여 데이터 카탈로그 API 호출을 수행할 수 있습니다. 호출자는 해당 대상 계정의 리소스에 액세스하기 위해 `CatalogId`의 대상 AWS 계정 ID를 전달하여 이렇게 합니다.

`CatalogId` 값을 입력하지 않으면 AWS Glue에서는 기본적으로 호출자의 계정 ID를 사용하고 교차 계정 호출이 수행되지 않습니다.

## 교차 계정 ETL 호출 수행
<a name="cross-account-calling-etl"></a>

일부 AWS Glue PySpark 및 Scala API에는 카탈로그 ID 필드가 있습니다. 교차 계정 액세스가 가능하도록 모든 필수 권한이 부여된 경우 ETL 작업은 대상 계정의 데이터 카탈로그 리소스에 액세스할 수 있도록 카탈로그 ID 필드에 대상 AWS 계정 ID를 전달하여 계정 간에 API 작업에 대해 PySpark 및 Scala를 호출할 수 있습니다.

카탈로그 ID 값을 입력하지 않으면 AWS Glue에서는 기본적으로 호출자의 계정 ID를 사용하고 교차 계정 호출이 수행되지 않습니다.

`catalog_id`를 지원하는 PySpark API는 [GlueContext 클래스](aws-glue-api-crawler-pyspark-extensions-glue-context.md) 단원을 참조하십시오. `catalogId`를 지원하는 Scala API는 [AWS Glue Scala GlueContext API](glue-etl-scala-apis-glue-gluecontext.md) 단원을 참조하십시오.

다음 예는 ETL 작업을 실행하기 위해 피부여자에게 필요한 권한을 보여줍니다. 이 예에서 *grantee-account-id*는 작업을 실행하는 클라이언트의 `catalog-id`이고, *grantor-account-id*는 리소스의 소유자입니다. 이 예에서는 부여자의 계정에 있는 모든 카탈로그 리소스에 대한 권한을 부여합니다. 부여되는 리소스의 범위를 제한하기 위해 카탈로그, 데이터베이스, 테이블 및 연결에 해당하는 특정 ARN을 제공할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetConnection",
        "glue:GetDatabase",
        "glue:GetTable",
        "glue:GetPartition"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:root"
        ]
      },
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:*"
      ]
    }
  ]
}
```

------

**참고**  
부여자의 계정에 있는 테이블이 부여자의 계정에 있는 Amazon S3 위치를 가리키는 경우 피부여자의 계정에서 ETL 작업을 실행하는 데 사용하는 IAM 역할은 부여자의 계정에서 객체를 나열하고 가져올 수 있는 권한이 있어야 합니다.

계정 A의 클라이언트가 ETL 작업을 생성하고 실행할 수 있는 권한을 이미 가지고 있는 경우 교차 계정 액세스를 위해 ETL 작업을 설정하는 기본 단계는 다음과 같습니다.

1. 교차 계정 데이터 액세스를 허용합니다(Amazon S3 교차 계정 액세스가 이미 설정된 경우에는 이 단계를 건너뜀).

   1. 계정 A에서 교차 계정 액세스를 허용하도록 계정 B에서 Amazon S3 버킷 정책을 업데이트합니다.

   1. 계정 B에서 버킷에 대한 액세스를 허용하도록 계정 A에서 IAM 정책을 업데이트합니다.

1. 교차 계정 데이터 카탈로그 액세스를 허용합니다.

   1. 계정 A에서 액세스를 허용하도록 계정 B에서 데이터 카탈로그에 연결된 리소스 정책을 생성하거나 업데이트합니다.

   1. 계정 B에서 데이터 카탈로그에 대한 액세스를 허용하도록 계정 A에서 IAM 정책을 업데이트합니다.

## 교차 계정 CloudTrail 로깅
<a name="cross-account-ct-logs"></a>

AWS Glue 추출, 변환, 로드 작업이 AWS Lake Formation 교차 계정 권한 부여를 통해 공유되는 데이터 카탈로그 테이블의 기본 데이터에 액세스하면 추가 AWS CloudTrail 로깅 동작이 있습니다.

이 설명을 위해 테이블을 공유한 AWS 계정은 소유자 계정이고 테이블을 공유한 계정은 수신자 계정입니다. 수신자 계정의 ETL 작업이 소유자 계정의 테이블에 있는 데이터에 액세스하면 수신자 계정의 로그에 추가된 데이터 액세스 CloudTrail 이벤트가 소유자 계정의 CloudTrail 로그에 복사됩니다. 이는 소유자 계정이 다양한 수신자 계정의 데이터 액세스를 추적할 수 있도록 하기 위한 것입니다. 기본적으로 CloudTrail 이벤트에는 사람이 읽을 수 있는 보안 주체 식별자(기본 ARN)가 포함되어 있지 않습니다. 수신자 계정의 관리자는 로그에 보안 주체 ARN을 포함하도록 선택할 수 있습니다.

자세한 내용은 *AWS Lake Formation 개발자 가이드*의 [크로스 계정 CloudTrail 로깅](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-logging.html)을 참조하세요.

**참고**  
[AWS Glue에서 로깅 및 모니터링](logging-and-monitoring.md)

## 교차 계정 리소스 소유권 및 결제
<a name="cross-account-ownership-and-billing"></a>

AWS 계정 하나(계정 A)의 사용자가 다른 계정(계정 B)에서 새 리소스(예: 데이터베이스)를 생성하는 경우 리소스의 소유자는 해당 리소스가 생성된 계정인 계정 B입니다. 계정 B의 관리자는 읽기 및 쓰기와 세 번째 계정에게 액세스 권한 부여 등을 비롯해 새 리소스에 액세스하기 위한 전체 권한을 자동으로 가져옵니다. 계정 A의 사용자는 계정 B가 부여한 적절한 권한이 있는 경우에만 방금 생성한 리소스에 액세스할 수 있습니다.

스토리지 비용과 새 리소스와 직접 연관된 기타 비용이 리소스 소유자인 계정 B에게 청구됩니다. 리소스를 생성한 사용자의 요청 비용은 요청자의 계정인 계정 A로 청구됩니다.

 AWS Glue 결제 및 요금에 대한 자세한 내용은 [AWS 요금 책정 방식](https://d0.awsstatic.com/whitepapers/aws_pricing_overview.pdf)을 참조하세요.

## 교차 계정 액세스 제한 사항
<a name="cross-account-limitations"></a>

AWS Glue 교차 계정 액세스에는 다음과 같은 제한 사항이 있습니다.
+ 리전의 AWS Glue 지원 이전에 Amazon Athena 또는 Amazon Redshift Spectrum을 사용하여 데이터베이스와 테이블을 생성했으며 리소스 소유자 계정이 Amazon Athena 데이터 카탈로그를 AWS Glue로 마이그레이션하지 않은 경우에는 AWS Glue에 대한 교차 계정 액세스가 허용되지 않습니다. [GetCatalogImportStatus(get\$1catalog\$1import\$1status)](aws-glue-api-catalog-migration.md#aws-glue-api-catalog-migration-GetCatalogImportStatus)를 사용하여 현재 마이그레이션 상태를 찾을 수 있습니다. Athena 카탈로그를 AWS Glue로 마이그레이션하는 방법에 대한 자세한 내용은 *Amazon Athena 사용 설명서*의 [AWS Glue Data Catalog로 단계별 업그레이드](https://docs.aws.amazon.com/athena/latest/ug/glue-upgrade.html)를 참조하세요.
+ 교차 계정 액세스는 데이터베이스, 테이블, 사용자 정의 함수 및 연결을 포함한 데이터 카탈로그 리소스에 *대해서만* 지원됩니다.
+ Athena에서 데이터 카탈로그에 대한 교차 계정 액세스를 사용하려면 카탈로그를 Athena `DataCatalog` 리소스로 등록해야 합니다. 지침은 *Amazon Athena 사용 설명서*의 [다른 계정에서 AWS Glue Data Catalog 등록](https://docs.aws.amazon.com/athena/latest/ug/data-sources-glue-cross-account.html)을 참조하세요.

# AWS Glue 자격 증명 및 액세스 문제 해결
<a name="security_iam_troubleshoot"></a>

다음 정보를 사용하여 AWS Glue 및 IAM에서 발생할 수 있는 공통적인 문제를 진단하고 수정할 수 있습니다.

**Topics**
+ [AWS Glue에서 작업을 수행할 권한이 없음](#security_iam_troubleshoot-no-permissions)
+ [iam:PassRole을 수행하도록 인증되지 않음](#security_iam_troubleshoot-passrole)
+ [내 AWS 계정 외부의 사람이 내 AWS Glue 리소스에 액세스할 수 있게 허용하기를 원합니다.](#security_iam_troubleshoot-cross-account-access)

## AWS Glue에서 작업을 수행할 권한이 없음
<a name="security_iam_troubleshoot-no-permissions"></a>

작업을 수행할 권한이 없다는 오류가 표시되면 작업을 수행할 수 있도록 정책을 업데이트해야 합니다.

다음의 예제 오류는 `mateojackson` IAM 사용자가 콘솔을 사용하여 가상 `my-example-widget` 리소스에 대한 세부 정보를 보려고 하지만 가상 `glue:GetWidget` 권한이 없을 때 발생합니다.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: glue:GetWidget on resource: my-example-widget
```

이 경우, `glue:GetWidget` 작업을 사용하여 `my-example-widget` 리소스에 액세스할 수 있도록 `mateojackson` 사용자 정책을 업데이트해야 합니다.

도움이 필요한 경우 AWS 관리자에게 문의하세요. 관리자는 로그인 자격 증명을 제공한 사람입니다.

## iam:PassRole을 수행하도록 인증되지 않음
<a name="security_iam_troubleshoot-passrole"></a>

`iam:PassRole` 작업을 수행할 수 있는 권한이 없다는 오류가 수신되면 AWS Glue에 역할을 전달할 수 있도록 정책을 업데이트해야 합니다.

일부 AWS 서비스에서는 새로운 서비스 역할 또는 서비스 연결 역할을 생성하는 대신 해당 서비스에 기존 역할을 전달할 수 있습니다. 이렇게 하려면 사용자가 서비스에 역할을 전달할 수 있는 권한을 가지고 있어야 합니다.

다음 예제 오류는 `marymajor`라는 IAM 사용자가 콘솔을 사용하여 AWS Glue에서 작업을 수행하려고 하는 경우에 발생합니다. 하지만 작업을 수행하려면 서비스 역할이 부여한 권한이 서비스에 있어야 합니다. Mary는 서비스에 역할을 전달할 수 있는 권한을 가지고 있지 않습니다.

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

이 경우, Mary가 `iam:PassRole`작업을 수행할 수 있도록 Mary의 정책을 업데이트해야 합니다.

도움이 필요한 경우 AWS 관리자에게 문의하세요. 관리자는 로그인 자격 증명을 제공한 사람입니다.

## 내 AWS 계정 외부의 사람이 내 AWS Glue 리소스에 액세스할 수 있게 허용하기를 원합니다.
<a name="security_iam_troubleshoot-cross-account-access"></a>

다른 계정의 사용자 또는 조직 외부의 사람이 리소스에 액세스할 때 사용할 수 있는 역할을 생성할 수 있습니다. 역할을 수임할 신뢰할 수 있는 사람을 지정할 수 있습니다. 리소스 기반 정책 또는 액세스 제어 목록(ACL)을 지원하는 서비스의 경우, 이러한 정책을 사용하여 다른 사람에게 리소스에 대한 액세스 권한을 부여할 수 있습니다.

자세한 내용은 다음을 참조하세요.
+ AWSGlue 에서 이러한 기능을 지원하는지 여부를 알아보려면 [AWS Glue에서 IAM을 사용하는 방식](security_iam_service-with-iam.md) 섹션을 참조하세요.
+ 소유하고 있는 AWS 계정의 리소스에 대한 액세스 권한을 제공하는 방법을 알아보려면 *IAM 사용 설명서*의 [자신이 소유한 다른 AWS 계정의 IAM 사용자에 대한 액세스 권한 제공](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)을 참조하세요.
+ 리소스에 대한 액세스 권한을 서드 파티 AWS 계정에게 제공하는 방법을 알아보려면 *IAM 사용 설명서*의 [서드 파티가 소유한 AWS 계정에 대한 액세스 제공](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)을 참조하세요.
+ ID 페더레이션을 통해 액세스 권한을 제공하는 방법을 알아보려면 *IAM 사용 설명서*의 [외부에서 인증된 사용자에게 액세스 권한 제공(ID 페더레이션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)을 참조하세요.
+ 크로스 계정 액세스에 대한 역할과 리소스 기반 정책 사용의 차이점을 알아보려면 *IAM 사용 설명서*의 [IAM의 크로스 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.