

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

# AWS Clean Rooms 差分プライバシー
<a name="differential-privacy"></a>

AWS Clean Rooms 差分プライバシーは、数回のクリックで直感的なコントロールで実装された数学に基づく手法により、ユーザーのプライバシーを保護するのに役立ちます。フルマネージド機能として、ユーザーの再識別を防ぐために、事前の差分プライバシーエクスペリエンスは必要ありません。 は、個々のレベルのデータを保護するために、実行時に結果をクエリするために慎重に調整された量のノイズ AWS Clean Rooms を自動的に追加します。

AWS Clean Rooms 差分プライバシーは、幅広い分析クエリをサポートし、クエリ結果のわずかなエラーによって分析の有用性が損なわれないさまざまなユースケースに適しています。これにより、パートナーは広告キャンペーン、投資決定、臨床研究などについて、ビジネスに不可欠なインサイトを生成できます。しかも、パートナーによる追加設定は必要ありません。

AWS Clean Rooms 差分プライバシーは、スカラー関数や数学演算子記号を悪意のある方法で使用するオーバーフローや無効なキャストエラーから保護します。

 AWS Clean Rooms 差分プライバシーの詳細については、以下のトピックを参照してください。

**Topics**
+ [差分プライバシー](#dp-overview)
+ [での差分プライバシーの AWS Clean Rooms 仕組み](#dp-how-it-works)
+ [差分プライバシーポリシー](dp-settings.md)
+ [AWS Clean Rooms 差分プライバシーの SQL 機能](dp-sql-capabilities.md)
+ [差分プライバシークエリのヒントと例](dp-query-tips-examples.md)
+ [AWS Clean Rooms 差分プライバシーの制限](dp-limitations.md)

## 差分プライバシー
<a name="dp-overview"></a>

差分プライバシーでは、集約されたインサイトのみが許可され、それらのインサイトにおける個人のデータの関与をわかりにくくします。差分プライバシーは、特定の個人について学習した結果を受け取ることができるメンバーからコラボレーションデータを保護します。差分プライバシーがなければ、結果を受け取ることができるメンバーは、個人に関するレコードを追加または削除したり、クエリ結果の違いを確認したりして、個々のユーザーデータを推測しようとする可能性があります。

差分プライバシーをオンにすると、特定の量のノイズがクエリ結果に追加され、個々のユーザーの関与がわかりにくくなります。データセットから個人に関するレコードを削除した後に、結果を受け取ることができるメンバーがクエリ結果の違いを観察しようとすると、クエリ結果の変動性は、個人のデータの識別を防ぐのに役立ちます。 AWS Clean Rooms 差分プライバシーは、 によって開発された実証済みの正しいサンプラー実装である [SampCert](https://github.com/leanprover/SampCert) サンプラーを使用します AWS。

## での差分プライバシーの AWS Clean Rooms 仕組み
<a name="dp-how-it-works"></a>

で差分プライバシーを有効にするワークフローでは、[ワークフローを完了する AWS Clean Rooms](what-is.md#how-it-works)ときに以下の追加ステップ AWS Clean Rooms が必要です。

1. [カスタム分析ルールを追加する](analysis-rules-custom.md)ときに、差分プライバシーを有効にします。

1. [コラボレーションの差分プライバシーポリシーを設定して](configure-differential-privacy.md)、差分プライバシーで保護されているデータテーブルをクエリに使用できるようにします。

これらのステップを完了すると、クエリを実行できるメンバーは、差分プライバシー保護データに対するクエリの実行を開始できます。差分プライバシーポリシーに準拠した結果を AWS Clean Rooms 返します。 AWS Clean Rooms 差分プライバシーは、車の現在の燃料レベルを示す車のガスゲージと同様に、実行できる残りのクエリの推定数を追跡します。クエリを実行できるメンバーが実行できるクエリの数は、[差分プライバシーポリシー](dp-settings.md) で設定されている **[プライバシー予算]** と **[クエリごとに追加されるノイズ]** パラメータによって制限されます。

### 考慮事項
<a name="dp-considerations"></a>

差分プライバシーを使用する場合は AWS Clean Rooms、次の点を考慮してください。
+ 結果を受け取ることができるメンバーは、差分プライバシーを使用できません。これらのメンバーは、設定したテーブルの差分プライバシーをオフにしたカスタム分析ルールを設定します。
+ クエリを実行できるメンバーは、2 つ以上のデータプロバイダーの差分プライバシーがオンになっている場合、テーブルを結合できません。

# 差分プライバシーポリシー
<a name="dp-settings"></a>

差分プライバシーポリシーは、クエリを実行できるメンバーがコラボレーション内で実行できる集計関数の数を制御します。**プライバシー予算**は、コラボレーションのすべてのテーブルに適用される共通の有限リソースを定義します。**クエリごとに追加されるノイズ**によって、プライバシー予算が枯渇する速度が決まります。

差分プライバシーで保護されたテーブルをクエリに使用できるようにするには、差分プライバシーポリシーが必要です。これはコラボレーションの 1 回限りのステップで、次の 2 つの入力が含まれます。
+ **プライバシー予算** – プライバシー予算はイプシロン単位で定量化され、プライバシー保護のレベルを制御します。これは、コラボレーションにおいて差分プライバシーで保護されるすべてのテーブルに適用される共通かつ有限のリソースです。その目的は、情報が複数のテーブルに存在する可能性があるユーザーのプライバシーを保護することです。

  **プライバシー予算**は、テーブルに対してクエリが実行されるたびに消費されます。プライバシー予算が使い果たされると、クエリを実行できるコラボレーションメンバーは、プライバシー予算が増えるか更新されるまで追加のクエリを実行できなくなります。プライバシー予算を大きく設定することで、結果を受け取ることができるメンバーは、データ内の個人に関する不確実性を減らすことができます。ビジネス上の意思決定者と相談した上で、コラボレーション要件とプライバシーニーズのバランスを考慮して、プライバシー予算を選択してください。

  コラボレーションに定期的に新しいデータを取り込む予定がある場合は、**[プライバシー予算を毎月更新]** を選択すると、1 か月ごとに新しいプライバシー予算が自動的に作成されます。このオプションを選択すると、更新を繰り返してクエリを繰り返し実行したときに、データ行に関する任意の量の情報を公開できます。プライバシー予算が更新されるたびに同じ行が繰り返しクエリされる場合は、このオプションを選択しないでください。
+ **クエリごとに追加されるノイズ**は、関与をわかりにくくするユーザーの数で測定されます。この値によって、プライバシー予算がどの程度枯渇するかが決まります。ノイズ値を大きくすると、プライバシー予算が枯渇する速度が下がるため、データに対して実行できるクエリの数が増えます。ただし、これは正確性の低いデータインサイトの公開とのバランスを取る必要があります。この値を設定するときは、コラボレーションに関するインサイトに必要な精度を考慮してください。

デフォルトの差分プライバシーポリシーを使用すると、ユースケースに応じて設定をすばやく完了したり、差分プライバシーポリシーをカスタマイズしたりできます。 AWS Clean Rooms 差分プライバシーは、ポリシーを設定する直感的なコントロールを提供します。 AWS Clean Rooms 差分プライバシーを使用すると、データに対するすべてのクエリで可能な集約数の観点からユーティリティをプレビューし、データコラボレーションで実行できるクエリの数を推定できます。

インタラクティブな例を見れば、**[プライバシー予算]** と **[クエリごとに追加されるノイズ]** の値が異なると、さまざまな種類の SQL クエリの結果にどのような影響があるかを理解できます。一般的には、プライバシーに関するニーズと、許可するクエリの数やそれらのクエリの精度とのバランスを取る必要があります。**[プライバシー予算]** を小さくしたり、**[クエリごとに追加されるノイズ]** を大きくしたりすると、ユーザーのプライバシー保護は強化されますが、コラボレーションパートナーにとって意味のあるインサイトは得られません。

**[クエリごとに追加されるノイズ]** のパラメータをそのままにして、**[プライバシー予算]** を増やすと、クエリを実行できるメンバーは、コラボレーション内のテーブルに対してより多くの集計を実行できます。コラボレーション中はいつでも **[プライバシー予算]** を増やすことができます。**[クエリごとに追加されるノイズ]** パラメータをそのままにして、**[プライバシー予算]** を減らすと、クエリを実行できるメンバーが実行できる集計の数が減ります。クエリを実行できるメンバーがデータの分析を開始した後は、**[プライバシー予算]** を減らすことはできません。

**[プライバシー予算]** の入力をそのままにして、**[クエリごとに追加されるノイズ]** を増やすと、クエリを実行できるメンバーは、コラボレーション内のテーブルに対してより多くの集計を実行できます。**[プライバシー予算]** の入力をそのままにして、**[クエリごとに追加されるノイズ]** を減らすと、クエリを実行できるメンバーが実行できる集計の数が減ります。**[クエリごとに追加されるノイズ]** は、コラボレーション中いつでも増減できます。

差分プライバシーポリシーは、プライバシー予算テンプレート API アクションによって管理されます。

# AWS Clean Rooms 差分プライバシーの SQL 機能
<a name="dp-sql-capabilities"></a>

AWS Clean Rooms 差分プライバシーは、汎用クエリ構造を使用して複雑な SQL クエリをサポートします。カスタム分析テンプレートは、差分プライバシーで保護されたテーブルで実行できるよう、この構造に対して検証されます。次の表は、どの関数がサポートされているかを示しています。詳細については「[クエリの構造と構文](analysis-rules-custom.md#dp-query-structure-syntax)」を参照してください。


| Category | Spark 分析エンジンでサポートされている SQL コンストラクト | テーブル共通式 (CTE) | 最終 SELECT 句 | 
| --- |--- |--- |--- |
| Aggregate functions |    ANY\$1VALUE 関数   APPROXIMATE PERCENTILE\$1DISC 関数   AVG 関数   COUNT および COUNT DISTINCT 関数   MAX 関数   MEDIAN 関数   MIN 関数   PERCENTILE\$1CONT 関数   STDDEV\$1SAMP および STDDEV\$1POP 関数   SUM および SUM DISTINCT 関数   VAR\$1SAMP および VAR\$1POP 関数    | Supported with the condition that CTEs using differential privacy protected tables must result in data with user-level records. You should write the SELECT expression in those CTEs using `SELECT userIdentifierColumn...' format. | Supported aggregations: AVG, COUNT, COUNT DISTINCT, STDDEV, and SUM. | 
| CTEs | WITH clause, WITH clause subquery | Supported with the condition that CTEs using differential privacy protected tables must result in data with user-level records. You should write the SELECT expression in those CTEs using `SELECT userIdentifierColumn...' format. | N/A | 
| Subqueries |    SELECT   HAVING   JOIN   JOIN 条件   FROM   WHERE    | You can have any subquery that doesn't reference differential privacy relations in these constructs. You can have any subquery that references differential privacy relations in a FROM and JOIN clause only. | 
| Join clauses |    INNER JOIN   LEFT JOIN   左半結合   左アンチ結合   RIGHT JOIN   FULL JOIN   [JOIN] OR 演算子   CROSS JOIN    |  ユーザー識別子列の等価結合である JOIN 関数のみがサポートされ、差分プライバシーが有効になっている複数のテーブルをクエリする場合は必須であるという条件でサポートされます。必須の等価結合条件が正しいことを確認してください。テーブル所有者がすべてのテーブルに同じユーザー ID 列を設定して、ユーザーの定義がテーブル間で一貫していることを確認します。 差分プライバシーを有効にして 2 つ以上のリレーションを組み合わせる場合、CROSS JOIN 関数はサポートされません。  | 
| Set operators | UNION, UNION ALL, INTERSECT, EXCEPT \$1 MINUS (these are synonyms) | UNION, UNION ALL, INTERSECT, EXCEPT \$1 MINUS (these are synonyms) | Not supported | 
| Window functions |  集計関数   AVG ウィンドウ関数   COUNT ウィンドウ関数   CUME\$1DIST ウィンドウ関数   DENSE\$1RANK ウィンドウ関数   FIRST\$1VALUE ウィンドウ関数   LAG ウィンドウ関数   LAST\$1VALUE ウィンドウ関数   LEAD ウィンドウ関数   MAX ウィンドウ関数   MEDIAN ウィンドウ関数   MIN ウィンドウ関数   NTH\$1VALUE ウィンドウ関数   STDDEV\$1SAMP および STDDEV\$1POP ウィンドウ関数 (STDDEV\$1SAMP および STDDEV はシノニムです)   SUM ウィンドウ関数   VAR\$1SAMP および VAR\$1POP ウィンドウ関数 (VAR\$1SAMP および VARIANCE はシノニムです)   ランク付け関数   DENSE\$1RANK ウィンドウ関数   NTILE ウィンドウ関数   PERCENT\$1RANK ウィンドウ関数   RANK ウィンドウ関数   ROW\$1NUMBER ウィンドウ関数    | All are supported with the condition that the user identifier column in the window function's partition clause is required when you query a relation with differential privacy turned on. | Not supported | 
| Conditional expressions |    CASE 条件式   COALESCE 式   GREATEST および LEAST 関数   NVL および COALESCE 関数   NVL2 関数   NULLIF 関数    | All are supported | All are supported | 
| Conditions |    比較条件   論理条件   パターンマッチング条件   BETWEEN 範囲条件   Null 条件    | EXISTS and IN can't be used because they require subqueries. All others are supported. | All are supported | 
| Date-time functions |    トランザクションにおける日付および時刻関数   連結演算子   ADD\$1MONTHS 関数   CONVERT\$1TIMEZONE 関数   CURRENT\$1DATE 関数   DATEADD 関数   DATEDIFF 関数   DATE\$1PART 関数   DATE\$1TRUNC 関数   EXTRACT 関数   TO\$1TIMESTAMP 関数   日付関数またはタイムスタンプ関数の日付部分    | All are supported | All are supported | 
| String functions |    \$1\$1 (連結) 演算子   BTRIM 関数   CHAR\$1LENGTH 関数   CHARACTER\$1LENGTH 関数   CONCAT 関数   LEFT 関数および RIGHT 関数   LEN 関数   LENGTH 関数   LOWER 関数   LPAD 関数および RPAD 関数   LTRIM 関数   POSITION 関数   REGEXP\$1COUNT 関数   REGEXP\$1INSTR 関数   REGEXP\$1REPLACE 関数   REGEXP\$1SUBSTR 関数   REPEAT 関数   REPLACE 関数   REVERSE 関数   RTRIM 関数   SPLIT\$1PART 関数   SUBSTRING 関数   TRANSLATE 関数   TRIM 関数   UPPER 関数    | All are supported | All are supported | 
| Data type formatting functions |    CAST 関数   TO\$1CHAR   TO\$1DATE 関数   TO\$1NUMBER   日時形式の文字列   数値形式の文字列    | All are supported | All are supported | 
| Hash functions |    AES\$1ENCRYPT   AES\$1DECRYPT   ENCODE   DECODE   MD5 関数   SHA1 関数   SHA2 関数   XX\$1HASH64    | All are supported | All are supported | 
| Mathematical operator symbols | \$1, -, \$1, /, %, and @ | All are supported | All are supported | 
| Math functions |    ABS 関数   ACOS 関数   ASIN 関数   ATAN 関数   ATAN2 関数   CBRT 関数   CEILING (または CEIL）関数   COS 関数   COT 関数   DEGREES 関数   LTRIM 関数   EXP 関数   FLOOR 関数   LN 関数   LOG 関数   MOD 関数   PI 関数   POWER 関数   RADIANS 関数   RANDOM 関数   ROUND 関数   SIGN 関数   SIN 関数   SQRT 関数   TRUNC 関数    | All are supported | All are supported | 
| VARBYTE functions |    UNHEX、   UNBASE64   HEX    HLL\$1SKETCH\$1AGG、    HLL\$1SKETCH\$1ESTIMATE   HLL\$1UNION   HLL\$1UNION\$1AGG    | All are supported | All are supported | 
| JSON |    TO\$1JSON   GET\$1JSON\$1OBJECT    | All are supported | All are supported | 
| Array functions |    ARRAY\$1CONTAINS   ARRAY\$1DISTINCT   ARRAY\$1EXCEPT   ARRAY\$1INTERSECT   ARRAY\$1JOIN   ARRAY\$1REMOVE   ARRAY\$1SORT   ARRAY\$1UNION    | Not supported | Not supported | 
| Extended GROUP BY | GROUPING SETS, ROLLUP, CUBE | Not supported | Not supported | 
| Sort operation | ORDER BY | Supported with the condition that an ORDER BY clause is only supported in a window function's partition clause when querying tables with differential privacy turned on. | Supported | 
| Row limits | LIMIT, OFFSET | Not supported in CTEs using differential privacy protected tables | All are supported | 
| Table and column aliasing |   | Supported | Supported | 
| Math functions on aggregate functions |   | Supported | Supported | 
| Scalar functions within aggregate functions |   | Supported | Supported | 

## サポートされていない SQL コンストラクトの一般的な代替方法
<a name="common-alternatives"></a>


| Category | SQL コンストラクト | 代替 | 
| --- |--- |--- |
|  Window 関数  |    LISTAGG   PERCENTILE\$1CONT   PERCENTILE\$1DISC    | You can use the equivalent aggregate function with GROUP BY. | 
| Mathematical operator symbols |    \$1column \$1\$1/ 2   \$1column \$1/ 2   \$1column ^ 2    |    CBRT   SQRT   POWER(\$1column, 2)    | 
| Scalar functions |    SYSDATE   \$1column::integer   convert(type, \$1column)    |    CURRENT\$1DATE   CAST \$1column AS integer   CAST \$1column AS type    | 
| Literals | INTERVAL ‘1 SECOND' | INTERVAL '1' SECOND | 
| Row limiting | TOP n | LIMIT n | 
| Join |    USING   NATURAL    | ON clause should explicitly contain a join criterion. | 

# 差分プライバシークエリのヒントと例
<a name="dp-query-tips-examples"></a>

AWS Clean Rooms 差分プライバシーは[、汎用クエリ構造](dp-sql-capabilities.md)を使用して、データ準備のための共通テーブル式 (CTEs) や、、 などの一般的に使用される集計関数など`COUNT`、さまざまな SQL コンストラクトをサポートします`SUM`。実行時にクエリ結果を集計するためのノイズを追加して、データ内の可能なユーザーの寄与を難読化するために、 AWS Clean Rooms 差分プライバシーでは、最後の集計関数`SELECT statement`をユーザーレベルのデータで実行する必要があります。

次の例では、`athletic_brand_sales` データを持つスポーツブランドとのコラボレーションで差分プライバシーを使用してデータを保護したいと考えているメディアパブリッシャーの `socialco_impressions` と `socialco_users` という名前の 2 つのテーブルを使用しています。メディアパブリッシャーは、 AWS Clean Roomsで差分プライバシーを有効にして、`user_id` 列をユーザー識別子列として設定しています。広告主は差分プライバシー保護を必要としないため、組み合わせたデータに対して CTE を使用してクエリを実行したいと考えています。CTE では差分プライバシーで保護されたテーブルを使用しているため、広告主は保護されているテーブルのユーザー ID 列を CTE 列のリストに含め、保護対象のテーブルをユーザー ID 列に結合します。

```
WITH matches_table AS(
     SELECT si.user_id, si.campaign_id, s.sale_id, s.sale_price
     FROM socialco_impressions si
     JOIN socialco_users su
         ON su.user_id = si.user_id
     JOIN athletic_brand_sales s
         ON s.emailsha256 = su.emailsha256
     WHERE s.timestamp > si.timestamp
    
UNION ALL
 
     SELECT si.user_id, si.campaign_id, s.sale_id, s.sale_price
     FROM socialco_impressions si
     JOIN socialco_users su
         ON su.user_id = si.user_id
     JOIN athletic_brand_sales s
         ON s.phonesha256 = su.phonesha256
     WHERE s.timestamp > si.timestamp
)
        
SELECT COUNT (DISTINCT user_id) as unique_users
FROM matches_table
GROUP BY campaign_id
ORDER BY COUNT (DISTINCT user_id) DESC
LIMIT 5
```

同様に、差分プライバシーで保護されたデータテーブルでウィンドウ関数を実行する場合は、`PARTITION BY` 句にユーザー ID 列を含める必要があります。

```
ROW_NUMBER() OVER (PARTITION BY conversion_id, user_id ORDER BY match_type, match_age) AS row
```

# AWS Clean Rooms 差分プライバシーの制限
<a name="dp-limitations"></a>

AWS Clean Rooms 差分プライバシーは、以下の状況には対応しません。

1. AWS Clean Rooms 差分プライバシーは、Amazon S3-backed AWS Glue テーブルを使用したクエリのみをサポートします。Snowflake または Amazon Athena テーブルを使用したクエリはサポートされていません。

1. AWS Clean Rooms 差分プライバシーはタイミング攻撃に対処しません。例えば、これらの攻撃は、個々のユーザーが大量の行を入力し、このユーザーを追加または削除するとクエリの計算時間が大幅に変化するようなシナリオで発生する可能性があります。

1. AWS Clean Rooms 差分プライバシーは、特定の SQL コンストラクトの使用が原因で実行時にオーバーフローまたは無効なキャストエラーが発生する可能性がある場合、差分プライバシーを保証しません。

   次の表は、ランタイムエラーを発生させる可能性があり、分析テンプレートで検証する必要がある一部 (すべてではありません) の SQL コンストラクトのリストです。このようなランタイムエラーの可能性を最小限に抑える分析テンプレートを承認し、クエリログを定期的にレビューして、クエリがコラボレーション契約と整合しているかどうか確認することをお勧めします。

   次の SQL コンストラクトは、オーバーフローエラーに対して脆弱です。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/clean-rooms/latest/userguide/dp-limitations.html)

1. CAST データ形式設定関数は、無効なキャストエラーに対して脆弱です。

   [CloudWatch を設定してロググループのメトリクスフィルターを作成](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateMetricFilterProcedure.html)し、そのメトリクスフィルターで [CloudWatch アラームを作成](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Alarm-On-Logs.html)して、オーバーフローまたはキャストエラーが発生した可能性がある場合にアラートを受信できます。

   具体的には、`CastError`、`OverflowError`、`ConversionError` の各エラーコードをモニタリングする必要があります。これらのエラーコードの存在は、サイドチャネル攻撃の可能性を示していますが、誤った SQL クエリを示している可能性もあります。

   詳細については、「[分析ログイン AWS Clean Rooms](query-logs.md)」を参照してください。