داده های مشترک در حال استفاده را با فضای محرمانه ایمن کنید

1. بررسی اجمالی

Confidential Space به اشتراک گذاری و همکاری امن داده های چند جانبه را ارائه می دهد، در حالی که به سازمان ها اجازه می دهد محرمانه بودن داده های خود را حفظ کنند. این بدان معناست که سازمان ها می توانند با یکدیگر همکاری کنند و در عین حال کنترل داده های خود را حفظ کرده و از دسترسی غیرمجاز محافظت کنند.

Confidential Space سناریوهایی را باز می کند که در آن می خواهید ارزش متقابلی را از جمع آوری و تجزیه و تحلیل داده های حساس، اغلب تنظیم شده، به دست آورید، در حالی که کنترل کامل روی آن ها را حفظ کنید. با فضای محرمانه، سازمان‌ها می‌توانند ارزش متقابلی را از جمع‌آوری و تجزیه و تحلیل داده‌های حساس مانند اطلاعات شناسایی شخصی (PII)، اطلاعات بهداشتی محافظت‌شده (PHI)، مالکیت معنوی و اسرار رمزنگاری به دست آورند - در حالی که کنترل کامل روی آن‌ها را حفظ می‌کنند.

آنچه شما نیاز دارید

چیزی که یاد خواهید گرفت

  • نحوه پیکربندی منابع Cloud لازم برای اجرای Confidential Space
  • نحوه اجرای حجم کار در یک ماشین مجازی محرمانه که تصویر ماشین مجازی فضای محرمانه را اجرا می کند
  • نحوه مجوز دسترسی به منابع محافظت شده بر اساس ویژگی‌های کد حجم کاری ( چی )، محیط فضای محرمانه ( جایی ) و حسابی که حجم کار را اجرا می‌کند ( چه کسی ).

در این کد لبه شما یک فضای محرمانه بین بانک Primus و Secundus ایجاد می کنید تا مشتریان مشترک آنها را بدون اشتراک گذاری لیست حساب های کامل با یکدیگر تعیین کنید. این شامل مراحل زیر است:

  • مرحله 1: منابع ابری مورد نیاز را برای بانک های Primus و Secundus تنظیم کنید. این منابع ابری شامل سطل‌های ذخیره‌سازی ابری، کلیدهای KMS، استخرهای هویت حجم کاری و حساب‌های خدمات برای بانک‌های Primus و Secundus هستند. Primus Bank و Secundus Bank داده‌های مشتریان خود را در سطل‌های Cloud Storage ذخیره می‌کنند و آنها داده‌ها را با استفاده از کلیدهای سرویس Cloud Key Management رمزگذاری می‌کنند.
  • مرحله 2: یک حساب سرویس بار کاری ایجاد کنید که توسط VM حجم کاری استفاده می شود. بانک سکوندوس که اپراتور حجم کار خواهد بود، حجم کار VM را راه اندازی خواهد کرد. بانک Primus کد حجم کار را می نویسد.
  • مرحله 3: یک بار کاری ایجاد کنید که شامل دو دستور CLI است، یکی برای شمارش مشتریان از محل ارائه شده و دیگری برای یافتن مشتریان مشترک بانک Primus و Secundus. حجم کار توسط Primus Bank نوشته شده و به عنوان یک تصویر Docker بسته بندی می شود. این تصویر داکر در آرتیفکت رجیستری منتشر خواهد شد.
  • مرحله 4: مجوز حجم کاری. بانک پریموس از یک مخزن هویت حجم کار استفاده می‌کند تا به بارهای کاری اجازه دسترسی به داده‌های مشتریانشان را بر اساس ویژگی‌هایی که حجم کاری را انجام می‌دهند، حجم کاری و مکانی که حجم کاری در حال اجرا است، بدهد، استفاده می‌کند.
  • مرحله 5: هنگامی که بار کاری اجرا می‌شود، با ارائه یک توکن سرویس تأییدکننده گواهی با ادعاهای حجم کار و محیط، درخواست دسترسی به منابع ابری همکاران داده (بانک Primus و Secundus Bank) می‌کند. اگر ادعاهای اندازه‌گیری حجم کاری در توکن با شرایط ویژگی موجود در مخزن‌های هویت بار کاری بانک‌های Primus و Secundus مطابقت داشته باشد، نشانه دسترسی به حساب سرویس را که مجوز دسترسی به منابع ابری مربوطه را دارد، برمی‌گرداند. منابع ابری فقط برای حجم کاری در حال اجرا در فضای محرمانه قابل دسترسی خواهند بود.
  • مرحله 5 (الف): اولین بار کاری را اجرا کنید که مشتریان Primus Bank را از مکان های خاص محاسبه می کند. برای این حجم کاری، بانک Primus یک همکار داده و نویسنده حجم کاری خواهد بود که فهرست مشتریان رمزگذاری شده را در اختیار حجم کاری در حال اجرا در فضای محرمانه قرار می دهد. Secundus Bank یک اپراتور حجم کار خواهد بود و حجم کار را در یک فضای محرمانه اجرا می کند.
  • مرحله 5 (ب): بار دوم را اجرا کنید که مشتریان مشترک بانک های Primus و Secundus را پیدا می کند. برای این حجم کاری، Primus Bank و Secundus Bank هر دو همکار داده خواهند بود. آنها لیست های مشتریان رمزگذاری شده را به حجم کاری در حال اجرا در فضای محرمانه ارائه می کنند. بانک سکوندوس دوباره یک اپراتور حجم کار خواهد بود. این حجم کاری توسط بانک سکوندوس نیز مجاز خواهد بود زیرا حجم کار باید به لیست مشتریان رمزگذاری شده بانک سکوندوس نیز برای یافتن مشتریان معمولی دسترسی داشته باشد. در این مورد، بانک سکوندوس به حجم کاری اجازه می‌دهد تا به داده‌های مشتریان خود بر اساس ویژگی‌هایی از اینکه چه کسی حجم کار را اجرا می‌کند، چه کاری انجام می‌دهد و حجم کاری در کجا اجرا می‌شود، همانطور که در مرحله 4 برای بانک Primus ذکر شد، دسترسی پیدا کند.

fdef93a6868a976.png

2. راه اندازی منابع ابری

قبل از شروع

  • این مخزن را با استفاده از دستور زیر کلون کنید تا اسکریپت های مورد نیازی که به عنوان بخشی از این کد لبه استفاده می شود را دریافت کنید.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
  • دایرکتوری این کد لبه را تغییر دهید.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
  • اطمینان حاصل کنید که متغیرهای محیط پروژه مورد نیاز را مطابق شکل زیر تنظیم کرده اید. برای اطلاعات بیشتر در مورد ایجاد یک پروژه GCP، لطفاً به این کد لبه مراجعه کنید. می توانید برای دریافت جزئیات در مورد نحوه بازیابی شناسه پروژه و تفاوت آن با نام پروژه و شماره پروژه به این موضوع مراجعه کنید.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
gcloud services enable \
    cloudapis.googleapis.com \
    cloudkms.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudshell.googleapis.com \
    container.googleapis.com \
    containerregistry.googleapis.com \
    iam.googleapis.com \
    confidentialcomputing.googleapis.com
  • با استفاده از این دستور متغیرها را برای نام منابع همانطور که در زیر ذکر شده است تنظیم کنید. می توانید با استفاده از این متغیرها نام منابع را لغو کنید (به عنوان مثال export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket' )
  • می توانید متغیرهای زیر را با نام منابع ابری موجود در پروژه Primus تنظیم کنید. اگر متغیر تنظیم شده باشد، منبع ابری مربوطه از پروژه Primus استفاده خواهد شد. اگر متغیر تنظیم نشده باشد، نام منبع ابری از نام پروژه ایجاد می‌شود و منبع ابری جدید به عنوان بخشی از موارد زیر ایجاد می‌شود:

$PRIMUS_INPUT_STORAGE_BUCKET

سطلی که فایل اطلاعات مشتریان بانک پریموس را ذخیره می کند.

$PRIMUS_WORKLOAD_IDENTITY_POOL

مجموعه شناسایی حجم کاری (WIP) بانک Primus که ادعاها را تأیید می کند.

$PRIMUS_WIP_PROVIDER

ارائه‌دهنده مجموعه شناسایی حجم کاری Primus Bank که شامل شرایط مجوز برای استفاده برای نشانه‌هایی است که توسط سرویس تأییدکننده گواهی امضا شده‌اند.

$PRIMUS_SERVICE_ACCOUNT

حساب سرویس Primus Bank که $PRIMUS_WORKLOAD_IDENTITY_POOL از آن برای دسترسی به منابع محافظت شده استفاده می کند. در این مرحله اجازه مشاهده داده های مشتری که در سطل $PRIMUS_INPUT_STORAGE_BUCKET ذخیره شده است را دارد.

$PRIMUS_ENC_KEY

کلید KMS برای رمزگذاری داده های ذخیره شده در $PRIMUS_INPUT_STORAGE_BUCKET برای بانک Primus استفاده می شود.

$PRIMUS_ENC_KEYRING

کلید KMS که برای ایجاد کلید رمزگذاری $PRIMUS_ENC_KEY برای بانک Primus استفاده خواهد شد.

$PRIMUS_ARTIFACT_REPOSITORY

مخزن مصنوع که در آن بار کاری تصویر Docker تحت فشار قرار می گیرد.

  • می توانید متغیرهای زیر را با نام منابع ابری موجود در پروژه Secundus تنظیم کنید. اگر متغیر تنظیم شده باشد، منبع ابری مربوطه از پروژه سکوندوس استفاده خواهد شد. اگر متغیر تنظیم نشده باشد، نام منبع ابری از نام پروژه و منبع ابری جدید به عنوان بخشی از موارد زیر ایجاد می شود:

$SECUNDUS_INPUT_STORAGE_BUCKET

سطلی که فایل اطلاعات مشتریان بانک سکوندوس را ذخیره می کند

$SECUNDUS_WORKLOAD_IDENTITY_POOL

مجموعه شناسایی حجم کاری (WIP) بانک سکوندوس که ادعاها را تأیید می کند.

$SECUNDUS_WIP_PROVIDER

ارائه‌دهنده مخزن هویت حجم کاری بانک Secundus که شامل شرایط مجوز برای استفاده از نشانه‌های امضا شده توسط سرویس تأییدکننده گواهی است.

$SECUNDUS_SERVICE_ACCOUNT

حساب خدمات بانک سکوندوس که $SECUNDUS_WORKLOAD_IDENTITY_POOL از آن برای دسترسی به منابع محافظت شده استفاده می کند. در این مرحله اجازه مشاهده داده‌های مشتری ذخیره شده در سطل $SECUNDUS_INPUT_STORAGE_BUCKET را دارد.

$SECUNDUS_ENC_KEY

کلید KMS که برای رمزگذاری داده های ذخیره شده در $SECUNDUS_INPUT_STORAGE_BUCKET برای بانک سکوندوس استفاده می شود.

$SECUNDUS_ENC_KEYRING

کلید KMS که برای ایجاد کلید رمزگذاری $SECUNDUS_ENV_KEY برای بانک سکوندوس استفاده می شود.

$SECUNDUS_RESULT_STORAGE_BUCKET

سطلی که حجم کار را ذخیره می کند نتیجه می گیرد.

$WORKLOAD_IMAGE_NAME

نام تصویر محفظه بار کاری.

$WORKLOAD_IMAGE_TAG

برچسب تصویر ظرف حجم کاری.

$WORKLOAD_SERVICE_ACCOUNT

حساب سرویسی که اجازه دسترسی به VM محرمانه را دارد که حجم کار را اجرا می کند.

  • مصنوعات کمی به عنوان بخشی از این کد لبه استفاده می شود که در زیر ذکر شده است:
  • primus_customer_list.csv : فایلی که حاوی اطلاعات مشتریان بانک پریموس است. در اینجا فایل نمونه استفاده شده در این کد لبه وجود دارد.
  • secundus_customer_list.csv : فایلی که حاوی اطلاعات مشتریان بانک سکوندوس است. در اینجا فایل نمونه استفاده شده در این کد لبه وجود دارد.
  • برای این دو پروژه به مجوزهای خاصی نیاز دارید:
  • برای $PRIMUS_PROJECT_ID ، به Cloud KMS Admin، Storage Admin، Artifact Registry Administrator، Service Account Admin، IAM Workload Identity Pool Admin نیاز دارید.
  • برای $SECUNDUS_PROJECT_ID ، به سرپرست محاسبات، سرپرست فضای ذخیره‌سازی، سرپرست حساب سرویس، سرپرست Cloud KMS، سرپرست IAM حجم کار Identity Pool، سرپرست امنیت (اختیاری) نیاز دارید.
  • اسکریپت زیر را اجرا کنید تا نام متغیرهای باقیمانده را بر اساس شناسه پروژه خود برای نام منابع تنظیم کنید.
source config_env.sh

منابع ابری را برای بانک پریموس تنظیم کنید

منابع ابری زیر برای بانک Primus مورد نیاز است. این اسکریپت را برای تنظیم منابع Primus Bank اجرا کنید:

  • سطل ذخیره سازی ابری ( $PRIMUS_INPUT_STORAGE_BUCKET ) برای ذخیره فایل رمزگذاری شده اطلاعات مشتری بانک Primus.
  • کلید رمزگذاری ( $PRIMUS_ENC_KEY ) و کلید ( $PRIMUS_ENC_KEYRING ) در KMS برای رمزگذاری فایل اطلاعات مشتری Primus Bank.
  • مجموعه شناسایی حجم کاری ( $PRIMUS_WORKLOAD_IDENTITY_POOL ) برای اعتبارسنجی ادعاها بر اساس شرایط ویژگی‌هایی که تحت ارائه‌دهنده آن پیکربندی شده‌اند.
  • حساب سرویس ( $PRIMUS_SERVICE_ACCOUNT ) متصل به مخزن هویت بار کاری ذکر شده ( $PRIMUS_WORKLOAD_IDENTITY_POOL ) به رمزگشایی داده‌ها با استفاده از کلید KMS (با استفاده از roles/cloudkms.cryptoKeyDecrypter )، خواندن داده‌ها از سطل ذخیره‌سازی ابری (با استفاده از نقش objectViewer ) دسترسی دارد. اتصال حساب سرویس به مخزن هویت حجم کاری (با استفاده از roles/iam.workloadIdentityUser ).
./setup_primus_bank_resources.sh

منابع ابری را برای بانک سکوندوس تنظیم کنید

برای بانک سکوندوس، منابع ابری زیر مورد نیاز است. این اسکریپت را برای تنظیم منابع بانک سکوندوس اجرا کنید. به عنوان بخشی از این مراحل منابع ذکر شده در زیر ایجاد خواهد شد:

  • سطل ذخیره سازی ابری ( $SECUNDUS_INPUT_STORAGE_BUCKET ) برای ذخیره فایل رمزگذاری شده اطلاعات مشتری بانک سکوندوس.
  • کلید رمزگذاری ( $SECUNDUS_ENC_KEY ) و کلید ( $SECUNDUS_ENC_KEYRING ) در KMS برای رمزگذاری فایل داده بانک سکوندوس.
  • مجموعه شناسایی حجم کاری ( $SECUNDUS_WORKLOAD_IDENTITY_POOL ) برای اعتبارسنجی ادعاها بر اساس شرایط ویژگی‌هایی که تحت ارائه‌دهنده آن پیکربندی شده‌اند.
  • حساب سرویس ( $SECUNDUS_SERVICE_ACCOUNT ) متصل به مخزن هویت بار کاری ذکر شده در بالا ( $SECUNDUS_WORKLOAD_IDENTITY_POOL ) به رمزگشایی داده‌ها با استفاده از کلید KMS (با استفاده از roles/cloudkms.cryptoKeyDecrypter )، خواندن داده‌ها از سطل ذخیره‌سازی ابری (با استفاده از rolewer) و objectViewer دارد. اتصال حساب سرویس به مخزن هویت حجم کاری (با استفاده از roles/iam.workloadIdentityUser نقش).
  • سطل ذخیره سازی ابری ( $SECUNDUS_RESULT_STORAGE_BUCKET ) برای ذخیره نتیجه اجرای حجم کاری توسط بانک سکوندوس.
./setup_secundus_bank_resources.sh

3. بار کاری ایجاد کنید

ایجاد حساب سرویس حجم کاری

اکنون، یک حساب کاربری سرویس برای حجم کاری با نقش ها و مجوزهای مورد نیاز همانطور که در زیر ذکر شده است ایجاد خواهید کرد. اسکریپت زیر را برای ایجاد یک حساب خدمات بار کاری در پروژه Secundus Bank اجرا کنید. VM که حجم کار را اجرا می کند از این حساب سرویس استفاده می کند.

این حساب سرویس حجم کاری ( $WORKLOAD_SERVICE_ACCOUNT ) نقش های زیر را خواهد داشت:

  • نقش confidentialcomputing.workloadUser را به حساب سرویس بار کاری اعطا کنید. این به حساب کاربری اجازه می‌دهد تا یک توکن تصدیق تولید کند.
  • نقش logging.logWriter را به مجوز حساب سرویس بار کاری اعطا کنید. این اجازه می دهد تا محیط Confidential Space علاوه بر کنسول سریال، گزارش هایی را در Cloud Logging بنویسد، بنابراین گزارش ها پس از پایان VM در دسترس هستند.
  • objectViewer برای خواندن داده ها از سطل ذخیره سازی ابری $PRIMUS_INPUT_STORAGE_BUCKET .
  • objectViewer برای خواندن داده ها از $SECUNDUS_INPUT_STORAGE_BUCKET سطل ذخیره سازی ابری.
  • objectAdmin برای نوشتن نتیجه بار کاری در سطل ذخیره سازی ابری $SECUNDUS_RESULT_STORAGE_BUCKET .
./create_workload_service_account.sh

حجم کار ایجاد کنید

به عنوان بخشی از این مرحله، یک تصویر Docker برای حجم کاری مورد استفاده در این کد لبه ایجاد خواهید کرد. حجم کار یک برنامه ساده GoLang است که:

  • مشتریان را در یک مکان جغرافیایی مشخص شمارش می کند.
  • مشتریان مشترک Primus و Secundus Bank را از لیست مشتریان ذخیره شده در سطل های ذخیره سازی ابری مربوطه آنها پیدا می کند.

اسکریپت زیر را اجرا کنید تا یک بار کاری ایجاد کنید که در آن مراحل زیر در حال انجام است:

  • ایجاد رجیستری مصنوع ( $PRIMUS_ARTIFACT_REPOSITORY ) متعلق به بانک Primus که در آن حجم کار منتشر می شود.
  • کد را ایجاد کنید و آن را با نام منابع مورد نیاز به روز کنید. کد حجم کاری مورد استفاده در این کد لبه را می توانید در اینجا بیابید.
  • کد را بسازید و آن را در یک تصویر داکر بسته بندی کنید. Dockerfile مربوطه را می توانید در اینجا پیدا کنید.
  • تصویر Docker را در رجیستری مصنوع ( $PRIMUS_ARTIFACT_REGISTRY ) متعلق به بانک Primus منتشر کنید.
  • به حساب سرویس $WORKLOAD_SERVICE_ACCOUNT مجوز خواندن برای رجیستری مصنوع ( $PRIMUS_ARTIFACT_REGISTRY ) اعطا کنید.
./create_workload.sh

4. مجوز و اجرای حجم کاری (های)

مجوز بار کاری

بانک پریموس می‌خواهد به بارهای کاری اجازه دسترسی به داده‌های مشتریان خود را بر اساس ویژگی‌های منابع زیر بدهد:

  • چه : کدی که تأیید شده است
  • کجا : محیطی که امن است
  • Who : اپراتور مورد اعتماد

Primus از فدراسیون هویت Workload برای اعمال خط مشی دسترسی بر اساس این الزامات استفاده می کند.

فدراسیون هویت بار کاری به شما امکان می دهد شرایط ویژگی را مشخص کنید. این شرایط محدود می‌کند که کدام هویت‌ها می‌توانند با استخر شناسایی حجم کاری (WIP) احراز هویت شوند. می‌توانید برای ارائه اندازه‌گیری‌ها و اجرای خط‌مشی، سرویس تأییدکننده گواهی را به عنوان ارائه‌دهنده مجموعه هویت حجم کاری به WIP اضافه کنید.

مجموعه هویت بار کاری قبلاً به عنوان بخشی از مرحله تنظیم منابع ابری ایجاد شده بود. اکنون بانک پریموس یک ارائه‌دهنده استخر شناسایی حجم کار جدید OIDC ایجاد خواهد کرد. --attribute-condition مشخص شده اجازه دسترسی به محفظه بار کاری را می دهد. مستلزم این است:

  • چه چیزی : آخرین $WORKLOAD_IMAGE_NAME آپلود شده در مخزن $PRIMUS_ARTIFACT_REPOSITORY .
  • کجا : محیط اجرای مورد اعتماد فضای محرمانه روی تصویر کاملاً پشتیبانی شده از فضای مجازی مجازی محرمانه در حال اجرا است.
  • چه کسی : حساب خدمات $WORKLOAD_SERVICE_ACCOUNT Secundus Bank.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' && 
   'STABLE' in assertion.submods.confidential_space.support_attributes &&
   assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' && 
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

مشابه WIP ایجاد شده برای Primus Bank، Secundus Bank می‌خواهد به بارهای کاری اجازه دهد تا به داده‌های مشتریان خود بر اساس موارد زیر دسترسی داشته باشند:

  • چه چیزی : حجم کار
  • کجا : محیط فضای محرمانه.
  • چه کسی : حساب ( $WORKLOAD_SERVICE_ACCOUNT ) که حجم کار را اجرا می کند.

بانک Primus از ادعای image_reference ، که شامل برچسب تصویر است، استفاده می کند تا تعیین کند که آیا باید اجازه دسترسی را بدهد یا خیر. آنها مخزن از راه دور را کنترل می کنند، بنابراین می توانند مطمئن باشند که فقط تصاویری را برچسب گذاری می کنند که داده های آنها درز نمی کند.

در مقایسه، بانک سکوندوس مخزنی را که در آن تصویر را دریافت می کند کنترل نمی کند، بنابراین آنها نمی توانند با خیال راحت چنین فرضی را بکنند. درعوض، آنها انتخاب می‌کنند که دسترسی به حجم کاری را براساس image_digest آن مجاز کنند. برخلاف image_reference ، که بانک پریموس می‌توانست آن را تغییر دهد تا به تصویر دیگری اشاره کند، بانک پریموس نمی‌تواند image_digest به تصویری غیر از تصویری که بانک سکوندوس در مرحله قبلی حسابرسی کرده بود، ارجاع دهد.

قبل از ایجاد ارائه‌دهندگان مخزن هویت بار کاری، image_digest را برای تصویر محفظه بار کاری جمع‌آوری می‌کنیم که در شرایط ویژگی ارائه‌دهنده استفاده می‌شود.

export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG  --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$SECUNDUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' && 
'STABLE' in assertion.submods.confidential_space.support_attributes && 
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
 assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' && 
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

اجرای حجم کاری

به عنوان بخشی از این مرحله، بانک سکوندوس حجم کاری را روی فضای محرمانه اجرا خواهد کرد. این حجم کاری نشانه های دسترسی را از مخزن هویت بار کاری Primus و مخزن هویت حجم کاری Secundus برای خواندن و رمزگشایی داده های مشتری Primus Bank و Secundus Bank به ترتیب دریافت می کند.

آرگومان های TEE مورد نیاز با استفاده از پرچم ابرداده منتقل می شوند. آرگومان‌های محفظه حجم کاری با استفاده از بخش « tee-cmd » پرچم ارسال می‌شوند. نتیجه اجرای حجم کار در $SECUNDUS_RESULT_STORAGE_BUCKET منتشر خواهد شد.

اولین بار کاری را اجرا کنید

به عنوان بخشی از اولین اجرای بار کاری، حجم کار مشتریان بانک پریموس را از محل ارائه شده در آرگومان های کانتینر حجم کاری شمارش می کند. همانطور که در زیر نشان داده شده است، اولین بار دستور " count-location " را اجرا می کند و نتیجه در $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result ذخیره می شود.

gcloud compute instances create ${WORKLOAD_VM1} \
 --project=${SECUNDUS_PROJECT_ID} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]""

مشاهده نتایج

در پروژه سکوندوس، نتایج اولین بار را مشاهده کنید. 3-5 دقیقه صبر کنید تا حجم کار کامل شود و نتیجه در سطل ذخیره سازی ابری در دسترس باشد.

gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result

نتیجه باید 3 باشد، زیرا این تعداد افرادی از سیاتل است که در فایل primus_customer_list.csv فهرست شده اند!

بار دوم را اجرا کنید

به عنوان بخشی از اجرای بار دوم، مشتریان مشترک Primus Bank و Secundus Bank را خواهیم یافت. همانطور که در زیر نشان داده شده است، بار دوم دستور " list-common-customers " را اجرا می کند و نتیجه در $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count ذخیره می شود.

gcloud compute instances create ${WORKLOAD_VM2} \
 --project=${SECUNDUS_PROJECT_ID} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
  --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""

مشاهده نتایج

در پروژه سکوندوس، نتایج بار دوم را مشاهده کنید. 3-5 دقیقه صبر کنید تا حجم کار کامل شود و نتیجه در سطل ذخیره سازی ابری در دسترس باشد.

gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result

نتیجه باید لیست زیر باشد زیرا اینها مشتریان مشترک بین بانک Primus و Secundus هستند.

خروجی:

Eric
Clinton
Ashley
Cooper

بار کاری غیرمجاز را اجرا کنید

قرارداد Primus Bank که به بانک Secundus اجازه دسترسی به داده های آنها را می دهد منقضی می شود. بنابراین Primus Bank شرایط ویژگی خود را به روز می کند تا به VM ها اجازه دهد حساب خدمات شریک جدید خود، Tertius Bank را داشته باشند.

Primus Bank ارائه دهنده Workload Identity Pool را تغییر می دهد

در $PRIMUS_PROJECT_ID ، شرایط مشخصه را برای ارائه‌دهنده هویت تأییدکننده تأیید به‌روزرسانی کنید تا بارهای کاری را در یک مکان جدید مجاز کند.

  1. پروژه را روی $PRIMUS_PROJECT_ID تنظیم کنید.
gcloud config set project $PRIMUS_PROJECT_ID
  1. با استفاده از دستور زیر، GCP Project-Id بانک ترتیوس را صادر کنید. بعداً Primus Bank از این برای به‌روزرسانی شرایط ویژگی ارائه‌دهنده استخر هویت حجم کاری استفاده می‌کند. بانک پریموس اجازه دادن به حساب‌های خدمات بار کاری بانک سکوندوس را متوقف نخواهد کرد. اکنون به حساب های خدمات بار کاری بانک Tertius اجازه می دهد.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
  1. ارائه دهنده OIDC را در مخزن هویت حجم کاری به روز کنید. در اینجا '$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts به '$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts. به جای مجوز حساب خدمات حجم کاری از بانک سکوندوس، اکنون حساب خدمات حجم کاری از بانک ترتیوس مجاز خواهد بود.
gcloud iam workload-identity-pools providers update-oidc $PRIMUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' && 
   'STABLE' in assertion.submods.confidential_space.support_attributes &&
   assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' && 
'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

بار کاری را دوباره اجرا کنید

هنگامی که بانک سکوندوس تلاش می کند حجم کار اصلی را اجرا کند، با شکست مواجه می شود. برای مشاهده خطا، فایل اصلی نتایج و نمونه VM را حذف کنید و سپس دوباره سعی کنید بار کاری را اجرا کنید.

فایل نتایج موجود و نمونه VM را حذف کنید

  1. پروژه را روی پروژه $SECUNDUS_PROJECT_ID تنظیم کنید.
gcloud config set project $SECUNDUS_PROJECT_ID
  1. فایل نتایج را حذف کنید
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
  1. نمونه Confidential VM را حذف کنید.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}

بار کاری غیرمجاز را اجرا کنید:

gcloud compute instances create ${WORKLOAD_VM2} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE}\
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""

مشاهده خطا

به جای نتایج حجم کار، یک خطا مشاهده می کنید ( The given credential is rejected by the attribute condition ).

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result

مشابه این، اگر بانک Primus مخفیانه حجم کاری را تغییر دهد تا کل لیست مشتریان بانک سکوندوس را به سطلی که Primus Bank در اختیار دارد ارسال کند، این تلاش با شکست مواجه خواهد شد زیرا خلاصه حجم کار مخرب با خلاصه تصویری که در استخر شناسایی حجم کاری بانک سکوندوس مجاز بود متفاوت خواهد بود. .

5. پاکسازی کنید

در اینجا اسکریپتی است که می تواند برای پاکسازی منابعی که به عنوان بخشی از این کد لبه ایجاد کرده ایم استفاده شود. به عنوان بخشی از این پاکسازی، منابع زیر حذف خواهند شد:

  • سطل ذخیره‌سازی ابری ورودی Primus Bank ( $PRIMUS_INPUT_STORAGE_BUCKET) .
  • یک حساب خدماتی از بانک Primus ( $PRIMUS_SERVICE_ACCOUNT ).
  • رجیستری مصنوع از بانک Primus که امضاهای تصویر را در خود نگه می دارد ( $PRIMUS_COSIGN_REPOSITORY ).
  • مجموعه شناسایی حجم کاری بانک Primus ( $PRIMUS_WORKLOAD_IDENTITY_POOL ).
  • یک حساب خدمات بار کاری بانک Secundus ( $WORKLOAD_SERVICE_ACCOUNT ).
  • سطل ذخیره سازی ابری ورودی بانک سکوندوس ( $SECUNDUS_INPUT_STORAGE_BUCKET) .
  • یک حساب خدماتی از بانک سکوندوس ( $SECUNDUS_SERVICE_ACCOUNT ).
  • رجیستری مصنوع بانک Secundus که دارای امضاهای تصویری است ( $SECUNDUS_COSIGN_REPOSITORY ).
  • مجموعه هویت حجم کاری بانک سکوندوس ( $SECUNDUS_WORKLOAD_IDENTITY_POOL ).
  • یک حساب خدمات حجم کاری بانک Secundus ( $WORKLOAD_SERVICE_ACCOUNT ).
  • نمونه های محاسبه حجم کار
  • سطل ذخیره سازی نتیجه بانک سکوندوس ( $SECUNDUS_RESULT_STORAGE_BUCKET ).
  • مخزن مصنوع بانک Primus ( $PRIMUS_ARTIFACT_REPOSITORY ).
./cleanup.sh

اگر کاوش را تمام کرده اید، لطفاً پروژه خود را حذف کنید.

  • به کنسول Cloud Platform بروید.
  • پروژه‌ای را که می‌خواهید تعطیل کنید انتخاب کنید، سپس روی «حذف» در بالا کلیک کنید: با این کار، پروژه برای حذف برنامه‌ریزی می‌شود.

تبریک میگم

تبریک می‌گوییم، شما با موفقیت برنامه کد را تکمیل کردید!

شما یاد گرفتید که چگونه با استفاده از فضای محرمانه، داده های مشترک را ایمن کنید و در عین حال محرمانه بودن آنها را حفظ کنید.

بعدش چی؟

برخی از این کدهای مشابه را بررسی کنید...

در ادامه مطلب