Amazon Web Services ブログ
Amazon DataZone の細かな粒度のアクセス制御によるデータセキュリティの強化
本稿は 2024 年 7 月 2 日に公開された “Enhance data security with fine-grained access controls in Amazon DataZone” を翻訳したものです。
アクセス制御を細かな粒度で行うというのは、現代のデータレイクやデータウェアハウスに求められるデータセキュリティの重要な要素となっています。組織が複数のデータソースにまたがる膨大な量のデータを扱う中で、機密情報を管理する必要性が高まっています。データプライバシー、コンプライアンス、そしてセキュリティを維持する上では、適切な人に適切なデータへのアクセス権を与えつつ、機密情報を不正アクセスから守ることが重要になります。
本日、Amazon DataZone は細かな粒度のアクセス制御機能を導入しました。Amazon DataZone のビジネスデータカタログで管理されているデータレイクやデータウェアハウス上のデータアセットに対して、細かな粒度のアクセス制御が可能になります。この新機能により、データ所有者はデータアセットの単位でアクセス権を付与するのではなく、行や列の単位でアクセスを制限できるようになります。例えば、データに個人を特定できる情報 (PII) などの機密情報が含まれる列がある場合、必要な列へのアクセスだけを許可することで、機密情報を保護しつつ、機密性の低いデータへのアクセスが可能になります。同様に、行単位でのアクセス制御も可能です。ユーザーの役割やタスクに関連する行のみが表示されるようになります。
この記事では、Amazon DataZone の新機能を使用し、行と列のアセットフィルターによって、細かな粒度のアクセス制御を実現する方法について説明します。
行フィルターと列フィルター
行フィルターを使用すると、定義した条件に基づいて特定の行へのアクセスを制限できます。例えば、テーブルにアメリカとヨーロッパのデータが含まれる場合に、ヨーロッパの従業員がその地域に関連するデータにのみアクセスできるようにするには、地域がヨーロッパ以外の行を除外する行フィルター (例: region != 'Europe'
) を作成できます。同様に、アメリカの従業員がヨーロッパのデータにアクセスできないようにすることも可能です。
列フィルターを使用すると、データアセット内の特定の列へのアクセスを制限できます。例えば、テーブルに個人を特定できる情報 (PII) などの機密情報が含まれている場合、列フィルターを作成して PII に該当する列を除外できます。これにより、データアセットをサブスクライブしたユーザーは、機密情報以外のデータにしかアクセスできなくなります。
Amazon DataZone の行フィルターや列フィルターを使用すると、AWS のデータレイクとデータウェアハウス全体のデータに対して、ビジネスユーザーにとって使いやすいメカニズムを使用しながら、誰がどのデータにアクセスできるかを制御できるようになります。Amazon DataZone で細かな粒度のアクセス制御を使用するには、Amazon DataZone のビジネスデータカタログ上のデータアセットに対して、行フィルターや列フィルターを作成します。ユーザーがデータアセットの利用を希望すると、適切な行フィルターや列フィルターを適用した上でアクセスを許可できます。Amazon DataZone は、AWS Lake Formation と Amazon Redshift を使用してこれらのフィルターを実現し、利用者が許可された行と列にのみアクセスできるようにします。
ソリューションの概要
この新機能を説明するにあたって、電子機器の e コマースプラットフォームを例として用います。このプラットフォームで、Amazon DataZone を使用して細かな粒度のアクセス制御を実装しようとしているサンプルのユースケースを検討します。この企業は複数のカテゴリの製品を取り扱っており、それぞれこの企業の各担当部門が管理しています。プラットフォーム管理チームは、各部門が自身のカテゴリに属するデータのみを参照できるようにしたいと考えています。加えて、価格関連のデータを参照できるのは財務チームのみに制限するという財務チームの要件に従う必要があります。
営業チームは、データプロデューサーとして AWS Glue の Product Sales (製品販売) テーブルを Amazon DataZone のビジネスデータカタログにパブリッシュ (公開) しました。このテーブルは Product-Sales
プロジェクトに属しており、Laptops
(ラップトップ) と Servers
(サーバー) の両方のカテゴリのデータが含まれています。ラップトップ部門とサーバー部門の両方の分析チームは、それぞれの分析プロジェクトのためにこのデータへのアクセス権が必要です。データ所有者の目標は、データコンシューマーに対して所属する部門に応じたデータアクセスを許可することです。つまり、ラップトップ部門の販売分析チームにはラップトップの販売データの行に対してのみ、そしてサーバー部門の販売分析チームにはサーバーの販売データの行に対してのみアクセスを許可することです。さらに、データ所有者は両チームが価格関連のデータにアクセスできないようにしたいと考えています。この記事では、Amazon DataZone でこのユースケースを実現するための手順を示します。
この解決策を構成する手順は次のとおりです。
- データを公開するパブリッシャーは、アクセスを制限するためのアセットフィルターを作成します:
- ラップトップの販売データの行のみにアクセスを制限する
Laptops only
行フィルターと、サーバーの販売データの行のみにアクセスを制限するServers only
行フィルターの 2 つの行フィルターを作成します。 - また、
Product Sales
から価格関連の列を除外するexclude-price-columns
という列フィルターも作成します。
- ラップトップの販売データの行のみにアクセスを制限する
- データを利用するコンシューマーは、データアセットを検出した後、サブスクリプションをリクエストします:
- ラップトップ部門の販売分析チームのアナリストが
Product Sales
データアセットのサブスクリプションをリクエストします。 - サーバー部門の販売分析チームのアナリストも
Product Sales
データアセットのサブスクリプションをリクエストします。 - 承認をもらうために、両方のサブスクリプションリクエストがパブリッシャーに送られます。
- ラップトップ部門の販売分析チームのアナリストが
- パブリッシャーは、サブスクリプションを承認し、適切なフィルターを適用します:
- パブリッシャーはラップトップ部門のアナリストからのリクエストを承認し、
Laptops only
行フィルターとexclude-price-columns
列フィルターを適用します。 - パブリッシャーはサーバー部門のコンシューマーからのリクエストを承認し、
Servers only
行フィルターとexclude-price-columns
列フィルターを適用します。
- パブリッシャーはラップトップ部門のアナリストからのリクエストを承認し、
- コンシューマーは、Amazon Athena を使用して承認されたデータにアクセスします:
- サブスクリプションが承認された後、Amazon Athena でデータを参照し、ラップトップ部門のアナリストが
Laptop
の製品販売データのみにアクセスできます。 - 同様に、サーバー部門のアナリストは
Server
の製品販売データのみにアクセスできます。 - 両方のコンシューマーは、適用された列フィルターに従って、価格関連の列を除くすべての列を参照できます。
- サブスクリプションが承認された後、Amazon Athena でデータを参照し、ラップトップ部門のアナリストが
次の図は、ソリューションのアーキテクチャとプロセスフローを示しています。
前提条件
この記事に沿って進めるには、Product Sales
データアセットのパブリッシャーが、 Amazon DataZone でこのデータセットを公開している必要があります。
パブリッシャーによるアクセス制限用のアセットフィルターの作成
このセクションでは、パブリッシャーがアセットフィルターを作成するための手順を詳しく説明します。
行フィルターの作成
このデータセットには Laptops
と Servers
の製品カテゴリのデータが含まれています。したがって、製品カテゴリに応じてデータセットへのアクセスを制限することが必要です。この目的を達成するために、Amazon DataZone の行フィルター機能を使用します。
Amazon DataZone では、サブスクリプションを承認する際に適用できる行フィルターを作成できます。これにより、サブスクライバーがアクセスできるデータの行が、行フィルターで定義された範囲に制限されます。行フィルターを作成するには以下の手順を実行します。
- Amazon DataZone コンソールで、product-sales プロジェクト (アセットが所属するプロジェクト) に移動します。
- プロジェクトの Data タブに移動します。
- ナビゲーションペインで Inventory data を選択し、次に行フィルターを作成する
Product Sales
アセットを選択します。
AWS Glue テーブルまたは Amazon Redshift テーブルのタイプのアセットに対して行フィルターを追加できます。
- アセットの詳細ページで、Asset filters タブを選択し、Add asset filter を選んでください。
Laptops
カテゴリと Servers
カテゴリの 2 つのカテゴリに対して、それぞれの行フィルターを作成します。
- ラップトップのみのアセット行フィルターを作成するには、次の手順を完了してください。
- このフィルターの名前を入力します (
Laptops only
)。 - このフィルターの説明を入力します (
Laptops only
)。 - フィルターの種類として Row filter を選択します。
- 行フィルター式として、1 つ以上の式を入力します。
- column ドロップダウンメニューから
Product Category
を選択します。 - operator ドロップダウンメニューから演算子
=
を選択します。 - Value フィールドに
Laptops
と入力します。
- column ドロップダウンメニューから
- この例では 1 つの条件だけでフィルターを作成していますが、フィルター式に別の条件を追加する必要がある場合は、Add condition を選択します。
- 行フィルター式に複数の条件がある場合は、And または Or を選んで、それらの条件を組み合わせます。
- サブスクライバーに対する値の可視性も設定できます。この記事では、デフォルト値 (No, show values to subscriber) のままにします。
- Create asset filter を選択します。
- このフィルターの名前を入力します (
- 同様の手順で
Servers only
という名前の行フィルターを作成します。Value フィールドにはServers
と入力します。
列フィルターの作成
次に、価格関連データを含む列へのアクセスを制限するための列フィルターを作成します。以下の手順を実行してください。
- 同じアセットに対して column filter タイプの別のアセットフィルターを追加します。
- Asset filters タブで、Add asset filter を選択します。
- Name には、フィルターの名前 (
exclude-price-columns
) を入力します。 - Description には、フィルターの説明 (
Exclude Price Columns
) を入力します。
- フィルターのタイプとして Column を選択し、列フィルターを作成します。これにより、このデータアセットのすべての利用可能なものから適用する列を選択できます。
- 価格関連の列を除くすべての列を選択します。
- Create asset filter を選択します。
コンシューマーによるデータ検出とサブスクリプションリクエスト
このセクションでは、ラップトップ部門のアナリストの役割に切り替え、プロジェクト Sales Analytics - Laptop
内で作業します。データコンシューマーとして、データカタログを検索し、Product Sales data
アセットをサブスクライブしてデータを利用します。
- プロジェクトにユーザーとしてログインし、
Product Sales
データアセットを検索します。
Product Sales
データアセットの詳細ページで、Subscribe を選択します。
- Project では、Sales Analytics – Laptops を選択します。
- Reason for request には、サブスクリプションを要求する理由を入力します。
- Subscribe を選択して、サブスクリプションリクエストを送信します。
パブリッシャーがサブスクリプションフィルターを承認する
サブスクリプションリクエストが送信されると、パブリッシャーはそのリクエストを受け取り、次の手順に従って承認できます。
- パブリッシャーとしてプロジェクト
Product-Sales
を開きます。 - Data タブで、左側のナビゲーションペインから Incoming requests を選択します。
- リクエストを探し、View request を選択します。Pending でフィルタリングすると、まだ対応されていないリクエストのみを表示できます。
リクエストの詳細が表示され、誰が、どのプロジェクトのために、どういう理由でリクエストしたかなどの情報の詳細を確認できます。
- リクエストを承認する際には 2 つのオプションがあります。
- Full access – このオプションでサブスクリプションを承認すると、サブスクライバーはデータアセット全体にアクセスできるようになります。
- Approve with row and column filters – 特定の行と列のみにアクセスを制限するには、このオプションを選択した上で、行と列のフィルターを適用して承認します。この記事では、前に作成した両方のフィルターを使用します。
- Choose filter を選び、ドロップダウンメニューから
Laptops only
とexclude-price-columns
を選択します。 - Approve を選んでリクエストを承認します。
アクセスが許可され有効になると、サブスクリプションは次のスクリーンショットのように表示されます。
- 次に、サーバー部門のコンシューマーとしてログインします。
- 同じ手順を繰り返しますが、今回はサブスクリプションを承認する際に、Choose filter では
Servers only
とexclude-price-columns
を選択します。その他のステップは同じです。
コンシューマーが Amazon Athena を使用して認可されたデータにアクセスする
ここまでの手順で、Amazon DataZone のデータカタログにアセットをパブリッシュし、サブスクライブできました。これを分析するために、ラップトップ担当のコンシューマーとしてログインします。
- Amazon DataZone データポータルで、コンシューマープロジェクト
Sales Analytics - Laptops
を選択します。 - Schema タブで、登録済みのアセットを確認できます。
- プロジェクト
Sales Analytics - Laptops
を選択し、Overview を選択します。 - 右側のペインで Amazon Athena を開きます。
サブスクライブしたテーブルに対してクエリを実行できるようになりました。
- Tables and views の下にあるテーブルを選択し、Preview を選んでクエリエディターで SELECT ステートメントを確認します。
- このクエリを実行すると、
Sales Analytics - Laptops
のコンシューマーが参照するデータには、プロダクトカテゴリがLaptops
のデータしか含まれていないことが分かります。
Tables and views の中でテーブル product_sales
を展開できます。この中に価格関連の列は表示されていません。
- 次に、サーバー部門のアナリストの視点で見てみましょう。同様の方法でデータセットを分析できます。
product_category
では、Servers
のみが確認できます。
まとめ
Amazon DataZone では、データアセットに対して細かな粒度のアクセス制御を簡単に設定できます。この機能を使えば、データコンシューマーにデータが提供される前に、行単位と列単位のフィルターを定義し、データプライバシーを強制できます。Amazon DataZone の細かな粒度のアクセス制御機能は、Amazon DataZone をサポートするすべての AWS リージョンで一般提供されています。
この機能を自身のユースケースで試した方は、コメント欄でフィードバックをお知らせください。
著者について
Deepmala Agarwal は、AWS のデータ スペシャリスト ソリューションアーキテクトとして働いています。彼女は、お客様が AWS 上でスケーラブルかつ分散型のデータ駆動型ソリューションを構築するのを手助けすることに情熱を注いでいます。 仕事以外では、家族と過ごしたり、散歩をしたり、音楽を聴いたり、映画を観たり、料理をしたりすることが好きです!
Leonardo Gomez は、AWS のプリンシパル アナリティクス スペシャリスト ソリューションアーキテクトです。 10 年以上にわたるデータマネジメントの経験があり、世界中の顧客のビジネスおよび技術的ニーズに対応してきました。LinkedIn で彼とつながることができます。
Utkarsh Mittal は、Amazon DataZone のシニア テクニカル プロダクトマネージャーを務めています。 顧客のアナリティクスジャーニー全体を簡素化するイノベーティブなプロダクトを作ることに情熱を注いでいます。 仕事を離れれば Utkarsh は音楽を演奏するのが趣味で、最近はドラムを始めたところです。
翻訳はパートナーソリューションアーキテクトの丸山 大輔が担当しました。原文はこちらです。