0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Glue データカタログへのクロスアカウントアクセスを試してみた

Last updated at Posted at 2023-04-19

背景・目的

提供側のアカウントのデータカタログ(データベース、テーブル)を、利用者側のアカウントからAthenaでアクセスさせます。
Glueのデータカタログについて、クロスアカウントアクセスさせるための設定をメモしておきます。

今回試してみた構成は下記のとおりです。

image.png

まとめ

データカタログの共有には、下記の対応が必要です。

  • 提供側
    • Glueデータカタログのポリシーの修正
    • S3バケットポリシーの修正
  • 利用者側
    • Athenaのデータソース追加

実践

提供側の設定

S3バケットとデータの作成

提供側(アカウントA)でS3バケットとデータを作成します。

  1. 下記のデータをS3にアップロードします。
    {"process_date":"20230419","value":1}
    
    image.png

Glueデータベースとテーブルの作成

  1. Glueデータベースを作成します。
    image.png

  2. 下記を入力し、Nextをクリックします。

    • Table名
    • S3パス
    • フォーマット(ここではJSON)
      image.png
      image.png
  3. 下記を入力し、Nextをクリックします。

    • スキーマ(カラム名、型)
      image.png
  4. 最後に内容を確認し、Createをクリックします。

  5. パーティションキーを追加します。(忘れていたのでスキーマを編集しました。)
    image.png

Athenaで確認します。

提供側のアカウントでデータを確認できるか確認します。

  1. Athenaのクエリエディタでパーティションを作成します。

    MSCK REPAIR TABLE `test_table`;
    

    image.png

  2. データを確認します。(確認できました。)

    SELECT * FROM "crossaccount_access_db"."test_table" limit 10;
    

    image.png

Glueデータカタログの設定

利用者側からアクセス可能なように、データカタログのポリシーを修正します。

  1. GlueのナビゲーションペインでCatalog settingsをクリックします。
    image.png
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::XXXXXXXX:XXXXXXXXX/XXXXXXXX"
                ]
            },
            "Action": [
                "glue:List*",
                "glue:Get*"
            ],
            "Resource": [
                "arn:aws:glue:XXXXXX:XXXXXXXX:catalog",
                "arn:aws:glue:XXXXXX:XXXXXXXX:database/crossaccount_access_db",
                "arn:aws:glue:XXXXXX:XXXXXXXX:table/crossaccount_access_db/test_table"
            ]
        }
    ]
}

S3バケットポリシーの設定

  1. Athenaからアクセスされるテーブルに紐付いているS3バケットのポリシーを修正します。Principalには利用者アカウントのIAMロールを追加します。
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Principal": {
                    "AWS": [
                        "arn:aws:iam::XXXXXXX:XXXXX/XXXXX/XXXXXX"
                    ]
    			},
    			"Effect": "Allow",
    			"Action":[
                    "s3:GetObject",
                    "s3:ListBucket"
                 ],
    			"Resource": 
    			    [
    			        "arn:aws:s3:::XXXX",
    			        "arn:aws:s3:::XXXX/*"
    			    ]
    		}
    	]
    }
    

利用者側の設定

データソースの作成

  1. Athenaのナビゲーションペインでデータソースをクリックします。
    image.png

  2. 右上の「データソースの作成」をクリックします。
    image.png

  3. S3 - AWS Glueデータカタログを選択し、次へをクリックします。
    image.png

  4. 下記を入力し、「次へ」をクリックします。

    • AWS Glueデータカタログを選択で、「別のアカウントのAWS Glueデータカタログ」
    • データソース名:任意
    • カタログID:提供側のアカウントID12桁
      image.png
  5. 内容を確認し、「データソースの作成」を クリックします。

Athenaで確認

  1. Athenaのクエリエディタを開き、データソースに作成した[account_a_catalog」を選択します。提供側アカウントで作成したデータベースとテーブルが表示されました。
    image.png

  2. 下記のクエリを実行します。結果が返ってきました。

    SELECT * FROM account_a_catalog.crossaccount_access_db.test_table
    

    image.png

考察

今回、データカタログを、別アカウントに共有する方法を試してみました。
データレイクで作成したデータを利用者側に連携せずに、直接参照させるユースケース場合などに利用ができそうです。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?