Data Manager API از رمزگذاری دادهها بااستفاده از سرویسهای مدیریت کلید زیر پشتیبانی میکند:
پشتیبانی از برخی موارد استفاده براساس سرویس مدیریت کلید (KMS) متفاوت است:
| دسته | کاربرد | Google Cloud KMS | AWS KMS |
|---|---|---|---|
| مخاطبان | ارسال اعضای مخاطب | ||
| رویدادها | تبدیلهای آفلاین یا تبدیلهای بهبودیافته برای مشتریان بالقوه | ||
| رویدادها | تبدیلهای فروش فروشگاهی Google Ads | ||
| رویدادها | تبدیلهای چندمنبعی Google Ads | ||
| رویدادها | رویدادهای چندمنبعی Google Analytics |
راهاندازی 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 نشاندهنده تاریخ و زمانی است که اولین چرخش باید انجام شود.
برای مثال، برای چرخش کلید هر ۳۰ روز یکبار و انجام اولین چرخش در ۱ هفته، 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 Federation را ببینید.
یک استخر هویت حجم کاری (WIP) ایجاد کنید.
locationبرای استخر بایدglobalباشد.gcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"برای اطلاعات بیشتر، مدیریت ارائهدهندگان و مخزنهای هویت حجم کاری را ببینید.
ارائهدهنده استخر هویت حجم کاری ایجاد کنید. آرگومان
--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"به
ArnزیرKeyMetadataدر برونداد توجه کنید. در مراحل دیگر به این نام منبع Amazon (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
ارائهدهنده هویت OpenID Connect (OIDC) ایجاد کنید. فقط یکبار باید این مرحله را برای هر حساب AWS انجام دهید.
aws iam create-open-id-connect-provider \
--url https://confidentialcomputing.googleapis.com \
--client-id-list AUDIENCE \
--thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"
ARN ارائهدهنده OIDC را از خروجی یادداشت کنید. در مراحل دیگر به این مورد نیاز خواهید داشت.
AWS_OIDC_PROVIDER_ARN
ایجاد خطمشی IAM
فایل JSON با نام
kms-decrypt-policy.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به ARN خطمشی IAM در خروجی توجه کنید. در مراحل دیگر به این مورد نیاز خواهید داشت.
AWS_IAM_POLICY_ARN
ایجاد و پیوست کردن نقش IAM
فایل JSON با نام
role-trust-policy.jsonبا محتوای زیر و ARN ارائهدهنده OIDC از مرحله قبل ایجاد کنید:{ "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.jsonخطمشی نقش را به خطمشی IAM پیوست کنید.
aws iam attach-role-policy \ --role-name "AWS_IAM_ROLE_NAME" \ --policy-arn "AWS_IAM_POLICY_ARN"
رمزگذاری دادهها
رمزگذاری در Data Manager API به کلید رمزگذاری داده (DEK) نیاز دارد. DEK کلیدی متقارن است که از آن برای رمزگذاری دادهها استفاده میکنید. «کلید رمزگذاری داده» شما بااستفاده از کلید رمزگذاری کلید (KEK) Google Cloud یا AWS KMS رمزگذاری میشود. DEK رمزگذاریشده، URI مربوط به KEK، و ارائهدهنده WIP را بهعنوان بخشی از درخواست ارسال میکنید.
برای آمادهسازی دادهها در درخواست رمزگذاری، همان دستورالعملهای قالببندی و درهمسازی را که برای دادههای رمزگذارینشده استفاده میکنید دنبال کنید.
مقادیر درهمسازینشده را رمزگذاری نکنید. برای مثال، region_code،
postal_code، city، یا administrative_area
AddressInfo را درهمسازی نکنید.
وقتی دادههای هر فیلد قالببندی و درهمسازی شد، مقدار درهمسازیشده را بااستفاده از مراحل زیر رمزگذاری کنید:
بایتهای درهمسازی را بااستفاده از کدبندی Base64 کدبندی کنید.
درهمسازی کدبندیشده با Base64 را بااستفاده از DEK خود رمزگذاری کنید. چون رمز لازم
XCHACHA20_POLY1305است، تابعencrypt()Tink به پارامتر داده مرتبط نیاز دارد. این پارامتر باید خالی باشد (برای مثال،b""در Python یاnew byte[0]در Java). اگرnullیا مقدار غیرخالی را ارسال کنید، Data Manager API نمیتواند دادهها را رمزگشایی کند.خروجی فرایند رمزگذاری را بااستفاده از کدبندی hex یا 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 برای ساختن
و ارسال درخواست،
نمونه کد IngestAudienceMembers
برای Java یا
نمونه کد ingest_audience_members
برای Python را ببینید.
بررسی عیبیابی برای مشکلات رمزگذاری
پساز بارگذاری دادههای رمزگذاریشده، از عیبیابی برای بررسی
هشدارهای مربوط به رمزگذاری، مانند
PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED یا
PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR استفاده کنید. به هرگونه هشدار در عیبیابی رسیدگی کنید، درخواستها را دوباره ارسال کنید، و بررسی کنید که عیبیابی پساز تغییرات شما دیگر هشداری برنگرداند.