View a markdown version of this page

特徴量グループで Lake Formation を有効にする - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

特徴量グループで Lake Formation を有効にする

Amazon SageMaker Feature Store の機能グループで AWS Lake Formation を有効にすると、オフラインストアの機能データに対して列レベル、行レベル、およびセルレベルのセキュリティを適用できます。Amazon S3 および AWS Glue リソースの個々の IAM ポリシーを通じてアクセスを管理する代わりに、Lake Formation の許可と取り消しのアクセス許可モデルを使用して、特定の機能とレコードにアクセスできるユーザーとロールを制御します。Lake Formation の詳細については、AWS 「Lake Formation デベロッパーガイド」を参照してください。

重要

Lake Formation のアクセスコントロールはオフラインストアにのみ適用されます。オフラインストアは Amazon S3 によってバックアップされ AWS Glue Data Catalog、Lake Formation が管理する に登録されます。オンラインストアへのアクセスは、引き続き IAM ポリシーを通じて制御されます。Lake Formation を設定するには、SageMaker AI Python SDK () の FeatureGroupManagerおよび LakeFormationConfig クラスを使用しますsagemaker.mlops.feature_store。Lake Formation はハイブリッドアクセスモードをサポートしています。これにより、IAM ポリシーと Lake Formation の両方のアクセス許可が、段階的な移行中に共存できるようになります。

前提条件

Lake Formation を有効にする前に、以下があることを確認します。

  • オフラインストアが設定された SageMaker AI 特徴量グループ、またはセットアップの一環としてオフラインストアで新しい特徴量グループを作成できます。Lake Formation では、オフラインストアが作成する AWS Glue Data Catalog テーブルを介したアクセスを管理するため、オフラインストアが必要です。

  • 適切なアクセス許可を持つ IAM 実行ロール。次の例は、最低限必要な IAM ポリシーを示しています。プレースホルダの値を、独自の値に置き換えてください。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "SageMakerFeatureGroupOperations", "Effect": "Allow", "Action": [ "sagemaker:CreateFeatureGroup", "sagemaker:DescribeFeatureGroup" ], "Resource": "arn:aws:sagemaker:*:*:feature-group/*" }, { "Sid": "LakeFormation", "Effect": "Allow", "Action": [ "lakeformation:RegisterResource", "lakeformation:GrantPermissions", "lakeformation:RevokePermissions", "lakeformation:ListPermissions" ], "Resource": "*" }, { "Sid": "GlueCatalogReadAccess", "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetDatabase" ], "Resource": [ "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/sagemaker_featurestore", "arn:aws:glue:*:*:table/sagemaker_featurestore/*" ] }, { "Sid": "GlueCatalogTableCreate", "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Resource": [ "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/sagemaker_featurestore", "arn:aws:glue:*:*:table/sagemaker_featurestore/*" ] }, { "Sid": "PassOfflineStoreRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::<account-id>:role/<offline-store-role-name>" }, { "Sid": "S3FeatureStoreStorage", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": "arn:aws:s3:::<offline-store-bucket-name>" }, { "Sid": "LakeFormationRegistrationRole", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:GetRolePolicy" ], "Resource": "arn:aws:iam::<account-id>:role/<registration-role-name>" } ] }
    注記

    このLakeFormationRegistrationRoleステートメントは、Amazon S3 ロケーションを Lake Formation に登録するために使用されるロールを読み取るアクセス許可を付与します。Lake Formation サービスにリンクされたロール (use_service_linked_role=True) を使用する場合は、リソースを に設定しますarn:aws:iam::<account-id>:role/aws-service-role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess。独自の登録ロールを指定する場合は、そのロールの ARN に設定します。

    注記

    sagemaker_featurestore データベースでハイブリッドアクセスモードが無効になっている場合、呼び出し元にはデータベースに対する Lake Formation アクセスCREATE_TABLE許可も必要です。Lake Formation 管理者は、Lake Formation コンソールまたは API を使用してこのアクセス許可を付与できます。

  • アカウントで設定された Lake Formation 管理者。Lake Formation 管理者として少なくとも 1 つの IAM ユーザーまたはロールを指定する必要があります。セットアップ手順については、Lake Formation ドキュメントの「Lake Formation の開始方法」を参照してください。

  • SageMaker AI Python SDK バージョン 3.8.0 以降。sagemaker パッケージをインストールまたはアップグレードします。 pip install --upgrade sagemaker>=3.8.0

  • クロスアカウント設定 (該当する場合)。特徴量グループのオフラインストア Amazon S3 バケットが異なる にある場合は AWS アカウント、 AWS Glue リソースポリシー、 AWS RAM 共有の承諾、リソースリンク、コンシューマーデータベースの設定など、追加の Lake Formation クロスアカウント共有設定が必要です。詳細については、Lake Formation ドキュメントの「アカウント間でのデータの共有」を参照してください。

主要なコンセプト

以下の概念は、Lake Formation が Feature Store とどのように連携するかを理解するために重要です。

Lake Formation アクセス許可モデルと IAM 専用モデルの比較

デフォルトでは、Feature Store によって作成されたテーブルを含む AWS Glue Data Catalog テーブルへのアクセスは、IAM ポリシーのみで制御されます。Lake Formation を有効にすると、アクセスには IAM アクセス許可と Lake Formation アクセス許可の両方が必要です。Lake Formation は、特定のデータベース、テーブルDESCRIBE、列に対する SELECTや などのアクセス許可を IAM プリンシパルに明示的に付与する付与および取り消しモデルを使用します。

ハイブリッドアクセスモード

Lake Formation を有効にするときは、ハイブリッドアクセスモードを使用するか、Lake Formation 専用モードを使用するかを選択します。

  • ハイブリッドアクセスモード (hybrid_access_mode_enabled=True): IAM ポリシーと Lake Formation アクセス許可の両方が評価されます。既存の IAM ポリシーを通じてアクセスできるプリンシパルには引き続きアクセス権があり、さらに Lake Formation を通じてきめ細かなアクセス権を付与できます。これは、段階的な移行に役立ちます。

  • Lake Formation 専用モード (hybrid_access_mode_enabled=False): Lake Formation のアクセス許可のみが評価されます。 AWS Glue テーブルへの既存の IAM ベースのアクセスは取り消されます。これにより、最も強力なアクセスコントロールが提供されますが、既存のワークロードが破損する可能性があります。

警告

を設定するとhybrid_access_mode_enabled=False、SDK は AWS Glue テーブルのIAMAllowedPrincipal許可を取り消します。IAM アクセス許可だけでこのテーブルにアクセスする既存のジョブ、ノートブック、またはパイプラインは、すぐにアクセスを失います。ハイブリッドアクセスモードを無効にする前に、アクセスが必要なすべてのプリンシパルに必要な Lake Formation アクセス許可が付与されていることを確認します。

注記

テーブル形式が Iceberg の場合、クロスアカウントアクセスのハイブリッドアクセスモードを無効にする必要があります。

S3 拒否ポリシー

AWS Glue Data Catalog テーブルで Lake Formation を有効にした後でも、直接 Amazon S3 アクセス (IAM ポリシー経由) を持つユーザーは、基盤となる Amazon S3 オブジェクトを直接読み取ることで Lake Formation をバイパスできます。このギャップを埋めるには、Lake Formation サービスロールと Feature Store 実行ロールを除くすべてのプリンシパルのオフラインストアプレフィックスへの直接アクセスを拒否する Amazon S3 バケットポリシーを適用します。

重要

SDK は Amazon S3 拒否ポリシーを自動的に適用しません。Lake Formation を有効にすると、SDK は推奨バケットポリシーを警告メッセージとしてログに記録します。このポリシーを確認し、Amazon S3 バケットに適用して、アクセスコントロールをend-to-endで適用します。

設定リファレンス

LakeFormationConfig クラスを使用して Lake Formation を設定します。この設定は、新しい特徴量グループを作成するFeatureGroupManager.create()ときに に渡すか、既存の特徴量グループenable_lake_formation()に対して個々のパラメータを で直接使用します。

パラメータ タイプ デフォルト 必須 説明
enabled ブール いいえ に設定Trueして、特徴量グループのオフラインストアで Lake Formation をアクティブ化します。
use_service_linked_role ブール いいえ Lake Formation サービスにリンクされたロールを使用して S3 の場所を登録するかどうか。カスタム登録ロールFalseを使用する場合は、 に設定します。クロスアカウントアクセスやサードパーティーのクエリエンジン (Apache Spark など) を使用する場合、サービスにリンクされたロールを使用することはできません。サードパーティーエンジンの場合は、 を通じて独自の登録ロールを指定する必要がありますregistration_role_arn
registration_role_arn str なし 条件付き Lake Formation にオフラインストア S3 の場所を登録するためのカスタム IAM ロールの ARN。use_service_linked_role が の場合は必須ですFalse
hybrid_access_mode_enabled ブール はい AWS Glue テーブルIAMAllowedPrincipalから を取り消すかどうか。 False= Lake Formation のみのアクセス許可。 True = ハイブリッドモード (IAM と Lake Formation の両方)。明示的に選択する必要があります。
acknowledge_risk ブール はい 続行するTrueには である必要があります。これは安全性の確認です。を に設定するFalseと、オペレーションが実行されRuntimeErrorる前に が発生します。

acknowledge_risk について

acknowledge_risk パラメータは安全ゲートです。に設定することでTrue、以下を承認します。

  • の場合hybrid_access_mode_enabled=False: この AWS Glue テーブルをクエリする既存の IAM ベースのジョブ、ノートブック、パイプラインにはすぐにアクセスできなくなります。有効にする前または直後に、これらのプリンシパルに Lake Formation アクセス許可を付与する必要があります。

  • Lake Formation のアクセス許可が正しく設定されていない場合: アクセス許可が修正されるまで、特徴量グループ内のデータにすべてのユーザーがアクセスできなくなる可能性があります。

  • オペレーションは AWS Glue データカタログのアクセス許可を変更します。これらの変更は、Feature Store ユーザーだけでなく、 AWS Glue テーブルのすべてのコンシューマーに影響します。このテーブルから読み取る Athena クエリ、Spark ジョブ、またはその他のサービスが影響を受けます。

仕組み

Lake Formation を有効にすると、SDK は 3 フェーズのセットアップを実行します。

  1. S3 の場所を登録します。SDK は、Lake Formation サービスにリンクされたロールまたは指定したカスタム登録ロールを使用して、オフラインストアの S3 パスを Lake Formation に登録します。サードパーティーのクエリエンジン (Apache Spark など) を使用する場合は、サービスにリンクされたロールがサードパーティーのエンジンアクセスをサポートしていないため、独自の登録ロールを指定する必要があります。

  2. Lake Formation のアクセス許可を付与します。SDK はSELECT、 AWS Glue Data Catalog テーブルに対する INSERTDESCRIBE、、、および DELETEアクセスALTER許可を特徴量グループの実行ロールに付与します。

  3. 必要に応じて、IAMAllowedPrincipal を取り消します。を設定するとhybrid_access_mode_enabled=False、SDK は AWS Glue テーブルのIAMAllowedPrincipal許可を取り消します。

すべてのフェーズが完了すると、SDK は推奨される S3 バケット拒否ポリシーを記録します。このポリシーを確認して適用し、Lake Formation のアクセスコントロールをバイパスする Amazon S3 への直接アクセスを防止します。

注記

セットアップが途中で失敗した場合 (たとえば、S3 の場所を登録した後、アクセス許可を付与する前に)、 enable_lake_formation()メソッドを安全に再実行できます。SDK はべき等であり、正常に完了したステップをスキップします。

使用例

Lake Formation アクセスコントロールを使用して新しい特徴量グループを作成する

次の例では、オフラインストアを使用して新しい特徴量グループを作成し、Lake Formation のアクセスコントロールを 1 回のオペレーションで有効にします。

from sagemaker.core.helper.session_helper import Session from sagemaker.core.shapes import ( FeatureDefinition, OfflineStoreConfig, OnlineStoreConfig, S3StorageConfig, ) from sagemaker.mlops.feature_store import FeatureGroupManager, LakeFormationConfig session = Session() region = session.boto_region_name role_arn = "arn:aws:iam::<account-id>:role/<execution-role-name>" registration_role_arn = "arn:aws:iam::<account-id>:role/<registration-role-name>" fg_name = "my-feature-group" bucket = session.default_bucket() offline_s3_uri = f"s3://{bucket}/feature-store/{fg_name}" feature_definitions = [ FeatureDefinition(feature_name="customer_id", feature_type="String"), FeatureDefinition(feature_name="event_time", feature_type="String"), FeatureDefinition(feature_name="age", feature_type="Integral"), FeatureDefinition(feature_name="total_purchases", feature_type="Integral"), FeatureDefinition(feature_name="avg_order_value", feature_type="Fractional"), ] fg = FeatureGroupManager.create( feature_group_name=fg_name, record_identifier_feature_name="customer_id", event_time_feature_name="event_time", feature_definitions=feature_definitions, online_store_config=OnlineStoreConfig(enable_online_store=False), offline_store_config=OfflineStoreConfig( s3_storage_config=S3StorageConfig(s3_uri=offline_s3_uri), table_format="Iceberg", ), role_arn=role_arn, description="A feature group with Lake Formation-managed offline store", # Example configuration — adjust parameters for your use case. lake_formation_config=LakeFormationConfig( enabled=True, use_service_linked_role=False, registration_role_arn=registration_role_arn, # Set to True to keep existing IAM-based access (hybrid mode). hybrid_access_mode_enabled=False, acknowledge_risk=True, ), region=region, )

既存の特徴量グループで Lake Formation を有効にする

次の例では、既に存在する特徴量グループで Lake Formation を有効にします。

from sagemaker.mlops.feature_store import FeatureGroupManager fg = FeatureGroupManager.get(feature_group_name="my-existing-feature-group") result = fg.enable_lake_formation( use_service_linked_role=False, registration_role_arn="arn:aws:iam::<account-id>:role/<registration-role-name>", hybrid_access_mode_enabled=False, acknowledge_risk=True, )

SageMaker AI ジョブで Lake Formation 対応特徴量グループを使用する

Lake Formation 対応の特徴量グループには、SageMaker AI トレーニングジョブと処理ジョブからアクセスできます。Lake Formation が有効な機能データを読み取るには、Athena を介してデータをクエリするか、Lake Formation GetTemporaryGlueTableCredentials API を使用して AWS Glue 、テーブルにスコープされた一時的な Amazon S3 認証情報を提供します。コンピューティングロールの Lake Formation アクセス許可の設定の詳細については、Lake Formation ドキュメントの「Lake Formation アクセス許可リファレンス」を参照してください。

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

Lake Formation は、 間での機能グループデータの共有をサポートしています AWS アカウント。プロデューサーアカウントが特徴量グループで Lake Formation を有効にすると、名前付きリソースメソッドまたは Lake Formation タグベースのアクセスコントロール (LF-TBAC) を使用して、コンシューマーアカウントへのクロスアカウントアクセスを許可できます。

クロスアカウント共有には、次の設定が必要です。

  1. プロデューサーアカウントは、 AWS Glue データカタログテーブルに対するクロスアカウントアクセス許可をコンシューマーアカウント、 AWS 組織、または組織単位に付与します。

  2. アカウントが同じ AWS Organization にない場合、コンシューマーアカウントは RAM AWS リソース共有の招待を受け入れます。詳細については、「リソース共有の招待を受け入れる」を参照してください。

  3. コンシューマーアカウントは、ローカルデータベースの共有テーブルへのリソースリンクを作成します。Athena や Amazon Redshift Spectrum などのサービスが共有リソースをクエリするには、リソースリンクが必要です。詳細については、「リソースリンクについて」を参照してください。

  4. コンシューマーアカウントの Lake Formation 管理者は、リソースリンクと基盤となる共有テーブルに対するアクセス許可を、アクセスを必要とする IAM プリンシパルに付与します。

重要

サードパーティーのクエリエンジン (Apache Spark など) を使用する場合は、共有テーブルのフルテーブルアクセスを有効にする必要があります。サードパーティーエンジンは、セッションタグによる Lake Formation の列レベルまたはセルレベルのフィルタリングをサポートしていないため、完全なテーブル認証情報供給が必要です。また、Amazon S3 ロケーションを、サービスにリンクされたロールではなくカスタム登録ロールに登録する必要があります。詳細については、「サードパーティーエンジンのフルテーブルアクセス」を参照してください。

クロスアカウント共有の前提条件、step-by-step、ベストプラクティスについては、 AWS Lake Formation デベロッパーガイドの以下のトピックを参照してください。

セットアップ後にきめ細かなアクセスを許可する

Lake Formation を有効にすると、Lake Formation 管理者は Lake Formation コンソール、API、または CLI を使用して、他の IAM プリンシパルにきめ細かなアクセス許可を付与できます。Lake Formation は、列レベル、行レベル、およびセルレベルのアクセスコントロールをサポートしています。

Lake Formation のアクセス許可の付与と管理の手順については、 AWS Lake Formation デベロッパーガイドの以下のトピックを参照してください。