[レポート] ANT376 : AWS Glue Data Catalog のアクセスコントロール #reinvent

2018.12.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

ANT376-Access Control in AWS Glue Data Catalog のセッションのレポートとなります。AWS Lake Formation のセキュリティを正しく理解するには必須のセッションです。

セッション概要

In this chalk talk, we describe how resource-level authorization and resource-based authorization work in the AWS Glue Data Catalog, and how these features are integrated with other AWS data analytics services such as Amazon Athena. In addition, we cover a few cross-account access patterns, and how cross-account access in AWS Glue Data Catalog can be used to support some of these use cases.

このchalk talkでは、AWS Glue Data Catalogでのリソースレベルの認可とリソースベースの認可の仕組み、およびこれらの機能がAmazon Athenaなどの他のAWSデータ分析サービスとどのように統合されているかについて説明します。 さらに、いくつかのクロスアカウントアクセスパターンと、AWS Glue Data Catalogのクロスアカウントアクセスを使用して、これらのユースケースの一部をサポートする方法についても説明します。

スピーカー

概要

  • データカタログのリソース(言い換えれば、メタデータ)におけるFine-grained access controlであり、データではない
  • IDベースのポリシーとリソースベースのポリシーの両方を使用できる
  • AWS Glueリソースポリシー(リソースベース)を使用してクロスアカウントアクセスを有効にすることができる
  • まだタグベースの認可はサポートされていない

リソース・レベルでの Fine-grained access control

  • Database(データベース)
  • Table(テーブル)
  • Connection(接続)
  • Function(関数)

AWS Glue Data Catalog の resource ARN

  • arn:aws:glue:<region>:<account-id>:<resource-type>/<resource-path>
  • 許可されたリソースタイプ文字列
    • catalog
    • database
    • table
    • connection
    • userDefinedFunction
    • arn:aws:glue:us-east-1:12345:catalog
    • arn:aws:glue:us-east-1:12345:database/aws
    • arn:aws:glue:us-east-1:12345:table/aws/demo
    • arn:aws:glue:us-east-1:12345:userDefinedFunction/aws/udf1
    • arn:aws:glue:us-east-1:12345:connection/conn1

ポリシー適用の仕組み

  • Identity-based policies(IAMポリシー)
    • IAMによって管理する
    • IAMプリンシパル(IAMユーザー、IAMロールなど)にアタッチする
  • Resource-based policies
    • AWS Glueによって管理される
    • カタログに設定
    • Amazon S3のバケットポリシーと同様、アカウント/カタログごとに1つのポリシー
    • クロスアカウントアクセスを許可するために必要
  • いずれかを使用して、同じアカウント内のユーザーにアクセス権を付与できる

クロスアカウントアクセス

  • シナリオ − アカウントB(12345)のユーザー「Bob」は、アカウントA(67890)のデータカタログにアクセスして、 awsテータベースの demoテーブルを参照したい
    • アカウントBのBobのIAMユーザーARN:arn:aws:iam::12345:user/bob
    • アカウントAのカタログが us-east-1 にあるとします
    • アカウントAのカタログARN:arn:aws:glue:us-east-1:67890:catalog
    • アカウントAのデータベースARN:arn:aws:glue:us-east-1:67890:database/aws
    • アカウントAのテーブルARN:arn:aws:glue:us-east-1:67890:table/aws/demo
  • Bobは、テーブルにアクセスするためにIAMポリシーとリソースポリシーの両方を必要とする

  • IAMポリシー(BobのIAMユーザー "user / bob"にアタッチ)

  • リソースポリシー
    • AWS Glueコンソールのポリシーエディタ
    • PutResourcePolicy API

デモ

AWS Glue ETL によるクロスアカウントアクセス

AWS Glue のETLスクリプトでは、クロスアカウントのデータソースの指定にcatalog_idを指定してアクセスします。

Amazon EMR によるクロスアカウントアクセス

Amazon EMR のクロスアカウントはhive.metastore.glue.catalogidパラメタにcatalog_idを指定してクラスタを作成します。

上記以外に /etc/hive/conf.dist/hive-site.xml にhive.metastore.glue.catalogidパラメタを指定する方法もあります。

AWS Glue Data Catalog のリソースポリシーエディタ

AWS Glueのコンソールの[Settings]([設定])から[Permission]([アクセス権限])でポリシーを追加して、データカタログのきめ細かなアクセスコントロールを定義します。

階層的アクセス許可モデル

  • すべての親リソースを明示的に許可することなく、子リソースに直接アクセスすることはできません
    • テーブルリソースのGetTableアクションが成功するには、親データベースとカタログに対するアクセス許可が必要
  • 子リソースへのアクセスは、いずれかの親リソースに対して明示的に拒否されてブロックされる

「権限」の整理

  • 「action」の権限

アクション部分は、Action句内で定義されます。下記の例では、catalogリソースに対してはGetから始まるのアクション、databaseリソースに対してはGetDatabaseGetTableのアクション、tableリソースに対してはGetTableGetPartitionのアクションのリソース・ステートメントが含まれています。glue:Get*のようなワイルドカード指定も可能です。

  • 「resource」の権限

アクセス部分は、Resource句内で定義されます。この部分は、アクションを実行できるAWS Glue Data Catalogオブジェクトと、その操作によって返される結果オブジェクトを定義します。

下記の例ではawsデータベースとdb1テータベースにのみアクセスできるようにするポリシーを定義するとします。このポリシーでは、ユーザーはawsデータベースのdemoテーブルとdb1テーブルのelb_logsテーブルを返すことができます。

Gotchas

  • DeleteDatabase アクションも指定できる
  • Amazon Athenaのデータベース "default"
  • GetDatabasesとGetTablesでのフィルタリング
  • ワイルドカード指定
  • パーティションやテーブルのバージョンに対して、きめ細かなアクセス制御はない

最後に

AWS Glue Data Catalog のIDベースのとアクションとリソースの権限管理は、AWS Lake Formation を用いることでより管理しやすいインタフェースを提供します。

合わせて読みたい

[レポート] ANT327 : AWSにおけるセキュアなデータレイクのベストプラクティス #reinvent

ANT396 : [NEW LAUNCH!] AWS Lake Formation の紹介 – セキュアなデータレイクを構築する #reinvent