

# AWS Glue リソース ARN の指定
<a name="glue-specifying-resource-arns"></a>

AWS Glue では、AWS Identity and Access Management (IAM) ポリシーを使用してリソースへのアクセスを制御できます。ポリシーで Amazon リソースネーム (ARN) を使用して、ポリシーを適用するリソースを識別します。AWS Glue のすべてのリソースで ARN がサポートされているわけではありません。

**Topics**
+ [データカタログの 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 のカタログ以外のバッチ取得 API オペレーションのアクセス制御](#non-catalog-batch-get-apis)

## データカタログの ARN
<a name="data-catalog-resource-arns"></a>

Data Catalog リソースには、`catalog` をルートとする階層構造があります。

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

各 AWS アカウントは、カタログ ID として 12 桁のアカウント ID を使用する単一の Data Catalog を、AWS リージョン内に持っています。リソースには、次の表に示すように、一意の ARN が関連付けられています。


| **リソースタイプ: **  |  **ARN 形式**  | 
| --- | --- | 
| カタログ | `arn:aws:glue:{{region}}:{{account-id}}:catalog`<br />例: `arn:aws:glue:us-east-1:123456789012:catalog` | 
| データベース | `arn:aws:glue:{{region}}:{{account-id}}:database/{{database name}}`<br />例: `arn:aws:glue:us-east-1:123456789012:database/db1`。 | 
| [テーブル] | `arn:aws:glue:{{region}}:{{account-id}}:table/{{database name}}/{{table name}}`<br />例: `arn:aws:glue:us-east-1:123456789012:table/db1/tbl1`。 | 
| フェデレーティッド S3 テーブルカタログ (すべてのテーブルバケット) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/s3tablescatalog` <br />例: `arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog` | 
| フェデレーティッド S3 テーブルバケットカタログ (子カタログ) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/s3tablescatalog/{{bucket name}}` <br />例: `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}}` <br />例: `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}}` <br />例: `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`/{{catalog name}} <br />例: `arn:aws:glue:us-east-1:123456789012:catalog/amzn-s3-demo-bucket1`  | 
| フェデレーティッド S3 テーブルデータベース  | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{catalog name}}/{{database name}}<br />例: `arn:aws:glue:us-east-1:123456789012:database/amzn-s3-demo-bucket1/nsdb1` | 
| フェデレーティッド S3 テーブル | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{catalog name}}/{{database name}}/{{table name}}<br /> 例: `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}}` <br />例: `arn:aws:glue:us-east-1:123456789012:catalog/nscatalog`<br />マネージドカタログの ARN 形式は、同じ構造に従います。 | 
| フェデレーティッドマルチレベルカタログ (マルチレベルカタログ内の子カタログ) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/{{top-level catalog name}}/{{child catalog name}}` <br />例: `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}}` <br />例: `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}}` <br />例: `arn:aws:glue:us-east-1:123456789012:table/nscatalog/dbcatalog/schemadb/rstbl1` | 
| カタログリンクコンテナ | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{link container name}}<br />例: `arn:aws:glue:glue:us-east-1:123456789012:catalog`/linkcontainer-example  | 
| データベース | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{link container name}}/{{database name}}<br />例: `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}}`<br />例: `arn:aws:glue:us-east-1:123456789012:userDefinedFunction/db1/func1`。 | 
| 接続 | `arn:aws:glue:{{region}}:{{account-id}}:connection/{{connection name}}`<br />例: `arn:aws:glue:us-east-1:123456789012:connection/connection1`。 | 
| インタラクティブセッション | `arn:aws:glue:{{region}}:{{account-id}}:session/{{interactive session id}}`<br />例: `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 形式**  | 
| --- | --- | 
| Crawler | `arn:aws:glue:{{region}}:{{account-id}}:crawler/{{crawler-name}}`<br />例: `arn:aws:glue:us-east-1:123456789012:crawler/mycrawler`。 | 
| ジョブ | `arn:aws:glue:{{region}}:{{account-id}}:job/{{job-name}}`<br />例: `arn:aws:glue:us-east-1:123456789012:job/testjob`。 | 
| Trigger トリガー) | `arn:aws:glue:{{region}}:{{account-id}}:trigger/{{trigger-name}}`<br />例: `arn:aws:glue:us-east-1:123456789012:trigger/sampletrigger` | 
| 開発エンドポイント | `arn:aws:glue:{{region}}:{{account-id}}:devEndpoint/{{development-endpoint-name}}`<br />例: `arn:aws:glue:us-east-1:123456789012:devEndpoint/temporarydevendpoint` | 
| 機械学習変換 | `arn:aws:glue:{{region}}:{{account-id}}:mlTransform/{{transform-id}}`<br />例: `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` です。これらのオペレーションでは、ポリシーは API 名を `"action"` ブロックに、リソース ARN を `"resource"` ブロックに置く必要があります。

`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"
    }
  ]
}
```

------

次のポリシーは、ワイルドカード (\*) を使用して `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` など) は、複数の項目 (複数の開発エンドポイントなど) を取得します。このオペレーションでは、特定の ARN ではなく、ワイルドカード (\*) リソースのみを指定できます。

たとえば、`GetDevEndpoints` をポリシーに含めるには、リソースの範囲をワイルドカード (\*) に限定する必要があります。単一のオペレーション (`GetDevEndpoint`、`CreateDevEndpoint`、および `DeleteDevendpoint`) の範囲も、例のすべての (\*) リソースに限定されます。

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

## AWS Glue のカタログ以外のバッチ取得 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)」を参照してください。