

# 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) 단원을 참조하십시오.