Bu kılavuz, Data Manager API üretim dağıtımınız için uygun kimlik doğrulama yaklaşımını seçmenize ve yapılandırmanıza yardımcı olur.
Dağıtım senaryonuzu seçme
Uygulama mimarinize ve dağıtım ortamınıza uygun kimlik doğrulama yaklaşımını seçin:
- Google Cloud'daki iş yükleri: Compute Engine, Cloud Run, Cloud Functions veya GKE'de çalışan otomatik iş yükleri (ör. ETL işlem hatları, toplu işler veya arka uç hizmetleri) için eklenmiş bir hizmet hesabıyla Uygulama Varsayılan Kimlik Bilgileri (ADC)'ni ya da GKE için Workload Identity Federasyonu'nu kullanın.
- Google Cloud dışındaki iş yükleri: Şirket içinde veya diğer bulut sağlayıcılarda çalışan otomatik iş yükleri için Workload Identity Federasyonu veya hizmet hesabı anahtarı ile Uygulama Varsayılan Kimlik Bilgileri'ni (ADC) kullanın.
- Kullanıcılar adına işlem yapma: Harici kullanıcıların (ör. platformunuza kaydolan reklamverenler) hesaplarını yöneten üçüncü taraf platformları ve çok kiracılı uygulamalar için kullanıcı başına yenileme jetonları içeren OAuth 2.0 web sunucusu akışını veya onaylı bir veri iş ortağıysanız iş ortağı bağlantılarını kullanın.
Google Cloud kimlik doğrulamasıyla ilgili genel bilgiler için Google Cloud kimlik doğrulama karar ağacına bakın.
Google Cloud'daki iş yükleri
Google Cloud'da çalışırken doğrudan işlem kaynağınıza bir hizmet hesabı ekleyin veya GKE için Workload Identity Federasyonu'nu yapılandırın. İstemci kitaplıkları, kimlik bilgisi dosyaları veya ortam değişkenleri gerektirmeden hizmet hesabının kısa süreli kimlik bilgilerini otomatik olarak almak için ADC'yi kullanır.
Compute Engine
Sanal makine örneği oluştururken hizmet hesabını ve Data Manager API kapsamını belirtin. Böylece, örnek meta veri sunucusu tarafından döndürülen erişim jetonları gerekli yetkilendirmeyi içerir.
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"
Mevcut bir örnekteki kapsamları veya hizmet hesabını güncellemek için örneği durdurun, yapılandırmayı set-service-account ile güncelleyin ve örneği yeniden başlatın:
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
Hizmeti dağıtırken hizmet hesabını belirtin:
gcloud run deploy SERVICE_NAME \
--image="IMAGE_URL" \
--service-account="SERVICE_ACCOUNT_EMAIL"
Cloud Functions
İşlevi dağıtırken hizmet hesabını belirtin:
gcloud functions deploy FUNCTION_NAME \
--service-account="SERVICE_ACCOUNT_EMAIL" \
--runtime="RUNTIME" \
--trigger-http
GKE
- Kümenizde GKE için Workload Identity Federasyonu'nu etkinleştirin.
Kubernetes hizmet hesabınızı (KSA) Google hizmet hesabına (GSA) bağlayın:
# 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}"Kubernetes hizmet hesabına Google hizmet hesabı e-posta adresiyle ek açıklama ekleyin:
kubectl annotate serviceaccount KUBERNETES_SA_NAME \ --namespace="KUBERNETES_NAMESPACE" \ iam.gke.io/gcp-service-account="SERVICE_ACCOUNT_EMAIL"Pod spesifikasyonunuzda Kubernetes hizmet hesabını belirtin:
apiVersion: v1 kind: Pod metadata: name: data-manager-worker spec: serviceAccountName: KUBERNETES_SA_NAME containers: - name: worker image: IMAGE_URL
IAM ve hesap erişimini doğrulama
Üretim uygulamanızı dağıtmadan önce hizmet hesabınızın gerekli izinlere sahip olduğunu doğrulayın:
Google Cloud IAM izinleri: Hizmet hesabına, Data Manager API'nin etkinleştirildiği Google Cloud projesinde Service Usage Consumer (Hizmet Kullanımı Tüketicisi) rolünü (
roles/serviceusage.serviceUsageConsumer) verin.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/serviceusage.serviceUsageConsumer"Hedef hesap erişimi: Hizmet hesabına hedef hesaplarınız için gerekli erişimi verin. Adım adım talimatlar için Hesap erişimini ayarlama başlıklı makaleyi inceleyin.
Google Cloud dışındaki iş yükleri
Şirket içi veri merkezlerinde veya diğer bulut sağlayıcılarda kod çalıştırırken aşağıdaki kimlik doğrulama mekanizmalarından birini seçin:
Workload Identity Federasyonu (Önerilen): Uygulamanızın, harici kimlik sağlayıcınızdaki kimlik bilgilerini kısa süreli Google Cloud kimlik bilgileriyle değiştirmesine olanak tanımak için Workload Identity Federasyonu'nu yapılandırın. Bu işlem için hizmet hesabı anahtarlarını yönetmeniz gerekmez. Bir kimlik bilgisi yapılandırma dosyası oluşturun ve
GOOGLE_APPLICATION_CREDENTIALSortam değişkenini kullanarak bu dosyayı ADC'ye sağlayın.Hizmet hesabı anahtarları (Yedek): Workload Identity Federation kullanılamıyorsa bir hizmet hesabı anahtarı oluşturun ve
GOOGLE_APPLICATION_CREDENTIALSortam değişkenini kullanarak ADC'ye sağlayın.
GOOGLE_APPLICATION_CREDENTIALS ayarla
İstemci kitaplıklarının ADC'yi kullanarak kimlik bilgilerinizi otomatik olarak bulabilmesi için GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini Workload Identity Federasyonu kimlik bilgisi yapılandırma dosyasının veya hizmet hesabı anahtar dosyasının mutlak yoluna ayarlayın.
Linux / macOS
Kabuk profilinizde veya dağıtım komut dosyanızda ortam değişkenini ayarlayın:
export GOOGLE_APPLICATION_CREDENTIALS=\
"/path/to/credentials.json"
Windows (PowerShell)
PowerShell'de ortam değişkenini ayarlayın:
$env:GOOGLE_APPLICATION_CREDENTIALS = `
"C:\path\to\credentials.json"
Docker / Kapsayıcılar
Kimlik bilgileri dosyasını kapsayıcıya bağlayın ve ortam değişkenini ayarlayın:
ENV GOOGLE_APPLICATION_CREDENTIALS="/secrets/credentials.json"
Alternatif olarak, ortam değişkenini çalışma zamanında iletebilirsiniz:
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
Kimlik bilgilerini Secret olarak bağlayın ve pod'un ortamında referans verin:
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
REST ve curl isteklerinin kimliğini doğrulama
Otomatik ardışık düzeniniz, istemci kitaplığı kullanmak yerine curl ile ham HTTP istekleri gönderiyorsa Google Cloud KSA'yı kullanarak jetonları manuel olarak imzalamadan etkileşimli olmayan bir şekilde kimlik doğrulayın ve erişim jetonlarını yönetin:
Ortamınızda yapılandırılan kimlik bilgisi dosyasını kullanarak Google Cloud CLI'yı yetkilendirin:
gcloud auth login --cred-file="${GOOGLE_APPLICATION_CREDENTIALS}"Oluşturulan erişim jetonunu API isteklerinizin
Authorizationüstbilgisinde iletin: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, erişim jetonunu otomatik olarak önbelleğe alır ve süresi dolmadan önce yeniler.
IAM ve hesap erişimini doğrulama
Üretim uygulamanızı dağıtmadan önce hizmet hesabınızın gerekli izinlere sahip olduğunu doğrulayın:
Google Cloud IAM izinleri: Hizmet hesabına, Data Manager API'nin etkinleştirildiği Google Cloud projesinde Service Usage Consumer (Hizmet Kullanımı Tüketicisi) rolünü (
roles/serviceusage.serviceUsageConsumer) verin.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/serviceusage.serviceUsageConsumer"Hedef hesap erişimi: Hizmet hesabına hedef hesaplarınıza erişim için gerekli izinleri verin. Adım adım talimatlar için Hesap erişimini ayarlama başlıklı makaleyi inceleyin.
Kullanıcılar adına işlem yapma
Pazarlama platformları ve ajanslar gibi üçüncü taraf platformların, hizmetlerine kaydolan birden fazla reklamveren adına API istekleri göndermesi gerekir.
Bu mimaride, Uygulama Varsayılan Kimlik Bilgileri'ni kullanmak yerine her reklamverenden çevrimdışı erişimle kullanıcı kimlik bilgilerini almak için OAuth 2.0 Web Sunucusu akışını kullanın. Ardından, isteğin hangi reklamveren hesabını yönettiğine bağlı olarak çalışma zamanında istemci kitaplığını yapılandırmak için bu kimlik bilgilerini kullanın.
OAuth 2.0 web akışını uygulama
Çok kiracılı uygulamalar için kullanıcı yetkilendirmesini şu şekilde ayarlayabilirsiniz:
Çevrimdışı erişim isteğinde bulunma: Kullanıcıları,
https://www.googleapis.com/auth/datamanagerkapsamınıaccess_type=offlineveprompt=consentile isteyen Google'ın OAuth kullanıcı rızası ekranına yönlendirin. Sunucunuz, yetkilendirme kodunu bir erişim jetonu verefresh_tokenile değiştirir. Adım adım talimatlar için Web Sunucusu Uygulamaları için OAuth 2.0 başlıklı makaleye bakın.Kimlik bilgilerini güvenli bir şekilde saklayın: Her kullanıcının yenileme jetonunu, platformunuzdaki hesabıyla ilişkili şifrelenmiş bir kimlik bilgisi deposunda güvenli bir şekilde saklayın.
İstemci kitaplıklarını çalışma zamanında ilk kullanıma hazırlama: Belirli bir kullanıcı adına API isteği gönderirken kullanıcı için depoladığınız yenileme jetonundan ve uygulamanızın istemci kimliği ile istemci gizli anahtarından kullanıcı kimlik bilgilerini oluşturun ve istemciyi ilk kullanıma hazırlarken bunları iletin:
.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();Git
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
OAuth uygulama doğrulamasını tamamlama
Data Manager API kapsamları hassas kapsamlar olduğundan, harici Google Hesaplarından kullanıcı kimlik bilgilerini almak için kullanılan tüm Google Cloud uygulamalarının üretime geçmeden önce Google OAuth doğrulamasından geçmesi gerekir:
- Geliştirme: Google Cloud Console'daki Kitle sayfasında uygulamanın yayınlanma durumu Test olarak ayarlanmışken yalnızca belirlenmiş test hesapları uygulamanızı yetkilendirebilir.
- Üretim: Uygulamanızı harici kullanıcıların kullanımına sunmadan önce yayınlama durumunu Üretimde olarak ayarlayın ve uygulamayı doğrulamaya gönderin.
Hizmet hesapları kullanılarak çalıştırılan iş yükleri için uygulama doğrulaması gerekmez. Ayrıca, dahili uygulamalar gibi senaryolar için bazı istisnalar vardır. Ayrıntılar için Doğrulama ne zaman gerekli değildir? başlıklı makaleyi inceleyin.
Alternatif: İş ortağı bağlantıları
Kuruluşunuz onaylı bir veri iş ortağıysa devam eden veri kullanımı için kullanıcı başına OAuth jetonlarını yönetmek yerine iş ortağı bağlantılarını kullanabilirsiniz.
İş ortağı bağlantıları sayesinde reklamverenler, hesaplarını Google Ads, Display & Video 360 veya Google Ad Manager kullanıcı arayüzündeki veri iş ortağı hesabınıza bağlar. Bağlantı oluşturulduktan sonra uygulamanız, ADC aracılığıyla kendi hizmet hesabı kimlik bilgilerini kullanarak alım istekleri gönderir. Böylece uzun süreli kullanıcı yenileme jetonlarını depolama ve bakımını yapma ihtiyacı ortadan kalkar.
Üretimle ilgili en iyi uygulamalar
Üretime geçerken aşağıdaki önemli operasyonel hususları gözden geçirin:
- Hata işleme ve doğrulama: API'nin, hızlı hata modelini kullanarak istekleri nasıl doğruladığını ve yapılandırılmış hata ayrıntılarını nasıl döndürdüğünü öğrenin.
- Yeniden deneme stratejisi: Geçici sunucu hataları için eksponansiyel geri yüklemeyi jitter ile uygulayın.
- Toplu işleme ve eşzamanlılık: Kayıtları toplu işleyerek ve istekleri sınırlar içinde eşzamanlı olarak göndererek verimi en üst düzeye çıkarın.
- Teşhis ve izleme: Yanıt isteği kimliklerini yakalayın ve eşzamansız işlemeyi doğrulamak, uyarıları ve hataları tespit etmek için teşhis hizmetini sorgulayın.