این راهنما به شما کمک میکند تا رویکرد احراز هویت مناسب را برای استقرار تولید API Data Manager خود انتخاب و پیکربندی کنید.
سناریوی استقرار خود را انتخاب کنید
رویکرد احراز هویتی را انتخاب کنید که با معماری برنامه و محیط استقرار شما مطابقت داشته باشد:
- بارهای کاری در Google Cloud : برای بارهای کاری خودکار (مانند خطوط لوله ETL، کارهای دستهای یا سرویسهای backend) که روی Compute Engine، Cloud Run، Cloud Functions یا GKE اجرا میشوند، از Application Default Credentials (ADC) با یک حساب سرویس متصل یا Workload Identity Federation برای GKE استفاده کنید.
- بارهای کاری خارج از Google Cloud : برای بارهای کاری خودکار که در محل یا روی سایر ارائه دهندگان ابری اجرا میشوند، از اعتبارنامههای پیشفرض برنامه (ADC) به همراه فدراسیون هویت بار کاری یا یک کلید حساب سرویس استفاده کنید.
- از طرف کاربران عمل کنید : برای پلتفرمهای شخص ثالث و برنامههای چند مستأجری که حسابهای کاربران خارجی (مانند تبلیغکنندگانی که در پلتفرم شما ثبتنام میکنند) را مدیریت میکنند، از جریان وب سرور OAuth 2.0 با توکنهای بهروزرسانی برای هر کاربر یا اگر شریک داده تأیید شده هستید، از لینکهای شریک استفاده کنید.
برای راهنمایی کلی در مورد احراز هویت Google Cloud، به درخت تصمیم احراز هویت Google Cloud مراجعه کنید.
حجم کار در فضای ابری گوگل
هنگام اجرا روی Google Cloud، یک حساب سرویس را مستقیماً به منبع محاسباتی خود متصل کنید یا فدراسیون هویت بار کاری را برای GKE پیکربندی کنید. کتابخانههای کلاینت از ADC برای بازیابی خودکار اعتبارنامههای کوتاهمدت برای حساب سرویس بدون نیاز به فایلهای اعتبارنامه یا متغیرهای محیطی استفاده میکنند.
موتور محاسباتی
هنگام ایجاد یک نمونه ماشین مجازی، حساب سرویس و محدوده API مدیریت داده را مشخص کنید تا توکنهای دسترسی که توسط سرور ابرداده نمونه برگردانده میشوند، شامل مجوز مورد نیاز باشند.
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"
برای بهروزرسانی محدودهها یا حساب سرویس در یک نمونه موجود، نمونه را متوقف کنید، پیکربندی را با set-service-account بهروزرسانی کنید و نمونه را مجدداً راهاندازی کنید:
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
اجرای ابری
هنگام استقرار سرویس، حساب کاربری سرویس را مشخص کنید:
gcloud run deploy SERVICE_NAME \
--image="IMAGE_URL" \
--service-account="SERVICE_ACCOUNT_EMAIL"
توابع ابری
هنگام استقرار تابع، حساب سرویس را مشخص کنید:
gcloud functions deploy FUNCTION_NAME \
--service-account="SERVICE_ACCOUNT_EMAIL" \
--runtime="RUNTIME" \
--trigger-http
جی کی ای
- فدراسیون هویت بار کاری (Workload Identity Federation) را برای GKE در کلاستر خود فعال کنید.
حساب سرویس Kubernetes (KSA) خود را به حساب سرویس 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}"حساب سرویس Kubernetes را با ایمیل حساب سرویس گوگل حاشیهنویسی کنید:
kubectl annotate serviceaccount KUBERNETES_SA_NAME \ --namespace="KUBERNETES_NAMESPACE" \ iam.gke.io/gcp-service-account="SERVICE_ACCOUNT_EMAIL"حساب سرویس Kubernetes را در مشخصات پاد خود مشخص کنید:
apiVersion: v1 kind: Pod metadata: name: data-manager-worker spec: serviceAccountName: KUBERNETES_SA_NAME containers: - name: worker image: IMAGE_URL
تأیید IAM و دسترسی به حساب
قبل از استقرار برنامه کاربردی خود، تأیید کنید که حساب کاربری سرویس شما مجوزهای لازم را دارد:
مجوزهای IAM گوگل کلود : در پروژه گوگل کلود که رابط برنامهنویسی کاربردی مدیریت داده (Data Manager API) در آن فعال است، به حساب سرویس، نقش مصرفکنندهی استفاده از سرویس (
roles/serviceusage.serviceUsageConsumer) را اعطا کنید.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/serviceusage.serviceUsageConsumer"دسترسی به حساب مقصد : به حساب سرویس، دسترسی لازم به حسابهای مقصد خود را اعطا کنید. برای دستورالعملهای گام به گام، به تنظیم دسترسی به حساب مراجعه کنید.
حجم کاری خارج از فضای ابری گوگل
هنگام اجرای کد در مراکز داده داخلی یا سایر ارائه دهندگان ابر، یکی از مکانیسمهای احراز هویت زیر را انتخاب کنید:
فدراسیون هویت بار کاری (توصیه شده) : فدراسیون هویت بار کاری را پیکربندی کنید تا برنامه شما بتواند بدون مدیریت کلیدهای حساب سرویس، اعتبارنامهها را از ارائهدهنده هویت خارجی شما برای اعتبارنامههای کوتاهمدت Google Cloud مبادله کند. یک فایل پیکربندی اعتبارنامه ایجاد کنید و آن را با استفاده از متغیر محیطی
GOOGLE_APPLICATION_CREDENTIALSدر اختیار ADC قرار دهید.Service account keys (Fallback) : If Workload Identity Federation is not available, create a service account key and provide it to ADC using the
GOOGLE_APPLICATION_CREDENTIALSenvironment variable.
تنظیم GOOGLE_APPLICATION_CREDENTIALS
متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS را روی مسیر مطلق فایل پیکربندی اعتبارنامه Workload Identity Federation یا فایل کلید حساب سرویس تنظیم کنید تا کتابخانههای کلاینت بتوانند اعتبارنامههای شما را به طور خودکار با استفاده از ADC پیدا کنند.
لینوکس / مکاواس
متغیر محیطی را در پروفایل پوسته یا اسکریپت استقرار خود تنظیم کنید:
export GOOGLE_APPLICATION_CREDENTIALS=\
"/path/to/credentials.json"
ویندوز (پاورشل)
متغیر محیطی را در PowerShell تنظیم کنید:
$env:GOOGLE_APPLICATION_CREDENTIALS = `
"C:\path\to\credentials.json"
داکر / کانتینرها
فایل اعتبارنامهها را در کانتینر نصب کنید و متغیر محیطی را تنظیم کنید:
ENV GOOGLE_APPLICATION_CREDENTIALS="/secrets/credentials.json"
یا متغیر محیطی را در زمان اجرا ارسال کنید:
HOST_CREDS="/host/path/credentials.json"
docker run -e GOOGLE_APPLICATION_CREDENTIALS="/secrets/credentials.json" \
-v "${HOST_CREDS}:/secrets/credentials.json:ro" \
IMAGE_NAME
کوبرنتس
اعتبارنامهها را به عنوان یک راز (Secret) مانت کنید و آن را در محیط پاد ارجاع دهید:
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 و curl را احراز هویت کنید
اگر خط لوله خودکار شما به جای استفاده از کتابخانه کلاینت، درخواستهای خام HTTP را با curl ارسال میکند، از رابط خط فرمان گوگل کلود (Google Cloud CLI) برای احراز هویت غیر تعاملی و مدیریت توکنهای دسترسی بدون امضای دستی توکنها استفاده کنید:
با استفاده از فایل اعتبارنامه پیکربندیشده در محیط خود، رابط خط فرمان گوگل کلود (Google Cloud CLI) را تأیید کنید:
gcloud auth login --cred-file="${GOOGLE_APPLICATION_CREDENTIALS}"توکن دسترسی تولید شده را در هدر
Authorizationدرخواستهای API خود قرار دهید:curl -X POST "https://datamanager.googleapis.com/v1/..." \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d @request.jsonرابط خط فرمان گوگل کلود (Google Cloud CLI) به طور خودکار توکن دسترسی را ذخیره کرده و قبل از انقضا آن را بهروزرسانی میکند.
تأیید IAM و دسترسی به حساب
قبل از استقرار برنامه کاربردی خود، تأیید کنید که حساب کاربری سرویس شما مجوزهای لازم را دارد:
مجوزهای IAM گوگل کلود : در پروژه گوگل کلود که رابط برنامهنویسی کاربردی مدیریت داده (Data Manager API) در آن فعال است، به حساب سرویس، نقش مصرفکنندهی استفاده از سرویس (
roles/serviceusage.serviceUsageConsumer) را اعطا کنید.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/serviceusage.serviceUsageConsumer"دسترسی به حساب مقصد : به حساب سرویس، دسترسی لازم به حسابهای مقصد خود را اعطا کنید. برای دستورالعملهای گام به گام، به تنظیم دسترسی به حساب مراجعه کنید.
از طرف کاربران عمل کنید
پلتفرمهای شخص ثالث مانند پلتفرمهای بازاریابی و آژانسها اغلب نیاز دارند درخواستهای API را از طرف چندین تبلیغکننده که برای خدماتشان ثبتنام میکنند، ارسال کنند.
در این معماری، به جای استفاده از اعتبارنامههای پیشفرض برنامه، از جریان وب سرور OAuth 2.0 برای دریافت اعتبارنامههای کاربر با دسترسی آفلاین از هر تبلیغکننده استفاده کنید و سپس از آن اعتبارنامهها برای پیکربندی کتابخانه کلاینت در زمان اجرا بر اساس حساب تبلیغکنندهای که درخواست مدیریت میکند، استفاده کنید.
پیادهسازی جریان وب OAuth 2.0
در اینجا نحوه تنظیم واگذاری اختیارات کاربر برای برنامههای چند مستاجری آمده است:
درخواست دسترسی آفلاین : کاربران را به صفحه رضایت OAuth گوگل هدایت کنید و با استفاده
access_type=offlineوprompt=consent، محدودهhttps://www.googleapis.com/auth/datamanagerرا درخواست کنید. سرور شما کد مجوز را با یک توکن دسترسی و یکrefresh_tokenجایگزین میکند. برای دستورالعملهای گام به گام، به OAuth 2.0 برای برنامههای وب سرور مراجعه کنید.ذخیره امن اعتبارنامهها : توکن بهروزرسانی هر کاربر را به صورت امن در یک مخزن اعتبارنامه رمزگذاریشده مرتبط با حساب کاربری او در پلتفرم خود ذخیره کنید.
مقداردهی اولیه کتابخانههای کلاینت در زمان اجرا : هنگام ارسال درخواست API از طرف یک کاربر خاص، اعتبارنامههای کاربر را از توکن refresh که برای کاربر ذخیره کردهاید و شناسه کلاینت و رمز کلاینت برای برنامه خود بسازید و هنگام مقداردهی اولیه کلاینت، آنها را ارسال کنید:
دات نت
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();برو
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))جاوا
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... }نود جی اس
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});پی اچ پی
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]);پایتون
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)روبی
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
از آنجا که https://www.googleapis.com/auth/datamanager یک محدوده حساس است، هر برنامه Google Cloud که برای دریافت اعتبارنامههای کاربر از حسابهای Google خارجی استفاده میشود، باید قبل از رفتن به مرحله تولید، تأیید اعتبار Google OAuth را انجام دهد:
- توسعه : در حالی که وضعیت انتشار برنامه در صفحه مخاطبان در کنسول ابری گوگل روی «در حال آزمایش » تنظیم شده است، فقط حسابهای آزمایشی تعیینشده میتوانند برنامه شما را تأیید کنند.
- تولید : قبل از اینکه برنامه خود را در دسترس کاربران خارجی قرار دهید، وضعیت انتشار را روی «در حال تولید» تنظیم کنید و برنامه را برای تأیید ارسال کنید .
تأیید برنامه برای بارهای کاری که با استفاده از حسابهای سرویس اجرا میشوند، لازم نیست. علاوه بر این، استثنائاتی برای سناریوهایی مانند برنامههای داخلی وجود دارد. برای جزئیات بیشتر، به بخش «چه زمانی تأیید لازم نیست» مراجعه کنید.
جایگزین: لینکهای همکار
اگر سازمان شما یک شریک داده تأیید شده است، میتوانید به جای مدیریت توکنهای OAuth به ازای هر کاربر، برای دریافت مداوم دادهها، از لینکهای شریک استفاده کنید.
با لینکهای شریک، تبلیغکنندگان حسابهای خود را به حساب شریک داده شما در Google Ads، Display & Video 360 یا Google Ad Manager UI متصل میکنند. پس از ایجاد لینک، برنامه شما درخواستهای جذب را با استفاده از اعتبارنامههای حساب سرویس شما از طریق ADC ارسال میکند و از نیاز به ذخیره و نگهداری توکنهای بهروزرسانی کاربر با طول عمر بالا جلوگیری میکند.
بهترین شیوههای تولید
هنگام انتقال به مرحله تولید، این ملاحظات عملیاتی کلیدی را بررسی کنید:
- مدیریت خطا و اعتبارسنجی : درک کنید که چگونه API با استفاده از مدل fast-fail درخواستها را اعتبارسنجی میکند و جزئیات خطای ساختاریافته را برمیگرداند.
- استراتژی تلاش مجدد : برای خطاهای گذرای سرور، backoff نمایی را با jitter پیادهسازی کنید.
- دستهبندی و همزمانی : با دستهبندی رکوردها و ارسال همزمان درخواستها در محدوده مشخص، توان عملیاتی را به حداکثر برسانید.
- تشخیص و نظارت : شناسههای درخواست پاسخ را ثبت کرده و از سرویس تشخیص درخواست کنید تا پردازش ناهمزمان را تأیید کرده و هشدارها و خطاها را تشخیص دهد.