Data Manager API は、次の鍵管理サービスを使用したデータの暗号化をサポートしています。
一部のユースケースのサポートは、鍵管理サービス(KMS)によって異なります。
| カテゴリ | ユースケース | Google Cloud KMS | AWS KMS |
|---|---|---|---|
| オーディエンス | オーディエンス メンバーを送信する | ||
| イベント | オフライン コンバージョンまたはリードの拡張コンバージョン | ||
| イベント | Google 広告の宛先に追加のデータソースとして送信されるイベント | ||
| イベント | Google アナリティクスの宛先に追加のデータソースとして送信されるイベント |
Google Cloud KMS を設定する
暗号化用に Google Cloud KMS リソースを設定する手順は次のとおりです。
Google Cloud コマンドライン インターフェースを設定する
Google Cloud コマンドライン インターフェースをインストールして初期化します。
新しい Google Cloud プロジェクトを選択または作成して Cloud Key Management Service を有効にするには、[Cloud KMS を有効にする] をクリックします。
Cloud KMS を有効にする環境でプロジェクトを設定するには、
gcloud config setコマンドを使用します。環境にプロジェクトがすでに設定されているかどうかを確認するには、gcloud config listを実行します。projectが設定されていない場合や、鍵に別のプロジェクトを使用する場合は、gcloud config setを実行します。gcloud config set project PROJECT_ID
キーを作成
詳細については、Cloud Key Management Service の概要をご覧ください。
キーリングの作成
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATION詳細については、キーリングを作成するをご覧ください。
鍵リングに鍵を作成します。 ROTATION_PERIOD は鍵をローテーションする間隔を示し、NEXT_ROTATION_TIME は最初のローテーションが発生する日時を示します。
たとえば、30 日ごとに鍵をローテーションし、最初のローテーションを 1 週間後に実行するには、ROTATION_PERIOD を
30dに、NEXT_ROTATION_TIME を$(date --utc --date="next week" --iso-8601=seconds)に設定します。gcloud kms keys create KEY_NAME \ --keyring KEY_RING_NAME \ --location KEY_RING_LOCATION \ --purpose "encryption" \ --rotation-period ROTATION_PERIOD \ --next-rotation-time "NEXT_ROTATION_TIME"詳細については、鍵を作成するをご覧ください。
Workload Identity プール プロバイダを作成する
このセクションでは、Workload Identity 連携の概要について簡単に説明します。詳細については、Workload Identity 連携をご覧ください。
Workload Identity プール(WIP)を作成します。プールの
locationはglobalにする必要があります。gcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"詳細については、Workload Identity プールとプロバイダを管理するをご覧ください。
Workload Identity プール プロバイダを作成します。
--attribute-condition引数は、呼び出し元が機密情報の照合サービス アカウントであることを検証します。gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location=global \ --workload-identity-pool=WIP_ID \ --display-name="PROVIDER_DISPLAY_NAME" \ --description="PROVIDER_DESCRIPTION" \ --attribute-mapping="google.subject=assertion.sub,google.groups=[\"PROVIDER_ID\"]" \ --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' && 'STABLE' in assertion.submods.confidential_space.support_attributes && ['cfm-services@admcloud-cfm-services.iam.gserviceaccount.com'].exists( a, a in assertion.google_service_accounts) && 'ECDSA_P256_SHA256:6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9' in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)" \ --issuer-uri="https://confidentialcomputing.googleapis.com" \ --allowed-audiences="https://sts.googleapis.com"WIP プロバイダに鍵復号のロールを付与します。
# Grants the role to the WIP provider. gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring KEY_RING_NAME \ --location KEY_RING_LOCATION \ --member "principalSet://iam.googleapis.com/projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/group/PROVIDER_ID" \ --role "roles/cloudkms.cryptoKeyDecrypter"オフライン コンバージョンとリードの拡張コンバージョンのイベントデータを暗号化する場合は、Google サービス アカウント
datamanager-api@datamanager-ga.iam.gserviceaccount.comにキー復号ロールを付与します。# Grants the role to the Google service account. gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring KEY_RING_NAME \ --location KEY_RING_LOCATION \ --member "serviceAccount:datamanager-api@datamanager-ga.iam.gserviceaccount.com" \ --role "roles/cloudkms.cryptoKeyDecrypter"
[データを暗号化する] セクションに進みます。
AWS KMS を設定する
暗号化用に AWS KMS リソースを設定する手順は次のとおりです。
AWS コマンドライン インターフェースを設定する
- AWS コマンドライン インターフェースをインストールします。
次のコマンドを実行して、インストールを確認します。
aws --versionインストールが成功した場合の出力のスニペットを次に示します。
aws-cli/2.31.12 Python/3.13.7 ...
AWS ユーザーを設定してログインする
- AWS コマンドライン インターフェースを使用するための前提条件を完了します。
- IAM Identity Center セッションにログインします。
キーを作成
対称 KMS 鍵(KEK)を作成します。
aws kms create-key \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT \ --description "KEK for Confidential Matching Data Encryption"出力の
KeyMetadataの下にあるArnをメモします。この Amazon Resource Name(ARN)は、他の手順で必要になります。AWS_KEY_ARN省略可: 任意のエイリアス名を使用してキー エイリアスを作成します。
aws kms create-alias \ --alias-name "alias/AWS_KEY_ALIAS" \ --target-key-id AWS_KEY_ARNエイリアスは必須ではありませんが、AWS コマンドライン インターフェース コマンドの作成に役立ちます。たとえば、エイリアスを使用してキー ARN を取得できます。
aws kms describe-key --key-id "alias/AWS_KEY_ALIAS" \ --query 'KeyMetadata.Arn' \ --output text
OpenID Connect ID プロバイダを作成する
OpenID Connect(OIDC)ID プロバイダを作成します。この手順は、AWS アカウントごとに 1 回だけ行う必要があります。
aws iam create-open-id-connect-provider \
--url https://confidentialcomputing.googleapis.com \
--client-id-list AUDIENCE \
--thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"
出力から OIDC プロバイダの ARN をメモします。この情報は他の手順で必要になります。
AWS_OIDC_PROVIDER_ARN
IAM ポリシーを作成する
kms-decrypt-policy.jsonという名前の JSON ファイルを作成し、次の内容を追加します。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "AWS_KEY_ARN" } ] }JSON ファイルと任意のポリシー名を使用して、IAM ポリシーを作成します。
aws iam create-policy \ --policy-name "AWS_POLICY_NAME" \ --policy-document file://kms-decrypt-policy.json出力の IAM ポリシー ARN をメモします。この情報は他の手順で必要になります。
AWS_IAM_POLICY_ARN
IAM ロールを作成してアタッチする
次の内容と前の手順の OIDC プロバイダ ARN を含む
role-trust-policy.jsonという名前の JSON ファイルを作成します。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "AWS_OIDC_PROVIDER_ARN" }, "Action": [ "sts:AssumeRoleWithWebIdentity", "sts:TagSession" ], "Condition": { "StringEquals": { "confidentialcomputing.googleapis.com:aud": "cfm-awsresource", "aws:RequestTag/swname": "CONFIDENTIAL_SPACE", "aws:RequestTag/container.signatures.key_ids": "6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9" }, "StringLike": { "aws:RequestTag/confidential_space.support_attributes": "*STABLE*" } } } ] }任意のロール名で IAM ロールを作成します。
aws iam create-role \ --role-name "AWS_IAM_ROLE_NAME" \ --assume-role-policy-document file://role-trust-policy.jsonIAM ポリシーにロールポリシーをアタッチします。
aws iam attach-role-policy \ --role-name "AWS_IAM_ROLE_NAME" \ --policy-arn "AWS_IAM_POLICY_ARN"
データの暗号化
Data Manager API での暗号化には、データ暗号鍵(DEK)が必要です。DEK は、データの暗号化に使用する対称鍵です。DEK は、Google Cloud または AWS KMS 鍵を使用して暗号化されます。暗号化された DEK は、リクエストの一部として送信します。
リクエスト内のデータを暗号化用に準備するには、暗号化されていないデータに使用するのと同じ形式設定とハッシュ化のガイドラインに従います。
ハッシュ化されていない値を暗号化しないでください。たとえば、AddressInfo の region_code や postal_code などです。
各フィールドのデータがフォーマットされ、ハッシュ化されたら、次の手順でハッシュ値を暗号化します。
- Base64 エンコードを使用してハッシュ バイトをエンコードします。
- DEK を使用して、Base64 でエンコードされたハッシュを暗号化します。
- 16 進数または Base64 エンコードを使用して、暗号化プロセスの出力をエンコードします。
- フィールドにはエンコードされた値を使用します。
- リクエストで
encryption_infoとencodingを設定します。
最後の手順を完了するには、IngestAudienceMembersRequest または IngestEventsRequest を変更して、データを暗号化したことを示します。
encryption_infoフィールドを設定します。encodingフィールドを、暗号化されたフィールド値のエンコードに使用されるエンコードに設定します。
Google Cloud KMS 鍵を使用し、暗号化フィールドとエンコード フィールドが設定されたリクエストのスニペットは次のとおりです。
{
...
"encryptionInfo": {
"gcpWrappedKeyInfo": {
"kekUri": "gcp-kms://projects/PROJECT_ID/locations/KEY_RING_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME",
"wipProvider": "projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/providers/PROVIDER_ID",
"keyType": "XCHACHA20_POLY1305",
"encryptedDek": "ENCRYPTED_DEK"
}
},
"encoding": "ENCODING"
}
Data Manager API のライブラリとユーティリティを使用してリクエストを構築して送信するには、Java の IngestAudienceMembersWithEncryption コードサンプルまたは Python の ingest_audience_members_with_encryption コードサンプルをご覧ください。