رابط برنامهنویسی کاربردی مدیریت داده (Data Manager API) از رمزگذاری دادهها با استفاده از سرویسهای مدیریت کلید زیر پشتیبانی میکند:
پشتیبانی برای برخی موارد استفاده، بسته به سرویس مدیریت کلید (KMS) متفاوت است:
| دسته بندی | مورد استفاده | سیستم مدیریت دانش گوگل کلود | AWS KMS |
|---|---|---|---|
| مخاطبان | ارسال اعضای مخاطب | ||
| رویدادها | تبدیلهای آفلاین یا تبدیلهای بهبود یافته برای سرنخها | ||
| رویدادها | رویدادهایی که به عنوان منبع داده اضافی به مقصد تبلیغات گوگل ارسال میشوند | ||
| رویدادها | رویدادهایی که به عنوان منبع داده اضافی به مقصد Google Analytics ارسال میشوند |
راهاندازی Google Cloud KMS
در اینجا مراحل تنظیم منابع Google Cloud KMS برای رمزگذاری آمده است.
رابط خط فرمان Google Cloud را تنظیم کنید
رابط خط فرمان Google Cloud را نصب و راهاندازی کنید .
برای انتخاب یا ایجاد یک پروژه جدید Google Cloud و فعال کردن سرویس مدیریت کلید ابری ، روی فعال کردن Cloud KMS کلیک کنید.
فعال کردن KMS ابریبرای تنظیم پروژه خود در محیط خود، از دستور
gcloud config setاستفاده کنید. برای بررسی اینکه آیا پروژه از قبل در محیط شما تنظیم شده است یا خیر، دستورgcloud config listاجرا کنید.اگر هیچ
projectتنظیم نشده است، یا میخواهید از پروژه دیگری برای کلید خود استفاده کنید،gcloud config setاجرا کنید:gcloud config set project PROJECT_ID
ایجاد یک کلید
برای اطلاعات بیشتر، به نمای کلی سرویس مدیریت کلید ابری مراجعه کنید.
یک حلقه کلید درست کنید.
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 است. برای اطلاعات بیشتر، به 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"اگر میخواهید دادههای رویداد را برای تبدیلهای آفلاین و تبدیلهای پیشرفته برای سرنخها رمزگذاری کنید، نقش رمزگشایی کلیدی را به حساب سرویس گوگل
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 تنظیم کنید و وارد سیستم شوید
ایجاد یک کلید
یک کلید KMS متقارن (KEK) ایجاد کنید.
aws kms create-key \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT \ --description "KEK for Confidential Matching Data Encryption"به
Arnدر زیرKeyMetadataدر خروجی توجه کنید. در مراحل دیگر به این Amazon Resource Name (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با محتوای زیر و ارائه دهنده OIDC به نام ARN از مرحله قبل ایجاد کنید:{ "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 یک کلید متقارن است که شما برای رمزگذاری دادهها از آن استفاده میکنید. DEK شما با استفاده از کلید Google Cloud یا AWS KMS شما رمزگذاری میشود. شما DEK رمزگذاری شده را به عنوان بخشی از درخواست ارسال میکنید.
برای آمادهسازی دادهها در درخواست رمزگذاری، همان دستورالعملهای قالببندی و هش کردن را که برای دادههای رمزگذاری نشده استفاده میکنید، دنبال کنید.
مقادیر هش نشده را رمزگذاری نکنید. برای مثال، region_code یا postal_code مربوط به AddressInfo .
پس از قالببندی و هش کردن دادههای هر فیلد، مقدار هش شده را با استفاده از مراحل زیر رمزگذاری کنید:
- بایتهای هش را با استفاده از کدگذاری Base64 کدگذاری کنید.
- هش کدگذاری شده با Base64 را با استفاده از DEK خود رمزگذاری کنید.
- خروجی حاصل از فرآیند رمزگذاری را با استفاده از کدگذاری هگز یا 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 جهت ساخت و ارسال درخواست، به نمونه کد IngestAudienceMembersWithEncryption برای جاوا یا نمونه کد ingest_audience_members_with_encryption برای پایتون مراجعه کنید.