AWS Clean Roomsを使ってみた

2023年2月1日掲載

キービジュアル

AWS Clean Rooms が公開されました。AWS Clean Roomsを使い、外部アカウントとデータを共有しながら分析を行う方法を紹介します。

目次

  • AWS Clean Roomsの概要を説明します
  • アカウントをまたがったデータの共有を実際に行ってみます

AWS Clean Roomsとは

AWS Clean Roomsは自社のデータセットと、外部パートナーのデータセットを簡単安全に任意のアカウント上で統合し、照会、分析作業を行えるようにするサービスです。

通常、外部パートナーとデータを連携する場合は、共有するデータから不要なデータを削除、マスキングしたうえでコピーし、データを共有する環境へ送付する等の作業が必要でした。
AWS Clean Roomsを使えばデータの受け渡しの煩雑さを避けられます。

共有を行うテーブルも列単位の粒度で選択することができます。SQLのクエリタイプも制限をかけられます。データの誤用や流出をNDA等の契約による縛りだけではなく、技術的に防止できます。

自社データを外部のビジネスパートナーのデータで補完しながらビジネスを展開する最近の流れを意識したサービスでしょう。

試験要件

簡易的にどのようなことができるか試してみます。実現したい要件を決めましょう。

  • コラボレーションメンバ
    - Aアカウント
    - Bアカウント
  • コラボレーション構成
    - Bアカウント
      BのデータセットをAへ共有
      B側では、Aのデータセットの閲覧も、クエリの実行も禁止

    - Aアカウント
      Aのデータセットと、共有されたBのデータセットとを組み合わせてクエリを実行
  • 利用データセット
    - Aアカウント
      database-a -> table-a

    - Bアカウント
      database-b -> table-b
  • データセットの制限
    - table-a
      column-a-1 -> データ表示可
      column-a-2 -> joinのみ
      column-a-3 -> 参照不可

    - table-b
      column-b-1 -> データ表示可
      column-b-2 -> joinのみ
      column-b-3 -> 参照不可

クエリを実行するアカウント(今回はA)側でも、自身のデータセットへ制限をかけられます。B側でクエリを実行するという構成にもできるため、参照可否のデータ列の指定はどのアカウントのテーブルに対しても可能です。

参照可にしている列と、joinのみ可にしている列も設けています。joinして連携するのであえばデータの参照と同義に見えますが、join操作はAWS Clean Rooms内部で秘匿化されて実行されるため、実データは公開されることはありません。join列をselectで指定することもできません。

  • データセット
    表形式にして実データも見ておきましょう

 Aのデータセット(table-a)

column-a-1
(参照可)
column-a-2
(joinのみ可)
column-a-3
(参照不可)

data-A

data-b

data-c

data-D

data-e

data-f

data-g

data-h

data-i

 

Bのデータセット(table-b)

column-b-1
(参照可)
column-b-2
(joinのみ可)
column-b-3
(参照不可)

data-A’

data-b

data-c

data-D’

data-e

data-f

data-x

data-y

data-z

 

column-*-2でjoinし、column-*-1をselectするので、data-大文字のデータが結果として取得できるはずです。

AWS Clean Roomsの操作を行う前に、事前にアカウントA、B側で上記のテーブルを作成しておきます。今回は、CSV形式でデータをS3に保存し、そこをデータソースとしてAWS Glue上でデータカタログ化しています。CSVの区切り単位が、テーブルの各列となります。S3に配置するデータでテーブル化できるフォーマットは、CSV以外にも、Parquet、JSONなどが対応しています。

各種制限はAWS Clean Rooms側で行うため考慮する必要はありません。

使い方

ポイントとなる点を中心に見ていきましょう。

1 コラボーレーションの作成(Aのみ)
コラボレーションという論理的な境界を作成します(下段キャプチャ画面内ではmy-collaboration)。コラボレーションの作成者であるコラボレーションクリエータがAアカウントとなります。

 

2−1アカウントの招待(Aのみ)
コラボレーション内で、データの共有をしてもらうアカウントBを招待します。
招待後、クエリを実行しその結果を得られるアカウントを指定します。本構成では要件に合わせクエリを実行できるアカウントはAのみとします。

 

2−2 アカウントの受領(Bのみ)
B側ではコラボレーションへの参加通知が出てくるので受理します。

この時点で、A、Bアカウント共に下記のような画面になります。

コラボレーションメンバのアビリティ欄で、要件通りに、Bはデータの提供はするが、クエリは行えないことを最終確認しておきましょう。

 

3-1 利用するテーブルの指定(A、B両方)
データセットの対象はAWS Glueでカタログ化したデータベースとテーブルのみです。
アカウントA、B側のそれぞれのAWS Clean Roomsの画面では、自身のアカウント内のGlue化したデータベースとテーブルが候補としてリスト表示されます。コラボレーションで共有するテーブルを選択します。テーブルの指定時に許可するカラムもここで指定します。

 

3-2 分析ルールタイプの設定(A、B両方)
利用するテーブルを選択後、分析タイプを決めることになります。AggregationとListがあります。今回はListを選びます。
AggregationはSUMやAVG等の集計用に使います。

以上の操作を終えると、コラボレータ内のTablesタブに、互いの共有を許したテーブル情報が見えてきます。

下記はAアカウントの画面です。Tables associated by youにA側で共有したtable-aが、Tables associated by other membersとしてB側が共有したtable-bが現れています。

 

4. クエリの実施
クエリを許可したAアカウント側からクエリを打ちます。画面のコラボレーション内の下段のクエリタブ内に、クエリ用のエリアがあります。

A側

 

B側

クエリの実施を許可していないB側にはクエリを実施するタブ自体が出てきていません。

 

共有しているテーブルの各列で何を許可しているかを確認しながら、クエリ構文を作成します。
出力先としてS3のバケットを指定し、そこへ結果を出力します。

  • 実行文
    SELECT distinct "table-a"."column-a-1", "table-b"."column-b-1"
    FROM "table-a"
    INNER JOIN "table-b"
    ON "table-a"."column-a-2" = "table-b"."column-b-2"
  • S3の結果ファイル
    column-a-1,column-b-1
    data-A data-A’
    data-D,data-D’


selectを許可していない列を指定すると、期待通りエラーになります。
Column(s) [xxx] is not allowed in select

まとめ

AWSアカウント間でデータを安全に授受して分析する環境が、ネイティブなサービスとして提供されたのは非常に便利だと思います。

保持しているデータはそのままに、AWS Clean Roomsサービス内の設定画面から、見せる・見せない列をカラム単位で指定し、目的にあわせたSQLレベルでの要件を定義できる操作性もよいですね。

関連サービス

Amazon Web Services

ソフトバンクはAWS アドバンストティアサービスパートナーとして「はじめてのAWS導入」から大規模なサービス基盤や基幹システムの構築まで、お客さまのご要望にあわせて最適なAWS環境の導入を支援します。

MSPサービス

MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。

おすすめの記事

条件に該当するページがございません