Panduan ini membantu Anda memilih dan mengonfigurasi pendekatan autentikasi yang sesuai untuk deployment produksi Data Manager API Anda.
Pilih skenario deployment Anda
Pilih pendekatan autentikasi yang sesuai dengan arsitektur aplikasi dan lingkungan deployment Anda:
- Workload di Google Cloud: Untuk workload otomatis (seperti pipeline ETL, tugas batch, atau layanan backend) yang berjalan di Compute Engine, Cloud Run, Cloud Functions, atau GKE, gunakan Kredensial Default Aplikasi (ADC) dengan akun layanan terlampir atau Workload Identity Federation for GKE.
- Beban kerja di luar Google Cloud: Untuk beban kerja otomatis yang berjalan secara lokal atau di penyedia cloud lain, gunakan Kredensial Default Aplikasi (ADC) dengan Workload Identity Federation atau kunci akun layanan.
- Bertindak atas nama pengguna: Untuk platform pihak ketiga dan aplikasi multi-tenant yang mengelola akun untuk pengguna eksternal (seperti pengiklan yang mendaftar di platform Anda), gunakan alur Server Web OAuth 2.0 dengan token refresh per pengguna, atau link partner jika Anda adalah partner data yang disetujui.
Untuk panduan umum tentang autentikasi Google Cloud, lihat hierarki keputusan autentikasi Google Cloud.
Workload di Google Cloud
Saat berjalan di Google Cloud, lampirkan akun layanan langsung ke resource komputasi Anda atau konfigurasi Workload Identity Federation for GKE. Library klien menggunakan ADC untuk mengambil kredensial berumur pendek untuk akun layanan secara otomatis tanpa memerlukan file kredensial atau variabel lingkungan.
Compute Engine
Saat membuat instance virtual machine, tentukan akun layanan dan cakupan Data Manager API sehingga token akses yang ditampilkan oleh server metadata instance menyertakan otorisasi yang diperlukan.
gcloud compute instances create INSTANCE_NAME \
--service-account="SERVICE_ACCOUNT_EMAIL" \
--scopes="https://www.googleapis.com/auth/datamanager,https://www.googleapis.com/auth/cloud-platform"
Untuk memperbarui cakupan atau akun layanan pada instance yang ada, hentikan instance, perbarui konfigurasi dengan set-service-account, lalu mulai ulang instance:
gcloud compute instances stop INSTANCE_NAME
gcloud compute instances set-service-account \
INSTANCE_NAME \
--service-account="SERVICE_ACCOUNT_EMAIL" \
--scopes="https://www.googleapis.com/auth/datamanager,https://www.googleapis.com/auth/cloud-platform"
gcloud compute instances start INSTANCE_NAME
Cloud Run
Tentukan akun layanan saat men-deploy layanan:
gcloud run deploy SERVICE_NAME \
--image="IMAGE_URL" \
--service-account="SERVICE_ACCOUNT_EMAIL"
Cloud Functions
Tentukan akun layanan saat men-deploy fungsi:
gcloud functions deploy FUNCTION_NAME \
--service-account="SERVICE_ACCOUNT_EMAIL" \
--runtime="RUNTIME" \
--trigger-http
GKE
- Aktifkan Workload Identity Federation for GKE di cluster Anda.
Ikat Akun Layanan Kubernetes (KSA) Anda ke Akun Layanan Google (GSA):
# Define the Kubernetes service account member: KUBERNETES_MEMBER="serviceAccount:PROJECT_ID.svc.id.goog[KUBERNETES_NAMESPACE/KUBERNETES_SA_NAME]" # Grant the Workload Identity User role to the Kubernetes service account: gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_EMAIL \ --role="roles/iam.workloadIdentityUser" \ --member="${KUBERNETES_MEMBER}"Anotasikan Akun Layanan Kubernetes dengan email Akun Layanan Google:
kubectl annotate serviceaccount KUBERNETES_SA_NAME \ --namespace="KUBERNETES_NAMESPACE" \ iam.gke.io/gcp-service-account="SERVICE_ACCOUNT_EMAIL"Tentukan Akun Layanan Kubernetes dalam spesifikasi pod Anda:
apiVersion: v1 kind: Pod metadata: name: data-manager-worker spec: serviceAccountName: KUBERNETES_SA_NAME containers: - name: worker image: IMAGE_URL
Memverifikasi akses IAM dan akun
Sebelum men-deploy aplikasi produksi, pastikan akun layanan Anda memiliki izin yang diperlukan:
Izin IAM Google Cloud: Berikan peran Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) kepada akun layanan di project Google Cloud tempat Data Manager API diaktifkan.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/serviceusage.serviceUsageConsumer"Akses akun tujuan: Berikan akses yang diperlukan ke akun tujuan Anda untuk akun layanan. Untuk mengetahui petunjuk langkah demi langkah, lihat Menyiapkan akses akun.
Workload di luar Google Cloud
Saat menjalankan kode di pusat data lokal atau di penyedia cloud lain, pilih salah satu mekanisme autentikasi berikut:
Workload Identity Federation (Direkomendasikan): Konfigurasi Workload Identity Federation agar aplikasi Anda dapat menukar kredensial dari penyedia identitas eksternal Anda dengan kredensial Google Cloud berumur pendek tanpa mengelola kunci akun layanan. Buat file konfigurasi kredensial dan berikan ke ADC menggunakan variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALS.Kunci akun layanan (Penggantian): Jika Workload Identity Federation tidak tersedia, buat kunci akun layanan dan berikan ke ADC menggunakan variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALS.
Tetapkan GOOGLE_APPLICATION_CREDENTIALS
Tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ke jalur
absolut file konfigurasi kredensial Workload Identity Federation atau
file kunci akun layanan sehingga library klien dapat menemukan kredensial Anda
secara otomatis menggunakan ADC.
Linux / macOS
Tetapkan variabel lingkungan di profil shell atau skrip deployment Anda:
export GOOGLE_APPLICATION_CREDENTIALS=\
"/path/to/credentials.json"
Windows (PowerShell)
Tetapkan variabel lingkungan di PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS = `
"C:\path\to\credentials.json"
Docker / Container
Pasang file kredensial ke dalam container dan tetapkan variabel lingkungan:
ENV GOOGLE_APPLICATION_CREDENTIALS="/secrets/credentials.json"
Atau teruskan variabel lingkungan saat runtime:
HOST_CREDS="/host/path/credentials.json"
docker run -e GOOGLE_APPLICATION_CREDENTIALS="/secrets/credentials.json" \
-v "${HOST_CREDS}:/secrets/credentials.json:ro" \
IMAGE_NAME
Kubernetes
Pasang kredensial sebagai Secret dan referensikan di lingkungan pod:
apiVersion: v1
kind: Pod
metadata:
name: data-manager-worker
spec:
containers:
- name: worker
image: IMAGE_URL
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: "/etc/secrets/google/credentials.json"
volumeMounts:
- name: credentials-volume
mountPath: "/etc/secrets/google"
readOnly: true
volumes:
- name: credentials-volume
secret:
secretName: data-manager-credentials
Mengautentikasi permintaan REST dan curl
Jika pipeline otomatis Anda membuat permintaan HTTP mentah dengan curl, bukan menggunakan
library klien, gunakan Google Cloud CLI untuk melakukan autentikasi secara non-interaktif dan
mengelola token akses tanpa menandatangani token secara manual:
Beri otorisasi Google Cloud CLI menggunakan file kredensial yang dikonfigurasi di lingkungan Anda:
gcloud auth login --cred-file="${GOOGLE_APPLICATION_CREDENTIALS}"Teruskan token akses yang dihasilkan di header
Authorizationpermintaan API Anda:curl -X POST "https://datamanager.googleapis.com/v1/..." \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d @request.jsonGoogle Cloud CLI akan otomatis menyimpan token akses dalam cache dan memperbaruinya sebelum masa berlaku habis.
Memverifikasi akses IAM dan akun
Sebelum men-deploy aplikasi produksi, pastikan akun layanan Anda memiliki izin yang diperlukan:
Izin IAM Google Cloud: Berikan peran Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) kepada akun layanan di project Google Cloud tempat Data Manager API diaktifkan.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/serviceusage.serviceUsageConsumer"Akses akun tujuan: Berikan akses yang diperlukan ke akun tujuan Anda untuk akun layanan. Untuk mengetahui petunjuk langkah demi langkah, lihat Menyiapkan akses akun.
Bertindak atas nama pengguna
Platform pihak ketiga seperti platform dan agensi pemasaran sering kali perlu mengirim permintaan API atas nama beberapa pengiklan yang mendaftar ke layanan mereka.
Dalam arsitektur ini, alih-alih menggunakan Kredensial Default Aplikasi, gunakan alur Server Web OAuth 2.0 untuk mendapatkan kredensial pengguna dengan akses offline dari setiap pengiklan, lalu gunakan kredensial tersebut untuk mengonfigurasi library klien saat runtime berdasarkan akun pengiklan yang dikelola permintaan.
Menerapkan alur web OAuth 2.0
Berikut cara menyiapkan delegasi pengguna untuk aplikasi multi-tenant:
Meminta akses offline: Arahkan pengguna ke layar izin OAuth Google yang meminta cakupan
https://www.googleapis.com/auth/datamanagerdenganaccess_type=offlinedanprompt=consent. Server Anda menukar kode otorisasi dengan token akses danrefresh_token. Untuk petunjuk langkah demi langkah, lihat OAuth 2.0 untuk Aplikasi Server Web.Simpan kredensial dengan aman: Simpan token refresh setiap pengguna dengan aman di penyimpanan kredensial terenkripsi yang terkait dengan akun mereka di platform Anda.
Menginisialisasi library klien saat runtime: Saat mengirim permintaan API atas nama pengguna tertentu, buat kredensial pengguna dari token refresh yang Anda simpan untuk pengguna dan ID klien serta secret klien untuk aplikasi Anda, lalu teruskan saat menginisialisasi klien:
.NET
using Google.Ads.DataManager.V1; using Google.Apis.Auth.OAuth2; UserCredential credential = CredentialFactory.FromJsonParameters<UserCredential>( new JsonCredentialParameters { Type = JsonCredentialParameters.AuthorizedUserCredentialType, ClientId = clientId, ClientSecret = clientSecret, RefreshToken = refreshToken }); IngestionServiceClient client = new IngestionServiceClientBuilder { Credential = credential }.Build();Go
import ( "context" datamanager "cloud.google.com/go/datamanager/apiv1" "golang.org/x/oauth2" "golang.org/x/oauth2/google" "google.golang.org/api/option" ) cfg := &oauth2.Config{ ClientID: clientID, ClientSecret: clientSecret, Endpoint: google.Endpoint, } ts := cfg.TokenSource(ctx, &oauth2.Token{RefreshToken: refreshToken}) client, err := datamanager.NewIngestionClient(ctx, option.WithTokenSource(ts))Java
import com.google.ads.datamanager.v1.IngestionServiceClient; import com.google.ads.datamanager.v1.IngestionServiceSettings; import com.google.api.gax.core.FixedCredentialsProvider; import com.google.auth.oauth2.UserCredentials; UserCredentials credentials = UserCredentials.newBuilder() .setClientId(clientId) .setClientSecret(clientSecret) .setRefreshToken(refreshToken) .build(); IngestionServiceSettings settings = IngestionServiceSettings.newBuilder() .setCredentialsProvider(FixedCredentialsProvider.create(credentials)) .build(); try (IngestionServiceClient client = IngestionServiceClient.create(settings)) { // Send API requests using client... }Node.js
const {IngestionServiceClient} = require('@google-ads/datamanager').v1; const {UserRefreshClient} = require('google-auth-library'); const authClient = new UserRefreshClient({ clientId, clientSecret, refreshToken, }); const client = new IngestionServiceClient({authClient});PHP
use Google\Ads\DataManager\V1\Client\IngestionServiceClient; use Google\Auth\Credentials\UserRefreshCredentials; $credentials = new UserRefreshCredentials( null, [ 'client_id' => $clientId, 'client_secret' => $clientSecret, 'refresh_token' => $refreshToken, ] ); $client = new IngestionServiceClient(['credentials' => $credentials]);Python
from google.ads.datamanager_v1 import IngestionServiceClient from google.oauth2.credentials import Credentials credentials = Credentials.from_authorized_user_info({ "client_id": client_id, "client_secret": client_secret, "refresh_token": refresh_token, }) client = IngestionServiceClient(credentials=credentials)Ruby
require "google/ads/data_manager/v1" require "googleauth" credentials = Google::Auth::UserRefreshCredentials.new( client_id: client_id, client_secret: client_secret, refresh_token: refresh_token ) client = Google::Ads::DataManager::V1::IngestionService::Client.new do |config| config.credentials = credentials end
Menyelesaikan verifikasi aplikasi OAuth
Karena https://www.googleapis.com/auth/datamanager adalah cakupan sensitif, aplikasi Google Cloud apa pun yang digunakan untuk mendapatkan kredensial pengguna dari Akun Google eksternal harus menjalani verifikasi OAuth Google sebelum diluncurkan ke produksi:
- Pengembangan: Saat status publikasi aplikasi disetel ke Pengujian di halaman Audiens di Konsol Google Cloud, hanya akun pengujian yang ditetapkan yang dapat mengizinkan aplikasi Anda.
- Produksi: Sebelum membuat aplikasi Anda tersedia untuk pengguna eksternal, tetapkan status publikasi ke Dalam produksi dan kirimkan aplikasi untuk verifikasi.
Verifikasi aplikasi tidak diperlukan untuk workload yang berjalan menggunakan akun layanan. Selain itu, ada beberapa pengecualian untuk skenario seperti aplikasi internal. Lihat Kapan verifikasi tidak diperlukan untuk mengetahui detailnya.
Alternatif: Link partner
Jika organisasi Anda adalah partner data yang disetujui, Anda dapat menggunakan link partner, bukan mengelola token OAuth per pengguna untuk penyerapan data berkelanjutan.
Dengan link partner, pengiklan menghubungkan akun mereka ke akun partner data Anda di UI Google Ads, Display & Video 360, atau Google Ad Manager. Setelah penautan dibuat, aplikasi Anda mengirim permintaan penyerapan menggunakan kredensial akun layanan Anda sendiri melalui ADC, sehingga Anda tidak perlu menyimpan dan mempertahankan token refresh pengguna yang berlaku lama.
Praktik terbaik produksi
Tinjau pertimbangan operasional utama berikut saat beralih ke tahap produksi:
- Penanganan error dan validasi: Pahami cara API memvalidasi permintaan menggunakan model gagal cepat dan menampilkan detail error terstruktur.
- Strategi percobaan ulang: Terapkan backoff eksponensial dengan jitter untuk error server sementara.
- Batching dan konkurensi: Maksimalkan throughput dengan mengelompokkan kumpulan data dan mengirim permintaan secara serentak dalam batas.
- Diagnostik dan pemantauan: Ambil ID permintaan respons dan kueri layanan diagnostik untuk memverifikasi pemrosesan asinkron serta mendeteksi peringatan dan error.