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


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

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

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

権限設定

S3権限

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

{
    "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のリソースベースのアクセス許可)

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

IAM権限

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

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の上部で[データソース]をクリックし、[データソースを接続する]をクリックする

そのまま[次へ]

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

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

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

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

参考ドキュメント

公式
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のデータカタログを作成する

$ cat tmpcross.json 
{
    "Description": "Cross-account Glue catalog",
    "Name": "ownerCatalog",
    "Parameters": {"catalog-id" : "999999999999"},
    "Type": "GLUE"
}
$ aws athena create-data-catalog --cli-input-json file://tmpcross.json