Lake Formation のアクセス制御

Lake Formation

概要

Lake Formation では、

  • データベースやテーブルなどのデータカタログリソースに対するメタデータレベル
  • 統合された分析エンジンに代わって、S3 に保存されているデータへのアクセスを管理するストレージレベル

の 2 つのレベルでアクセス制御を設定することができます。

メタデータレベルのアクセス制御

データカタログへのアクセス制御

メタデータレベルのアクセス制御は、データカタログへのアクセスに関する制御で、実施するにあたって以下の 2 ステップを踏む必要があります。

  1. 対象のデータカタログへのアクセス許可を Lake Formation で管理するようにする
  2. データカタログへの権限をプリンシパルに付与する

1. 対象のデータカタログへのアクセス許可を Lake Formation で管理するようにする

Lake Formation は、Glue データカタログに対するきめ細かいアクセス制御を実現するサービスですが、Glue より後発のサービスです。元々データカタログへのアクセス制御は、アイデンティティポリシーやリソースポリシーで実現されていました。

Lake Formation では、Glue との下位互換性を維持するためにデフォルトでは以下が適用されます。

  • 既存のすべての Glue データカタログに対する Super 権限が IAMAllowedPrincipal に付与される
  • 新しいデータカタログに対して IAM アクセス制御を利用する設定 (IAMAllowedPrincipal の付与) が有効になる

IAMAllowedPrincipal は互換性を維持するために用意された Lake Formation 内で使われるグループです。IAMAllowedPrincipal には、データカタログにアクセスできるすべての IAM プリンシパルが含まれます。つまり、IAMAllowedPrincipalSuper 権限が付与されている場合、これまで通りのアイデンティティポリシーやリソースポリシーによる制御が継続され、Lake Formation による詳細なアクセス制御は適用されません。

このため、データカタログへのアクセス許可を Lake Formation で管理するためには、IAMAllowedPrincipal グループによるアクセス許可を使用しないようにする必要があります。

「新しいデータカタログに対して IAM アクセス制御を利用する設定」は、有効無効を切り替えることができます。設定個所は 2 箇所あり、ひとつ目は [Data Catalog setting] メニューの「Default permissions for newly created databases and tables」設定です。新しく作成するデータベース、およびテーブルについて、リージョンレベルで IAM アクセス制御を利用するか設定します。

ふたつ目は、データベース作成時の「Default permissions for newly created tables」というオプションで、これを有効にして作成したデータベースにテーブルを作成すると、そのテーブルには IAMAllowedPrincipal へのアクセス許可が付与されます。

ちなみに、ひとつ目の設定のテーブルに関する設定が有効の場合は、ふたつ目の設定にデフォルトでチェックが入るようになります。

Note
This option causes the check box Use only IAM access control for new tables in this database in the Create database dialog box to be selected by default. It does nothing more than that. It is the check box in the Create database dialog box that enables the grant of Super to IAMAllowedPrincipals.

https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-reference.html

データカタログへのアクセス許可を Lake Formation で管理するために、IAMAllowedPrincipal グループによるアクセス許可を使用しないようにする方法は、以下のいずれかの方法となります。

  • IAMAllowedPrincipal のアクセス許可を削除する
  • ハイブリッドアクセスモードを使用する
IAMAllowedPrincipal のアクセス許可を削除する

データカタログに対する IAMAllowedPrincipal のアクセス許可を削除する方法です。IAMAllowedPrincipal のアクセス許可を削除し、Lake Formation で設定するポリシーによって制御される状態にします。

  1. IAMAllowedPrincipal グループに Super 権限が許可されているため、Lake Formation で設定した User1 用の権限に関わらず、User1 はすべてのアクションを実行できます。
  2. アクセス先のデータベースに IAMAllowedPrincipal グループの許可設定がないため、User1 が実行できるアクションは Lake Formation で設定した Describe に限定されます。
ハイブリッドアクセスモードを使用する

IAMAllowedPrincipal のアクセス許可を削除する」方法では、既存のアクセス制御と互換性を失うことになりますので、一括で必要な設定をすべて Lake Formation に移行する必要があります。既存の設定を洗い出して Lake Formation の設定に対応させることになるので、大量にリソースがある場合は単純に作業量が大きくなるうえ、設定ミスなどが起きる可能性があります。

ハイブリッドアクセスモードは、IAMAllowedPrincipal のアクセス許可を残して互換性を保ったまま、特定のリソースとプリンシパルに対して Lake Formation によるアクセス制御を適用する機能です。

バイブリッドアクセスモードの詳細は、以下の記事で取り上げています。

ハイブリッドアクセスモード
概要 ハイブリッドアクセスモードとは、既存のデータカタログに対する制御を保持しつつ、特定のリソースとプリンシパルに対して Lake Formation によるアクセス制御を適用する機能です。 ハイブリッドアクセスモードを利用した場合の認証フ...

2. データカタログへの権限をプリンシパルに付与する

データカタログを Lake Formation の管理下にすると、データレイク管理者はプリンシパルにデータカタログへのアクセス許可を設定し、プリンシパルが実行できるアクションを制御できるようになります。

Lake Formation アクセス許可を設定する際、対象のデータカタログリソースを指定するために、以下いずれかの方法を使用します。

  • リソースを直接指定する方法
    • ユーザーに権限を付与する際に、対象のデータベース名とテーブル名を指定する方法です。
  • LF-Tag を利用する方法
    • ユーザーは LF-Tag と呼ばれるリソースを識別するためのタグを作成します。
    • データカタログに LF-Tag を紐づけ、LF-Tag に対してプリンシパルのアクセス許可を設定します。
    • 設定された権限は、一致する LF-Tag を持つリソースに対して適用されます。
    • 複数のリソースを一括で管理できるため、リソースを直接指定する方法よりもスケールしやすいです。

プリンシパルにアクセス許可を付与すると、Lake Formation はそのプリンシパルに関連するすべてのポリシーを結合したものをアクセス許可として評価します。拒否設定はないので、基本 OR で評価されます。

データカタログリソース作成権限

デフォルトでは、非管理ユーザーはデータカタログにデータベース、もしくはテーブルを作成する権限を持っていません。そのため、必要に応じて権限を付与する必要があります。

データベース作成権限

データベースを作成するにあたっては、そのユーザーがデータベース作成者として登録されている必要があります。これは、[Administrative roles and tasks] メニューの「Database creators」にて「Create database」が許可されているかどうかで確認できます。

データベースの作成時には、オプションでロケーションを指定することができます。

これは、作成したデータベース内にテーブルを作成する際に、指定したロケーションに紐づくテーブルの作成にロケーション権限を必要としなくなるという設定です。データベース作成時にこの設定をする場合、データベースの作成者は指定するロケーションに対してロケーション権限を所有している必要があります。

データベースの作成をワークフローにしてみました。

テーブル作成権限

テーブルを作成するにあたっては、そのユーザーがテーブルを作成するデータベースに対して CREATE_TABLE 権限を所有している必要があります。加えて、テーブルに紐づける S3 の場所が Lake Formation に登録されている場合、ロケーション権限も所有している必要があります。

テーブルの作成をワークフローにしてみました。

データレイク管理者は暗黙的な権限として自分が作成したデータベース以外にも Describe 権限を持ちます。しかし、CREATE_TABLE は暗黙的に所有していないため、データレイク管理者がテーブルを作成する際にも CREATE_TABLE が必要です。(データレイク管理者が自身で作成したデータベースには、暗黙的に権限を持ちます。)

Data lake administrators
・Have Describe access to all resources in the Data Catalog except for resources shared from another account directly to a different principal. This access cannot be revoked from an administrator.

https://docs.aws.amazon.com/lake-formation/latest/dg/implicit-permissions.html

ストレージレベルのアクセス制御

Lake Formation に統合されたサービスが、Lake Formation によってアクセス制御されている S3 のデータへのアクセスを要求した際、Lake Formation は credential vending 機能を使用して S3 に対する一時的な認証情報を提供します。これにより、統合されたサービスは対象の S3 に対する直接のアクセス許可を持たずとも、S3 にアクセスできるようになります。

デフォルトでは Lake Formation でストレージレベルのアクセス制御は有効ではありません。ストレージレベルのアクセス制御を有効にするには、Lake Formation に S3 と、その S3 へアクセスするために必要な権限を持つ IAM role を指定します。

引用: https://docs.aws.amazon.com/lake-formation/latest/dg/storage-permissions.html

Lake Formation と統合されたサービスが、登録された S3 の場所へのアクセスをリクエストすると、Lake Formation は設定された IAM role の一時クレデンシャルを分析サービスに返却します。統合されたサービスは、発行された一時クレデンシャルを使用して、S3 オブジェクトへのアクセスを行います。

IAM の許可

ここまで Lake Formation 内でのアクセス制御について触れてきましたが、そもそもデータカタログリソースを使用するためには glue: の必要なアクションを IAM で許可されている必要があります。

引用: https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-overview.html

例えば、Lake Formation のチュートリアルでは、以下のようなポリシーが紹介されています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess",
                "glue:GetTable",
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:GetPartitions",
                "lakeformation:GetResourceLFTags",
                "lakeformation:ListLFTags",
                "lakeformation:GetLFTag",
                "lakeformation:SearchTablesByLFTags",
                "lakeformation:SearchDatabasesByLFTags"                
           ],
            "Resource": "*"
        }
    ]
}