

# 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*、2 番目の `%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 ドキュメントのサイズは 10 KB を超えることはできません。

## 同じアカウント内のアクセスをコントロールするリソースポリシーの使用
<a name="glue-policy-resource-policies-example-same-account"></a>

この例では、Account A の管理者ユーザーが、Account 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:*"
      ]
    }
  ]
}'
```

AWS CLI コマンドの一部として JSON ポリシードキュメントを入力する代わりに、ポリシードキュメントをファイルに保存して、`file://` でプレフィックスが付けられた AWS CLI コマンドのファイルパスをリファレンスできます。その方法の例は次のとおりです。

```
$ 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 は Account 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": {
        ......
    },
    ......
  }
}
```