1. 前提条件
この Codelab を実施するには、いくつかの前提条件が必要です。各要件には、「ローカルテスト」と「集計サービス」のどちらに必要かが表示されます。
1.1. ローカルテストツールをダウンロードする(ローカルテスト)
ローカルテストを行うには、ローカルテストツールをダウンロードする必要があります。このツールは、暗号化されていないデバッグ レポートから概要レポートを生成します。
ローカル テストツールは、GitHub の Lambda JAR アーカイブからダウンロードできます。LocalTestingTool_{version}.jar
という名前にする必要があります。
1.2. JAVA JRE がインストールされていることを確認する(ローカル テストと集計サービス)
[ターミナル] を開き、java --version
を使用して、マシンに Java または openJDK がインストールされているかどうかを確認します。
インストールされていない場合は、Java のサイトまたは openJDK のサイトからダウンロードしてインストールできます。
1.3. 集計可能レポート コンバータ(ローカルテストと集計サービス)をダウンロードする
集計可能なレポート変換ツールのコピーは、プライバシー サンドボックスのデモの GitHub リポジトリからダウンロードできます。
1.4. Ad Privacy API(ローカル テストと集計サービス)を有効にする
ブラウザで chrome://settings/adPrivacy
に移動し、すべての Ad Privacy API を有効にします。
サードパーティ Cookie が有効になっていることを確認します。
ブラウザで chrome://settings/cookies
に移動し、[シークレット モードでサードパーティ Cookie をブロックする] を選択します。
1.5. ウェブと Android の登録(集計サービス)
本番環境でプライバシー サンドボックス API を使用するには、Chrome と Android の両方で登録と構成証明を完了していることを確認してください。
ローカルテストでは、Chrome フラグと CLI スイッチを使用して登録を無効にできます。
デモで Chrome フラグを使用するには、chrome://flags/#privacy-sandbox-enrollment-overrides
に移動して、オーバーライドを自分のサイトに更新します。Google のデモサイトを使用する場合は、更新する必要はありません。
1.6. 集計サービスのオンボーディング(集計サービス)
集計サービスを使用するには、コーディネーターにオンボーディングする必要があります。レポート サイトのアドレス、AWS アカウント ID などの情報を入力して、集計サービスのオンボーディング フォームに記入します。
1.7. クラウド プロバイダ(集計サービス)
Aggregation Service では、クラウド環境を使用する高信頼実行環境を使用する必要があります。集計サービスは、Amazon Web Services(AWS)と Google Cloud(GCP)でサポートされています。この Codelab では、AWS との統合のみについて説明します。
AWS は、Nitro Enclaves という高信頼実行環境を提供しています。AWS アカウントがあることを確認し、AWS CLI のインストールと更新の手順に沿って AWS CLI 環境を設定します。
AWS CLI が新しい場合は、CLI 構成手順に沿って AWS CLI を構成できます。
1.7.1. AWS S3 バケットを作成する
Terraform の状態を保存する AWS S3 バケットと、レポートと概要レポートを保存する別の S3 バケットを作成します。提供されている CLI コマンドを使用できます。<>
のフィールドを適切な変数に置き換えます。
aws s3api create-bucket --bucket <tf_bucket_name> --region us-east-1
aws s3api create-bucket --bucket <report_bucket_name> --region us-east-1
1.7.2. ユーザー アクセスキーを作成する
AWS ガイドを使用してユーザー アクセスキーを作成します。これは、AWS で作成された createJob
API エンドポイントと getJob
API エンドポイントの呼び出しに使用されます。
1.7.3. AWS のユーザーとグループの権限
AWS に Aggregation Service をデプロイするには、サービスのデプロイに使用するユーザーに特定の権限を付与する必要があります。この Codelab では、デプロイで完全な権限を確保するために、ユーザーに管理者権限があることを確認してください。
1.8. Terraform(Aggregation Service)
この Codelab では、Terraform を使用して集計サービスをデプロイします。Terraform バイナリがローカル環境にインストールされていることを確認します。
Terraform バイナリをローカル環境にダウンロードします。
Terraform バイナリがダウンロードされたら、ファイルを解凍して Terraform バイナリを /usr/local/bin
に移動します。
cp <directory>/terraform /usr/local/bin
Terraform がクラスパスで使用可能であることを確認します。
terraform -v
1.9. Postman(集計サービス AWS 用)
この Codelab では、リクエスト管理に Postman を使用します。
ワークスペースを作成するには、上部のナビゲーション アイテムの [ワークスペース] に移動し、[ワークスペースを作成] を選択します。
[空のワークスペース] を選択し、[次へ] をクリックして名前を [プライバシー サンドボックス] にします。[個人用] を選択し、[作成] をクリックします。
事前構成済みのワークスペースの JSON 構成ファイルと グローバル環境ファイルをダウンロードします。
[インポート] ボタンを使用して、JSON ファイルを [マイ ワークスペース] にインポートします。
これにより、createJob
と getJob
の HTTP リクエストとともにプライバシー サンドボックス コレクションが作成されます。
[環境のクイックルック] で AWS の [アクセスキー] と [シークレット キー] を更新します。
[編集] をクリックし、[access_key] と [secret_key] の両方の [現在の値] を更新します。frontend_api_id
については、このドキュメントのセクション 3.1.4 で説明します。us-east-1 リージョンを使用することをおすすめします。ただし、別のリージョンにデプロイする場合は、リリースされた AMI をアカウントにコピーするか、提供されているスクリプトを使用してセルフビルドを実行してください。
2. ローカルテスト コードラボ
マシン上のローカル テストツールを使用して、集計を実行し、暗号化されていないデバッグ レポートを使用して概要レポートを生成できます。
Codelab の手順
ステップ 2.1. レポートをトリガーする: 非公開集計レポートをトリガーしてレポートを収集できるようにします。
ステップ 2.2. デバッグ用集計レポートを作成する: 収集した JSON レポートを AVRO 形式のレポートに変換します。
このステップは、広告テクノロジーが API レポート エンドポイントからレポートを収集し、JSON レポートを AVRO 形式のレポートに変換する場合と同様です。
ステップ 2.3. デバッグ レポートからバケットキーを解析する: バケットキーは広告テクノロジーによって設計されます。この Codelab では、バケットが事前定義されているため、提供されているバケットキーを取得します。
ステップ 2.4. 出力ドメインの AVRO を作成する: バケットキーを取得したら、出力ドメインの AVRO ファイルを作成します。
ステップ 2.5. ローカルテストツールを使用して概要レポートを作成する: ローカルテストツールを使用して、ローカル環境で概要レポートを作成できます。
ステップ 2.6. 概要レポートを確認する: ローカル テストツールによって作成された概要レポートを確認します。
2.1. トリガー レポート
プライバシー サンドボックスのデモサイトにアクセスします。これにより、非公開の集計レポートがトリガーされます。レポートは chrome://private-aggregation-internals
で確認できます。
レポートのステータスが [保留中] の場合は、レポートを選択して [選択したレポートを送信] をクリックします。
2.2. デバッグ集約レポートを作成する
chrome://private-aggregation-internals
で、[reporting-origin]/.well-known/private-aggregation/report-shared-storage
エンドポイントで受信した「Report Body」をコピーします。
[レポート本文] の aggregation_coordinator_origin
に https://publickeyservice.msmt.aws.privacysandboxservices.com
が含まれていることを確認します。これは、レポートが AWS で集計可能なレポートであることを意味します。
JSON の「Report Body」を JSON ファイルに配置します。この例では、vim を使用できます。ただし、任意のテキスト エディタを使用できます。
vim report.json
レポートを report.json
に貼り付けて、ファイルを保存します。
作成したら、レポート フォルダに移動し、aggregatable_report_converter.jar
を使用して、集計可能なデバッグ レポートを作成します。これにより、現在のディレクトリに report.avro
という集計可能なレポートが作成されます。
java -jar aggregatable_report_converter.jar \
--request_type convertToAvro \
--input_file report.json \
--debug
2.3. デバッグ レポートからバケットキーを解析する
集計サービスでは、バッチ処理を行う際に 2 つのファイルが必要です。集計可能なレポートと出力ドメイン ファイル。出力ドメイン ファイルには、集計可能なレポートから取得するキーが含まれています。output_domain.avro
ファイルを作成するには、レポートから取得できるバケットキーが必要です。
バケットキーは API の呼び出し元によって設計されます。デモには、事前に作成されたバケットキーの例が含まれています。このデモではプライベート集計のデバッグモードが有効になっているため、[レポート本文] からデバッグ クリアテキスト ペイロードを解析してバケットキーを取得できます。ただし、この場合は、サイトのプライバシー サンドボックスのデモでバケット鍵が作成されます。このサイトの非公開集計はデバッグモードであるため、[レポート本文] の debug_cleartext_payload
を使用してバケットキーを取得できます。
レポート本文から debug_cleartext_payload
をコピーします。
Debug payload decoder for Private Aggregation ツールを開き、debug_cleartext_payload
を [INPUT] ボックスに貼り付け、[Decode] をクリックします。
このページには、バケットキーの 10 進数値が表示されます。バケットキーの例を次に示します。
2.4. 出力ドメイン AVRO を作成する
バケットキーを取得したので、バケットキーの小数値をコピーします。バケットキーを使用して output_domain.avro
を作成します。
は、取得したバケットキーに置き換えてください。
java -jar aggregatable_report_converter.jar \
--request_type createDomainAvro \
--bucket_key <bucket key>
このスクリプトにより、現在のフォルダに output_domain.avro
ファイルが作成されます。
2.5. ローカル テストツールを使用して概要レポートを作成する
概要レポートを作成するには、セクション 1.1 でダウンロードした LocalTestingTool_{version}.jar
を使用します。次のコマンドを使用します。LocalTestingTool_{version}.jar
は、LocalTestingTool 用にダウンロードしたバージョンに置き換える必要があります。
次のコマンドを実行して、ローカル開発環境で概要レポートを生成します。
java -jar LocalTestingTool_{version}.jar \
--input_data_avro_file report.avro \
--domain_avro_file output_domain.avro \
--output_directory .
コマンドを実行すると、次の画像のような画面が表示されます。これが完了すると、レポート output.avro
が作成されます。
2.6. 概要レポートを確認する
作成される概要レポートは AVRO 形式です。これを読み取るには、AVRO から JSON 形式に変換する必要があります。理想的には、広告テクノロジーで AVRO レポートを JSON に変換するコードを記述する必要があります。
この Codelab では、提供されている aggregatable_report_converter.jar
ツールを使用して、AVRO レポートを JSON に変換します。
java -jar aggregatable_report_converter.jar \
--request_type convertToJson \
--input_file output.avro
次のようなレポートが返されます。同じディレクトリに作成されたレポート output.json
も作成されます。
任意のエディタで JSON ファイルを開き、概要レポートを確認します。
3. 集計サービスのデプロイ
Aggregation Service をデプロイする手順は次のとおりです。
ステップ 3. 集計サービスのデプロイ: AWS に集計サービスをデプロイする
ステップ 3.1集計サービス リポジトリのクローンを作成する
ステップ 3.2. ビルド済みの依存関係をダウンロードする
ステップ 3.3. 開発環境を作成する
ステップ 3.4.集計サービスをデプロイする
3.1. 集計サービス リポジトリのクローンを作成する
ローカル環境で、Aggregation Service GitHub リポジトリのクローンを作成します。
git clone https://github.com/privacysandbox/aggregation-service.git
3.2. ビルド済みの依存関係をダウンロードする
Aggregation Service リポジトリをクローンしたら、リポジトリの Terraform フォルダと対応する cloud フォルダに移動します。cloud_provider が AWS の場合は、
に進みます。
cd <repository_root>/terraform/aws
で download_prebuilt_dependencies.sh
を実行します。
bash download_prebuilt_dependencies.sh
3.3. 開発環境を作成する
に開発環境を作成します。dev
という名前のフォルダを作成します。
mkdir dev
demo
フォルダの内容を dev
フォルダにコピーします。
cp -R demo/* dev
dev
フォルダに移動します。
cd dev
main.tf
ファイルを更新し、i
キー(input
)を押してファイルを編集します。
vim main.tf
赤いボックス内のコードのコメント化を解除するには、# を削除してバケット名とキー名を更新します。
AWS main.tf の場合:
コメント化を解除したコードは次のようになります。
backend "s3" {
bucket = "<tf_state_bucket_name>"
key = "<environment_name>.tfstate"
region = "us-east-1"
}
更新が完了したら、更新を保存し、esc
-> :wq!
を押してエディタを終了します。これにより、main.tf
に更新が保存されます。
次に、example.auto.tfvars
の名前を dev.auto.tfvars
に変更します。
mv example.auto.tfvars dev.auto.tfvars
dev.auto.tfvars
を更新し、input
の i
を押してファイルを編集します。
vim dev.auto.tfvars
次の画像の赤いボックス内のフィールドを更新し、Aggregation Service オンボーディング、環境、通知メールで提供された正しい AWS ARN パラメータを指定します。
更新が完了したら、esc
-> :wq!
を押します。これにより、dev.auto.tfvars
ファイルが保存されます。このファイルは次の画像のようになります。
3.4. 集計サービスをデプロイする
Aggregation Service をデプロイするには、同じフォルダ
で Terraform を初期化します。
terraform init
次のような画像が表示されます。
Terraform が初期化されたら、Terraform 実行プランを作成します。追加するリソースの数と、次の画像のようなその他の追加情報が返されます。
terraform plan
以下に、[プラン] の概要を示します。これが新規デプロイの場合、追加されるリソースの数は 0、変更されるリソースの数は 0、破棄されるリソースの数は 0 になります。
完了したら、Terraform の適用に進みます。
terraform apply
Terraform によるアクションの実行を確認するよう求められたら、値に yes
を入力します。
terraform apply
が完了すると、createJob
と getJob
の次のエンドポイントが返されます。セクション 1.9 で Postman で更新する必要がある frontend_api_id
も返されます。
4. 集計サービスの入力の作成
集計サービスでバッチ処理用の AVRO レポートを作成します。
ステップ 4. 集計サービス入力の作成: 集計サービス用にバッチ処理される集計サービス レポートを作成します。
ステップ 4.1.トリガー レポート
ステップ 4.2. 集計可能レポートを収集する
ステップ 4.3. レポートを AVRO に変換する
ステップ 4.4. 出力ドメイン AVRO を作成する
4.1. トリガー レポート
プライバシー サンドボックスのデモサイトにアクセスします。これにより、非公開の集計レポートがトリガーされます。レポートは chrome://private-aggregation-internals
で確認できます。
レポートのステータスが [保留中] の場合は、レポートを選択して [選択したレポートを送信] をクリックします。
4.2. 集計可能レポートを収集する
対応する API の .well-known
エンドポイントから集計可能なレポートを収集します。
- Private Aggregation
[reporting-origin] /.well-known/private-aggregation/report-shared-storage
- アトリビューション レポート - 概要レポート
[reporting-origin] /.well-known/attribution-reporting/report-aggregate-attribution
この Codelab では、レポートの収集を手動で行います。本番環境では、広告テクノロジーがプログラムでレポートを収集して変換することが求められます。
chrome://private-aggregation-internals
で、[reporting-origin]/.well-known/private-aggregation/report-shared-storage
エンドポイントで受信した「Report Body」をコピーします。
[レポート本文] の aggregation_coordinator_origin
に https://publickeyservice.msmt.aws.privacysandboxservices.com
が含まれていることを確認します。これは、レポートが AWS で集計可能なレポートであることを意味します。
JSON の「Report Body」を JSON ファイルに配置します。この例では、vim を使用できます。ただし、任意のテキスト エディタを使用できます。
vim report.json
レポートを report.json
に貼り付けて、ファイルを保存します。
4.3. レポートを AVRO に変換する
.well-known
エンドポイントから受信したレポートは JSON 形式であるため、AVRO レポート形式に変換する必要があります。JSON レポートを取得したら、レポート フォルダに移動し、aggregatable_report_converter.jar
を使用して、デバッグ用集計レポートを作成します。これにより、現在のディレクトリに report.avro
という集計可能なレポートが作成されます。
java -jar aggregatable_report_converter.jar \
--request_type convertToAvro \
--input_file report.json
4.4. 出力ドメイン AVRO を作成する
output_domain.avro
ファイルを作成するには、レポートから取得できるバケットキーが必要です。
バケットキーは広告テクノロジーによって設計されますが、この場合はサイトの プライバシー サンドボックスのデモによってバケットキーが作成されます。このサイトの非公開集計はデバッグモードであるため、[レポート本文] の debug_cleartext_payload
を使用してバケットキーを取得できます。
レポート本文から debug_cleartext_payload
をコピーします。
goo.gle/ags-payload-decoder を開き、debug_cleartext_payload
を [INPUT] ボックスに貼り付けて、[Decode] をクリックします。
このページには、バケットキーの 10 進数値が表示されます。バケットキーの例を次に示します。
バケットキーが作成されたので、output_domain.avro
を作成します。
は、取得したバケットキーに置き換えてください。
java -jar aggregatable_report_converter.jar \
--request_type createDomainAvro \
--bucket_key <bucket key>
このスクリプトにより、現在のフォルダに output_domain.avro
ファイルが作成されます。
4.5. レポートを AWS バケットに移動する
AVRO レポート(セクション 3.2.3)と出力ドメイン(セクション 3.2.4)が作成されたら、レポートと出力ドメインをレポート用 S3 バケットに移動します。
ローカル環境に AWS CLI が設定されている場合は、次のコマンドを使用して、レポートを対応する S3 バケットとレポート フォルダにコピーします。
aws s3 cp report.avro s3://<report_bucket_name>/<report_folder>/
aws s3 cp output_domain.avro s3://<report_bucket_name>/<output_domain_folder>/
5. 集計サービスの使用量
terraform apply
から、create_job_endpoint
、get_job_endpoint
、frontend_api_id
が返されます。frontend_api_id
をコピーし、前提条件のセクション 1.9 で設定した Postman のグローバル変数 frontend_api_id
に配置します。
手順 5. 集計サービスの使用: Aggregation Service API を使用して概要レポートを作成し、概要レポートを確認します。
ステップ 5.1.createJob エンドポイントを使用してバッチ処理する
ステップ 5.2. getJob エンドポイントを使用してバッチ ステータスを取得する
ステップ 5.3. 概要レポートを確認する
5.1. createJob
エンドポイントを使用してバッチ処理する
Postman で [Privacy Sandbox] コレクションを開き、[createJob] を選択します。
[Body] を選択し、[raw] を選択してリクエスト ペイロードを配置します。
createJob
ペイロード スキーマは github で入手でき、次のようになります。<>
は、適切なフィールドに置き換えます。
{
"job_request_id": "<job_request_id>",
"input_data_blob_prefix": "<report_folder>/<report_name>.avro",
"input_data_bucket_name": "<bucket_name>",
"output_data_blob_prefix": "<output_folder>/<summary_report_prefix>",
"output_data_bucket_name": "<bucket_name>",
"job_parameters": {
"output_domain_blob_prefix": "<output_domain_folder>/<output_domain>.avro",
"output_domain_bucket_name": "<bucket_name>",
"attribution_report_to": "<reporting origin of report>",
"reporting_site": "<domain of reporting origin(s) of report>", // Only one of attribution_report_to or reporting_site is required as of v2.7.0
"report_error_threshold_percentage": "10",
"debug_run": "true"
}
}
[送信] をクリックすると、job_request_id
を使用してジョブが作成されます。Aggregation Service がリクエストを承認すると、HTTP 202 レスポンスが返されます。その他の返されるコードについては、HTTP レスポンス コードをご覧ください。
5.2. getJob エンドポイントを使用してバッチ ステータスを取得する
ジョブリクエストのステータスを確認するには、getJob
エンドポイントを使用します。[プライバシー サンドボックス] コレクションで [getJob] を選択します。
[Params] で、job_request_id の値を、createJob
リクエストで送信された job_request_id
に更新します。
getJob
の結果は、HTTP ステータス 200 でジョブリクエストのステータスを返します。リクエストの「Body」には、job_status
、return_message
、error_messages
(ジョブでエラーが発生した場合)などの必要な情報が含まれます。
生成されたデモレポートのレポート サイトは、AWS ID でオンボーディングされたサイトとは異なるため、PRIVACY_BUDGET_AUTHORIZATION_ERROR
return_code を含むレスポンスが返される場合があります。これは、レポートのレポート送信元のサイトが、AWS ID にオンボーディングされたレポート送信元のサイトと一致していないため、正常な動作です。
{
"job_status": "FINISHED",
"request_received_at": "2023-12-07T22:50:58.830956Z",
"request_updated_at": "2023-12-07T22:51:10.526326456Z",
"job_request_id": "<job_request_id>",
"input_data_blob_prefix": "<report_folder>/<report_name>.avro",
"input_data_bucket_name": "<input_bucket_name>",
"output_data_blob_prefix": "<output_folder>/<summary_report_prefix>",
"output_data_bucket_name": "<output_bucket_name>",
"postback_url": "",
"result_info": {
"return_code": "PRIVACY_BUDGET_AUTHORIZATION_ERROR",
"return_message": "Aggregation job successfully processed",
"error_summary": {
"error_counts": [],
"error_messages": []
},
"finished_at": "2023-12-07T22:51:10.517730898Z"
},
"job_parameters": {
"debug_run": "true",
"output_domain_bucket_name": "<output_domain_bucket_name>",
"output_domain_blob_prefix": "<output_domain_folder>/<output_domain>.avro",
"attribution_report_to": "https://privacy-sandbox-demos-dsp.dev",
"reporting_site": "<domain of reporting origin(s) of report>", // Only one of attribution_report_to or reporting_site is required as of v2.7.0
},
"request_processing_started_at": "2023-12-07T22:51:06.034472697Z"
}
5.3. 概要レポートを確認する
出力 S3 バケットにサマリー レポートが届いたら、ローカル環境にダウンロードできます。概要レポートは AVRO 形式で、JSON に変換できます。aggregatable_report_converter.jar
を使用して、次のコマンドでレポートを読み取ることができます。
java -jar aggregatable_report_converter.jar \
--request_type convertToJson \
--input_file <summary_report_avro>
これにより、各バケットキーの集計値の JSON が返されます。この JSON は次の画像のようになります。
createJob
リクエストに debug_run
が true
として含まれている場合は、output_data_blob_prefix
にあるデバッグ フォルダに概要レポートを受け取ることができます。レポートは AVRO 形式で、前のコマンドを使用して JSON に変換できます。
レポートには、バケットキー、ノイズなしの指標、ノイズなしの指標に追加されて概要レポートを形成するノイズが含まれています。レポートは次の画像のようになります。
アノテーションには in_reports
と in_domain
も含まれます。これは次のように意味します。
- in_reports - 集計可能なレポート内でバケットキーを使用できます。
- in_domain - バケットキーは output_domain AVRO ファイル内で使用できます。