[アップデート] Amazon SageMaker Lakehouse がABAC(Attribute-Based Access Control)をサポートしたので試してみました
はじめに
クラウド事業本部コンサルティング部の石川です。Amazon SageMaker Lakehouse は、 AWS Lake Formationによる属性ベースのアクセス制御 (ABAC) のサポートしました。本記事では、この新機能の概要と特長、そして本番環境への導入を想定した設定方法について試してみます。
Amazon SageMaker LakehouseのABACとは
Amazon SageMaker LakehouseのABAC(Attribute-Based Access Control)は、AWS Identity and Access Management(IAM)等のプリンシパルやセッションの「タグ」を活用し、ユーザーの属性情報に基づいてデータアクセス権限を動的に管理できる機能です。
従来のようにIAMユーザーやIAMロールごとに直接権限を割り当てるのではなく、「部署」「チーム」「地域」などのタグによってビジネス属性に応じて一括でアクセス制御が可能になります。
なお、誤解がないように補足しますと、データレイクに対する AWS Lake Formationによる属性ベースのアクセス制御 (ABAC) は従来からサポートしていました。今回のアップデートは、新たにAmazon SageMaker Lakehouseに対するAWS Lake Formationによる属性ベースのアクセス制御 (ABAC) です。下記のGrant permission 画面の先頭に Principal type というセクションが追加になり、「Principals by attributes」を選択すると、この機能を設定に必要な項目が表示されます。
後ほど設定方法を解説する際に具体的に解説します。
Amazon SageMaker LakehouseのABACの特長
- 柔軟性
ユーザーやリソースの属性を変更するだけで、アクセス権限の調整が可能。新たなIAMロールや複雑なポリシーを追加する必要がありません。 - 効率性
これまで大量のユーザーやロールごとに個別設定していた権限管理を、属性ベースで一元化。管理負担が大幅に軽減されます。 - スケーラビリティ
組織規模が拡大しても、属性タグの追加や変更だけで柔軟に対応でき、大規模環境でも運用が容易です。 - きめ細やかな制御
データベース、テーブル、列、行単位でのきめ細かなアクセス制御が可能。例えば「US地域のsales部門だけが特定列にアクセスできる」といった細かな設定も実現できます。
Amazon SageMaker LakehouseのABACの仕組み
ABACは、IAMユーザーやロールに「タグ(属性)」を付与し、そのタグのキーと値がリソース側のアクセス条件と一致した場合に自動的に権限が付与される仕組みです。たとえば、「Department=sales」「Region=US」といったタグを持つユーザーだけが、該当するデータベースやテーブルにアクセスできるよう設定できます。
Lake Formationコンソールを利用し、タグベースで権限付与を行うことで、インアカウント/クロスアカウントの両方で柔軟なアクセス制御が可能です。新しいユーザーが同じ属性タグを持っていれば、追加のポリシー設定なしで自動的にアクセス権限が与えられます。
Amazon SageMaker LakehouseのABACを試す!
ソリューションのアーキテクチャの概要を解説します。cm-lakehouseユーザーがABACの設定します。右側の一般ユーザの cm-infra-opsユーザー、cm-biz-analystユーザー、cm-data-scientist ユーザーという3つの検証用のIAMユーザーがABACによって、アクセスの可否が変わります。
例えば、cm-biz-analystがAthenaからデーブルの一覧やクエリを実行しようとすると、Amazon SageMaker Lakehouse を経由して、Lake Formationの設定に基づき表示の可否(認可)によって、アクセス可能であれば、Athenaから結果が返されます。
サンプルデータ(S3Tables)の準備
最初にサンプルデータ(S3Tables)の作成します。サンプルデータ(S3Tables)は、cm-lakehouseというIAMユーザーを用いて作成します。このユーザーは、属性情報(Tag)は設定せず、Lake Formation の Data Lake Administrator に設定しています。
S3 Tables Bucket と Namespace の作成
サンプルデータは、S3 Tables Bucketに作成します。cm-lakehouseユーザーで、S3 Tables Bucket「cm-sample」を作成します。
cm-sample のリンクをクリックすると、テーブルの作成画面が表示されます。
上記の[Create table with Athena] ボタンを押すと、namespace(名前空間)を作成するダイアログが表示されます**。Namespace nameは、「cm_ssb_new」**とします。
上記の[Create namespace] ボタンを押すと、namespace(名前空間)の作成が成功しました。
作成したTable Bucket/Namespaceに権限を付与
cm-lakehouseユーザーがTable Bucket/Namespaceを作成してもテーブルを作成する権限がないためエラーとなります。テーブルを作成する前に、Lake Formation の Data Parmissions で、作成したTable Bucket/Namespaceに権限を付与します。
以下では、Table Bucket/Namespaceの権限を付与します。
引き続き、Table Bucket/Namespaceの全てのテーブルに対しての権限も付与します。
テーブル作成とデータ投入
権限を付与しましたので、引き続き、テーブルを作成します。
上記の[Create table with Athena]ボタンを押すと、Amazon Athena のクエリエディタの画面に遷移します。クエリを上から順に実行します。
レコードも登録されたことが確認できました。
検証用ユーザーの作成
IAMユーザーは、Lake Formation の Data Lake Administrator である cm-lakehouse ユーザーと、一般ユーザーの cm-infra-ops ユーザー、cm-biz-analyst ユーザー、cm-data-scientist ユーザーという3つの検証用のIAMユーザーを作成しました。
ユーザー(IAM User) | ペルソナ | 属性情報(Tag) | 補足 |
---|---|---|---|
cm-lakehouse | レイクハウスの管理者 | ー | 全てのデータのアクセス |
cm-infra-ops | インフラ運用担当者 | Department = Engineers Role = InfraOps |
データのアクセスは不要 |
cm-biz-analyst | ビジネスアナリスト | Department = Sales Role = BizAnalyst |
Salesデータの限定的なアクセス |
cm-data-scientist | データサイエンティスト | Department = Sales Role = DataScientist |
Salesデータの全般的なアクセス |
cm-infra-ops
AMユーザーを作成する際に、上記の表に従い、2つのタグを設定しています。
cm-biz-analyst
IAMユーザーを作成する際に、上記の表に従い、2つのタグを設定しています。
cm-data-scientist
IAMユーザーを作成する際に、上記の表に従い、2つのタグを設定しています。
検証用ユーザーの権限付与
以下の表に従い、属性情報(Tag)にResourcesへのPermissionsを付与します。
No | Resources | 属性情報(Tag) | Permissions |
---|---|---|---|
1 | Catalog | Department = Sales | Describe |
2 | Database | Department = Sales | Describe |
3 | Table(daily_sales) | Department = Sales Role = BizAnalyst |
Describe、SELECT (daily_salesの限定的なアクセス) |
4 | All Tables | Department = Sales Role = DataScientist |
Describe、SELECT (全てのテーブルへのアクセス) |
1. Catalog
Department = Salesのユーザーに対して、Catalog(s3tablescatalog/cm-sample)のDescribeを付与します。
2. Database
Department = Salesのユーザーに対して、Database(cm-ssb-new)のDescribeを付与します。
3. Table(daily_sales)
ABACによる権限の付与では、列レベルと行レベルでデータをフィルタする Data Filter を設定できます。今回は、「BizAnalyst」という Data Filterを作成しました。列レベルのフィルタは、sales_dateとsales_amountの2つの列のみを表示、行レベルのフィルタは、product_categoryが'Laptop'のデータのみを対象としたフィルタです。
Department = Sales かつ Role = BizAnalyst のユーザーに対して、テーブル(daily_sales)のDescribeとSELETを付与します。また、先ほど作成した「BizAnalyst」という Data Filterを指定しています。
4. All Tables
Department = Sales かつ Role = DataScientist ユーザーに対して、全てのテーブルのDescribeとSELETを付与します。
検証用ユーザーの動作確認
cm-infra-ops ユーザーの確認: データにアクセスできないことを確認
Lake Formation コンソールで権限を付与していないため、カタログに「s3tablescatalogs/cm-sample」やデータベースにdaily_sales」が表示されません。そのため、データにもアクセスできないことが確認できました。
cm-biz-analyst ユーザーの確認: フィルタ済みのデータにアクセスできることを確認
列は、sales_dateとsales_amountの2つの列のみを表示、行は、product_categoryが'Laptop'のデータのレコードのみが参照できることが確認できました。列のメタ情報(テーブルのカラム)は、対象列のみが表示されています。
cm-data-scientist ユーザーの確認: データにすべてアクセスできることを確認
データがフィルタされることなく、全てのカラムやレコードが表示されることが確認できました。
最後に
Amazon SageMaker LakehouseのABAC対応により、属性情報(タグ)に基づいた柔軟かつ効率的なデータアクセス管理が可能となりました。今回のアップデートは、新たにAmazon SageMaker Lakehouseに対するAWS Lake Formationによる属性ベースのアクセス制御 (ABAC) です。行や列に対するフィルタを備え、クロスアカウントも想定された 従来のLake Formationによる権限管理よりも使い勝手が良いものです。
一方、現時点ではData permissions(権限設定)画面は、タグとその値に対してどのような権限が付与されたかを確認することができず、AWSCLIコマンドaws lakeformation list-permissions
を実行して確認する必要があり、今後のアップデートを期待します。
今回のアップデートは、組織の成長や人員の増減にも簡単に対応でき、セキュリティやガバナンスの強化にもつながります。Amazon SageMaker Lakehouseが新たにABAC(属性ベースアクセス制御)をサポートしたことで、タグによる柔軟な権限管理やスケーラブルな運用が現実的になり、従来のIAMロール中心の煩雑な設定から脱却できることが確認できました。実際の検証を通じて、ユーザーの属性に応じたきめ細やかなアクセス制御が実現できることが示され、組織の規模や役割の変化にも容易に追従できる点が大きな強みであると感じます。今後は、Lake Formationと連携したABACの活用により、データガバナンスとセキュリティを両立しながら、より効率的で安全なデータ活用基盤の構築が期待できます。
合わせて読みたい