Workload Identity Federation用のGoogle Cloudの設定
このページでは、Braze Cloud Data Ingestion(CDI)がWorkload Identity Federation(WIF)でBigQueryおよびGoogle Cloud Storage(GCS)にアクセスできるように、Google Cloudプロジェクトを設定する方法について説明します。その他のソース設定については、データウェアハウス統合、接続ソース、またはファイルストレージ統合を参照してください。
WIFを使用すると、Brazeは自身のAWS環境からの短期間のIDでGoogle Cloudに認証し、プロジェクト内のサービスアカウントになりすまします。プロジェクトで、そのIDをワークスペースのみに信頼するよう設定します。サービスアカウントキーの作成や共有は不要です。
WIFの設定はGoogle Cloudプロジェクトごとに1回行います。1つのWIF認証情報がBigQueryとGCSの両方のソースに使用できるため、すでにこれらのステップを完了している場合は、ステップ6で既存のサービスアカウントに新しいデータへのアクセス権を付与し、残りのステップはスキップしてください。
前提条件
Google Cloudコンソールでこれらのステップを完了するには、Workload Identity Poolとサービスアカウントを作成し、サービスアカウントおよびデータに対するIdentity and Access Management(IAM)ポリシーを管理する権限が必要です。たとえば、Workload Identity Pool Admin(roles/iam.workloadIdentityPoolAdmin)およびService Account Admin(roles/iam.serviceAccountAdmin)ロールを使用できます。
ワークスペースのプリンシパルのみを信頼する

認証情報フォームに表示されるBrazeプリンシパルのAmazon Resource Name(ARN)全体にアクセス権を付与してください。BrazeのAWSロールやAWSアカウントにアクセス権を付与しないでください。ロールレベルまたはアカウントレベルで付与すると、他のBraze顧客がデータを読み取れるようになります。
同じBrazeインスタンス上のすべてのBrazeワークスペースは同じAWSロールを提示します。プリンシパルARNの末尾のセッション名(ワークスペースID)のみが一意です。
GoogleのAWSプロバイダーのデフォルトの属性マッピングでは、aws_roleがセッション名なしのロールARNに設定されます。これは、aws_role値に一致するIDにアクセス権を付与する(例:principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_role/ROLE_ARN)と、自分のワークスペースを含む、インスタンス上のすべてのBrazeワークスペースを信頼することを意味します。
データをワークスペースにスコープするには:
subjectがBrazeプリンシパルARN全体であるIDのみにアクセス権を付与します。これはprincipal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/BRAZE_PRINCIPAL_ARNプリンシパルです。- プール内のすべてのID、または
aws_roleやaccountでフィルターされたIDにはアクセス権を付与しないでください。 - AWSアカウントまたはロールのみをチェックする属性条件は記述しないでください。
google.subjectのデフォルトの属性マッピング(assertion.arn)を維持してください。
BrazeプリンシパルARNはワークスペースおよびBrazeインスタンスごとに異なり、BrazeはGoogleソース用にSnowflakeなど他のソースとは異なるAWSロールを使用します。接続するワークスペースのBigQueryまたはGCS認証情報フォームから常に値をコピーしてください。
Workload Identity Federationの設定
ステップ1:BrazeプリンシパルARNをコピーする
Brazeで、BigQueryまたはGCSソースの作成を開始し、認証方法としてWorkload Identity Federationを選択します。認証情報フォームのステップ1、Copy the Braze principal ARNに表示される値をコピーし、フォームを開いたままにします。
フィールドにUnavailableと表示される場合、WIFはお使いのBrazeインスタンスでは利用できません。代わりにサービスアカウントキーを使用してください。
ステップ2:必要なAPIを有効にする
Google Cloudコンソールで、APIs & Services > Libraryに移動し、プロジェクトで以下のAPIを有効にします:
- IAM Service Account Credentials API
- Security Token Service API
- Identity and Access Management (IAM) API
ステップ3:Workload Identity Poolとプロバイダーを作成する
- IAM & Admin > Workload Identity Federationに移動し、Create poolを選択します。
- プールの名前(例:「Braze CDI」)を入力します。Pool IDを控えてから、Continueを選択します。
- Select a providerでAWSを選択します。
- プロバイダー名(例:「Braze AWS」)を入力し、Provider IDを控えます。
- AWS account IDに、BrazeプリンシパルARNの
arn:aws:sts::の後に続く12桁の数値を入力し、Continueを選択します。 - Configure provider attributesで、
google.subject=assertion.arnを含むデフォルトのマッピングを維持します。 - Saveを選択します。
プールIDとプロバイダーIDは4〜32文字で、小文字、数字、ハイフンを使用する必要があります。
プロバイダーをプリンシパルに制限する(オプション)
多層防御として、プロバイダーがワークスペースのプリンシパルのみを受け入れるように属性条件を追加します。これにより、Googleはサービスアカウントの権限をチェックする前に、トークン交換の段階で他のすべてのIDを拒否します。
- プールでプロバイダーを選択し、Editを選択します。
- Attribute conditionsでAdd conditionを選択します。
-
以下の条件を入力します。
BRAZE_PRINCIPAL_ARNをステップ1でコピーした完全な値に置き換えてください:assertion.arn == 'BRAZE_PRINCIPAL_ARN'
- Saveを選択します。
この条件により、プロバイダーは1つのBrazeワークスペース専用になります。別のワークスペースを接続するには、そのワークスペース用に別のプロバイダーを作成するか、assertion.arn in ['FIRST_BRAZE_PRINCIPAL_ARN', 'SECOND_BRAZE_PRINCIPAL_ARN']のように両方のプリンシパルを列挙します。
ステップ4:サービスアカウントを作成する
GCSの設定で作成したものなど、Braze用のサービスアカウントがすでにある場合は、このステップをスキップしてください。
- IAM & Admin > Service Accountsに移動し、Create service accountを選択します。
- 名前(例:「Braze CDI」)を入力し、Create and continueを選択します。
- オプションのプロジェクトロールとユーザーアクセスのステップをスキップし、Doneを選択します。データアクセスの付与はステップ6で行います。
ステップ5:Brazeプリンシパルをサービスアカウントにバインドする
ワークスペースのプリンシパルに、サービスアカウントになりすます権限を付与します:
- IAM & Admin > Workload Identity Federationに移動し、プールを選択します。
- Grant accessを選択し、次にGrant access using service account impersonationを選択します。
- Service accountで、ステップ4のサービスアカウントを選択します。
- Select principalsでOnly identities matching the filterを選択します。
- Attribute nameでsubjectを選択します。Attribute valueに、ステップ1のBrazeプリンシパルARN全体を貼り付けます。
- Saveを選択します。Googleがクライアントライブラリ設定ファイルのダウンロードを提案した場合は、Dismissを選択してください。Brazeでは不要です。
これにより、サービスアカウントに対して、以下の形式のプリンシパルにWorkload Identity Userロール(roles/iam.workloadIdentityUser)が付与されます:
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/BRAZE_PRINCIPAL_ARN
確認するには、サービスアカウントを開き、Permissionsタブを選択します。Workload Identity Userロールに、BrazeプリンシパルARN全体で終わるこのプリンシパルが表示されるはずです。

All identities in the poolを選択したり、aws_roleでフィルターしたりしないでください。どちらもすべて同じAWSロールを共有しているため、Brazeインスタンス上のすべてのBrazeワークスペースに一致します。詳細については、ワークスペースのプリンシパルのみを信頼するを参照してください。
このロールはサービスアカウントにのみ付与してください。プロジェクトレベルで付与すると、プリンシパルがプロジェクト内のすべてのサービスアカウントになりすませるようになります。
IAMの変更が反映されるまで数分かかる場合があります。アクセス権付与直後に接続テストが失敗した場合は、数分待ってから再試行してください。
ステップ6:サービスアカウントにデータへのアクセス権を付与する
ソースに応じた権限をサービスアカウントに付与します:
- BigQuery: データウェアハウス統合のステップ1.2、または接続ソースのステップ2.1に記載されているBigQueryロール
- Google Cloud Storage: 権限の割り当てに記載されているバケットおよび購読の権限
両方のソースに1つの認証情報を使用する場合は、同じサービスアカウントに両方の権限セットを付与してください。
ステップ7:Brazeに値を入力する
Brazeの認証情報フォームに戻り、Google Cloudコンソールから以下の値を入力します:
| Brazeフィールド | 確認場所 |
|---|---|
| Project number | コンソールのDashboardのProject infoカード。プロジェクトIDではなく、数値のプロジェクト番号を使用してください。 |
| Workload identity pool ID | ステップ3のPool ID |
| Provider ID | ステップ3のProvider ID |
| Service account email | Service AccountsページのサービスアカウントのEmail |
Brazeはプロジェクト番号、プールID、プロバイダーIDを組み合わせてオーディエンスを構成し、Brazeからのリクエストをどのプロバイダーが検証するかをGoogleに伝えます。デフォルトでは、プロバイダーは自身のリソース名をオーディエンスとして受け入れます。プロバイダーにカスタム許可オーディエンスを設定した場合は、プロバイダーの完全なリソース名を含めてください。
ステップ8:接続をテストする
Brazeで接続をテストすると、設定がワークスペースのみを信頼していることも確認されます。テスト中、Brazeは以下の形式のすべてゼロのテストセッション名で同じ交換を試みます:
assumed-role/cdi-gcs-bigquery-sync-<deployment>/000000000000000000000000
設定はこのIDを、トークン交換の段階またはサービスアカウントのなりすましを試みた段階で拒否する必要があります。両方のステップが成功した場合、設定がワークスペースのプリンシパル以外のIDも信頼しているため、テストは失敗します。修正するには、設定がワークスペース以外のIDを信頼しているセクションを参照してください。
オプションの属性条件を設定した場合、Googleはトークン交換の段階でテストIDを拒否します。それ以外の場合、GoogleはテストIDがサービスアカウントになりすまそうとした段階で拒否します。いずれの場合もテストは合格します。
接続をテストするたびに、Google Cloudの監査ログにこの拒否された試行が表示されることがあります。これは想定された動作です。この試行はBrazeのチェックによるものであり、データへのアクセスは発生しません。
このテストセッションのみを拒否する条件を追加しないでください。そのような条件はテストに合格しますが、設定は引き続き他のBrazeワークスペースを信頼した状態のままです。
Brazeのアクセスを削除する
Brazeがデータにアクセスするのを停止するには、サービスアカウントのPermissionsタブからBrazeプリンシパルのWorkload Identity Userロールを削除するか、プロバイダーを削除します。
gcloud CLIを使用した設定
コマンドラインを使用する場合、以下のコマンドでステップ2〜5を完了できます。最初のブロックの値を置き換え、BrazeプリンシパルARNはコピーしたとおりに正確に貼り付けてください。
PROJECT_ID="YOUR-PROJECT-ID"
POOL_ID="braze-cdi"
PROVIDER_ID="braze-aws"
SA_NAME="braze-cdi"
BRAZE_PRINCIPAL_ARN="PASTE-THE-BRAZE-PRINCIPAL-ARN-FROM-YOUR-CREDENTIAL-FORM"
PROJECT_NUMBER="$(gcloud projects describe "$PROJECT_ID" --format='value(projectNumber)')"
BRAZE_AWS_ACCOUNT_ID="$(echo "$BRAZE_PRINCIPAL_ARN" | cut -d: -f5)"
SA_EMAIL="${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud services enable iam.googleapis.com iamcredentials.googleapis.com sts.googleapis.com \
--project="$PROJECT_ID"
gcloud iam workload-identity-pools create "$POOL_ID" \
--project="$PROJECT_ID" --location="global" --display-name="Braze CDI"
gcloud iam workload-identity-pools providers create-aws "$PROVIDER_ID" \
--project="$PROJECT_ID" --location="global" --workload-identity-pool="$POOL_ID" \
--account-id="$BRAZE_AWS_ACCOUNT_ID"
# Optional: restrict the provider to your principal
gcloud iam workload-identity-pools providers update-aws "$PROVIDER_ID" \
--project="$PROJECT_ID" --location="global" --workload-identity-pool="$POOL_ID" \
--attribute-condition="assertion.arn == '${BRAZE_PRINCIPAL_ARN}'"
# Skip if you already have a service account for Braze
gcloud iam service-accounts create "$SA_NAME" \
--project="$PROJECT_ID" --display-name="Braze CDI"
gcloud iam service-accounts add-iam-policy-binding "$SA_EMAIL" \
--project="$PROJECT_ID" \
--role="roles/iam.workloadIdentityUser" \
--member="principal://iam.googleapis.com/projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/${POOL_ID}/subject/${BRAZE_PRINCIPAL_ARN}"
トラブルシューティング
設定がワークスペース以外のIDを信頼している
接続テストが以下のエラーで失敗します:
Your workload identity pool trusts every Braze customer, not only this workspace. Braze authenticated against it with a test identity (000000000000000000000000) that belongs to no Braze workspace, and your Google Cloud project accepted it, so another Braze customer could read this data. Grant the Workload Identity User role on your service account to the full Braze principal shown on the credential screen (principal://…/subject/<full ARN>) rather than to the role (principalSet://…/attribute.aws_role/…); restricting the pool provider’s attribute condition to that same principal works as well. Then test the connection again.
これは、ステップ8で説明されているように、Googleがトークン交換とサービスアカウントのなりすましの両方でBrazeテストIDを受け入れたことを意味します。このエラーは通常、サービスアカウントがプール内のすべてのIDまたはaws_roleでフィルターされたIDにアクセス権を付与している場合に発生します。
このエラーを修正するには:
- Google Cloudコンソールでサービスアカウントを開き、Permissionsタブを選択します。
- Workload Identity Userロールを持ち、
principalSet://で始まり、プールを参照しているすべてのプリンシパルを見つけます。それぞれからロールを削除します。 - ステップ5のとおり、完全なプリンシパルにロールが付与されていることを確認します。
- IAM & Admin > IAMに移動し、プールに対するプロジェクトレベルのWorkload Identity User付与を確認します。見つかった場合は削除します。
- 接続を再テストします。
別の方法として、プロバイダーをプリンシパルに制限する(オプション)で説明されているように、プロバイダーの属性条件を完全なプリンシパルに制限します。これにより、Googleはトークン交換の段階で他のすべてのIDを拒否します。それでも、完全なプリンシパルのみにアクセス権を付与することをお勧めします。
Brazeがプールがこのワークスペースのみを信頼していることを確認できなかった
接続テストが以下のエラーで失敗します:
Braze could not confirm that your workload identity pool trusts only this workspace. The check needs Google to explicitly refuse an identity that is not yours, and this attempt failed for another reason instead. Please try again; if it keeps happening, contact support.
ステップ8のBrazeチェックが結果に到達しませんでした。たとえば、ネットワークエラーやGoogle Cloudの一時的なエラーによりチェックが中断されました。このエラーは、設定の範囲が広すぎることを意味するものではありません。接続を再テストしてください。エラーが続く場合は、Brazeサポートにお問い合わせください。
Brazeがサービスアカウントになりすます際の権限拒否
接続テストがiam.serviceAccounts.getAccessTokenの権限エラーで失敗します。以下を確認してください:
- サービスアカウントのPermissionsタブに、同じワークスペースのBigQueryまたはGCS認証情報フォームからコピーしたBrazeプリンシパルARN全体で終わるプリンシパルのWorkload Identity Userロールが表示されている。
- IAM Service Account Credentials APIが有効になっている。
- アクセス権付与後、数分待っている。
トークン交換が拒否される
接続テストがGoogle Security Token Serviceのトークン交換で失敗します。以下を確認してください:
- Brazeに入力したプロジェクト番号、プールID、プロバイダーIDがGoogle Cloudの設定と一致している。
- プロバイダーのAWSアカウントIDがBrazeプリンシパルARN内のアカウントIDと一致している。
- 属性条件を設定した場合、コピーしたとおりの完全なプリンシパルARNが含まれている。
- カスタム許可オーディエンスを設定した場合、プロバイダーの完全なリソース名が含まれている。
- プールとプロバイダーが有効になっている。