クロスアカウントでAthenaクエリ

https://aws.amazon.com/jp/about-aws/whats-new/2021/05/amazon-athena-adds-built-in-support-for-cross-account-aws-glue-data-catalogs/

Atheaのクロスアカウントを試した自分メモ

* データ所有アカウント：999999999999
* Athenaクエリするアカウント：666666666666

6666..でAthenaクエリ
9999..にGlueカタログやS3のオブジェクト

## 権限設定

### S3権限

【データ所有アカウント操作】
"データ所有アカウント"のAthenaでクエリされるS3バケットのバケットポリシーを以下のようにして、"Athenaクエリアカウント"からのアクセス許可しておく

```json
{
    "Version": "2012-10-17",
    "Id": "Policy1620910711847",
    "Statement": [
        {
            "Sid": "Stmt1620910644611",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::666666666666:root"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::test-bucket-ue",
                "arn:aws:s3:::test-bucket-ue/*"
            ]
        }
    ]
}
```

### Glue権限

【データ所有アカウント操作】
Glueの設定をクリックして、以下のアクセス権限ポリシーを設定し、"Athenaクエリアカウント"からのGlue Data Catalogへのアクセス許可する。(Glueのリソースベースのアクセス許可)

```json
{
  "Version" : "2012-10-17",
  "Statement" : [ {
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "arn:aws:iam::666666666666:user/uehara"
    },
    "Action" : "glue:*",
    "Resource" : [ "arn:aws:glue:ap-northeast-1:999999999999:catalog", "arn:aws:glue:ap-northeast-1:999999999999:database/default", "arn:aws:glue:ap-northeast-1:999999999999:table/default/*" ]
  } ]
}
```

![スクリーンショット 0003-05-13 22.35.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/eb7be56a-95aa-54c8-0037-e56c3633fba8.png)

### IAM権限

【Athenaクエリアカウト操作】
"データ所有アカウント"のデータカタログデータベースやテーブルにアクセス許可を与えるIAMポリシーを作成し、作成したIAMポリシーを操作するIAMユーザー(またはIAMロール)にアタッチする

```json:IAMポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "glue:*",
            "Resource": [
                "arn:aws:glue:us-east-1:999999999999:catalog",
                "arn:aws:glue:us-east-1:999999999999:database/default",
                "arn:aws:glue:us-east-1:999999999999:table/default/*"
            ]
        }
    ]
}
```

### Athenaデータカタログとデータソース作成

【Athenaクエリアカウト操作】
Athenaの上部で[データソース]をクリックし、[データソースを接続する]をクリックする

![スクリーンショット 0003-05-13 22.57.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/ccd5d50f-b512-89da-98ce-d6e3c2ee16ce.png)

そのまま[次へ]

![スクリーンショット 0003-05-13 22.58.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/7a5b1dd8-8845-f82e-6fc0-457385fadda9.png)

[別のアカウントのGlue データカタログ]にチェック入れて[次へ]

![スクリーンショット 0003-05-13 22.59.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/6c413674-cccb-b5c9-a714-4dd69965809d.png)

カタログ名に任意の名前(ここではcrosstest-uehara2)、カタログIDに"データ所有アカウント"のアカウントIDを入れて[登録]をクリック

![スクリーンショット 0003-05-13 23.01.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/c02f11fa-9f80-51c4-9bf6-4012b5ef20ea.png)

## Athenaでクロスアカウントクエリ

データソースに作成したAthenaデータカタログを選択しクエリ。"データ所有アカウント"のGlueテーブルを使い、"データ所有アカウント"のS3のデータに、"Athenaクエリアカウント"からクエリ出来ている

![スクリーンショット 0003-05-13 22.27.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/70b375b3-adfc-abf3-5a1e-b5d5c7cb3840.png)

## 参考ドキュメント

公式
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/data-sources-glue-cross-account.html
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/security-iam-cross-account-glue-catalog-access.html

### 補足
aws cliでAthenaのデータカタログを作成する

```bash
$ cat tmpcross.json 
{
    "Description": "Cross-account Glue catalog",
    "Name": "ownerCatalog",
    "Parameters": {"catalog-id" : "999999999999"},
    "Type": "GLUE"
}
```

```bash
$ aws athena create-data-catalog --cli-input-json file://tmpcross.json
```