【新機能】Amazon AthenaがクロスアカウントでAWS Glue Data Catalogにアクセスできるようになりました!

朗報です!本日より、Amazon Athenaから別アカウントのAWS Glue Data Catalogのデータベースやテーブルにクエリできるようになりました!

マルチアカウントでAWSデータレイクを構築・運用しているプロジェクトにとって、かなり嬉しいアップデートでしょう。

何が嬉しいのか?

これまでAthenaから別アカウントのデータレイク(S3など)を参照したい場合、そのデータソースを定義したGlue Data Catalogをそれぞれのアカウント下で複製する必要がありました。アカウント数が増えるほどカタログの管理が複雑化してくる点で、管理コストがかかっていたユーザーも多かったのではないでしょうか?

今回のアップデートで、例えば一つのアカウントにカタログを集約して、別アカウントのAthenaからクエリを投げられるようになりました。マルチアカウントのデータレイク管理が捗りそうですね!

料金・制限など

クロスアカウント・カタログアクセスに対する料金は発生しません。Glue Data CatalogとAthenaのの標準の使用料のみの請求です。

クロスアカウント・カタログアクセスは現在、Athena engine version 2がサポートされているリージョンのみで使用可能です。また、現状CREATE VIEW文のみクロスアカウント・アクセスは非対応とのことです。

実際に試してみた

便宜上、カタログを所有するアカウントをOwner、Ownerのカタログを参照する別アカウントをBorrowerと定義します。クロスアカウント・カタログアクセスを有効にするには、①Ownerアカウント内でBorrowerアカウントからのアクセスを許可するIAM Policyを作成し、②BorrowerアカウントでOwnerアカウントのリソースにアクセスするためのIAM PolicyをIAM RoleまたIAM Userにアタッチする必要があります。

まずは①のIAM Policyから作成していきます。OwnerアカウントのGlueコンソールからSettingsを開きます。

Permissionsの項目にIAM Policyを書けるフォームがあるので、以下のように入力します。私の環境では、41XXXXXXXXXXで始まるアカウントがBorrower、10XXXXXXXXXXで始まるアカウントがOwnerで、BorrowerアカウントのIAM RoleをPrincipalに指定しました。Ownerアカウントのリソース権限はワイルドカード*を使って緩めに設定しています。

{
  "Version" : "2012-10-17",
  "Statement" : [ {
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : [ "arn:aws:iam::41XXXXXXXXXX:role/cm-haruta.takumi" ]
    },
    "Action" : "glue:*",
    "Resource" : [
        "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:catalog",
        "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:database/*",
        "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:table/*"
    ]
  } ]
}

続いて、①のIAM Policyを作成します。Borrowerのアカウントに切り替え、IAMコンソールからRolesを開きます。

先ほどPrincipalに指定したRoleをクリック → Attach policiesをクリック → Create policyをクリックします。

JSONのエディタから、先ほどOwnerアカウントのIAM Policyと同じResourceを定義します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "glue:*",
            "Resource": [
                "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:catalog",
                "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:database/*",
                "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:table/*"
            ]
        }
    ]
}

任意のPolicy名を設定し、IAM Roleに作成したPolicyがアタッチできていればOKです。

IAMの設定が完了したら、Borrowerのアカウントで、Ownerアカウントを参照するAthenaのData Sourceを作成します。

Athenaのコンソールを開き、Connect data sourceをクリックします。

このままNextをクリックします。

Step 2: Connection detailsの画面で、AWS Glue Data Catalog in another accountという項目があるので、こちらを選択してNextをクリックします。

続きの設定画面で、Catalog nameにownerCatalog、Catalog IDにOwnerアカウントのIDを入力します。

いざ、Data sourceownerCatalogを選択…!すんなりとOwnerアカウントのテーブルを取得することができました!

もちろん、クエリも可能です。

最後に

思ってた以上に簡単い設定でき、快適に使うことができました!今までアカウントごとにカタログを複製していた方は、ぜひこちらの機能に切り替えることをオススメします。