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

۱. مرور کلی

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

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

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

آنچه یاد خواهید گرفت

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

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

  • مرحله ۱: منابع ابری مورد نیاز برای بانک‌های Primus و Secundus را تنظیم کنید. این منابع ابری شامل مخازن ذخیره‌سازی ابری، کلیدهای KMS، استخرهای هویت بار کاری و حساب‌های سرویس برای بانک‌های Primus و Secundus می‌شود. بانک‌های Primus و Secundus داده‌های مشتریان خود را در مخازن ذخیره‌سازی ابری ذخیره می‌کنند و داده‌ها را با استفاده از کلیدهای سرویس مدیریت کلید ابری رمزگذاری می‌کنند.
  • مرحله ۲: یک حساب کاربری سرویس بار کاری ایجاد کنید که توسط ماشین مجازی بار کاری استفاده خواهد شد. بانک Secundus که اپراتور بار کاری خواهد بود، ماشین مجازی بار کاری را راه‌اندازی خواهد کرد. بانک Primus کد بار کاری را می‌نویسد.
  • مرحله ۳: یک بار کاری ایجاد کنید که شامل دو دستور CLI باشد، یکی برای شمارش مشتریان از محل ارائه شده و دیگری برای یافتن مشتریان مشترک Primus و Secundus Bank. این بار کاری توسط Primus Bank ایجاد و به عنوان یک تصویر Docker بسته‌بندی می‌شود. این تصویر Docker در Artifact Registry منتشر خواهد شد.
  • مرحله ۴: مجوزدهی به یک بار کاری. بانک پریموس از یک مجموعه هویت بار کاری برای مجوزدهی به بارهای کاری جهت دسترسی به داده‌های مشتریان خود بر اساس ویژگی‌هایی مانند اینکه چه کسی بار کاری را اجرا می‌کند، بار کاری چه کاری انجام می‌دهد و بار کاری کجا اجرا می‌شود، استفاده می‌کند.
  • مرحله ۵: وقتی بار کاری اجرا می‌شود، با ارائه یک توکن سرویس Attestation Verifier به همراه ادعاهای بار کاری و محیطی، درخواست دسترسی به منابع ابری همکاران داده (بانک Primus و بانک Secundus) را می‌دهد. اگر ادعاهای اندازه‌گیری بار کاری در توکن با شرایط ویژگی در استخرهای هویت بار کاری بانک‌های Primus و Secundus مطابقت داشته باشد، توکن دسترسی حساب سرویس را که مجوز دسترسی به منابع ابری مربوطه را دارد، برمی‌گرداند. منابع ابری فقط برای بار کاری که در فضای محرمانه اجرا می‌شود، قابل دسترسی خواهند بود.
  • مرحله 5 (الف): اولین بار کاری را اجرا کنید که مشتریان بانک Primus را از مکان‌های خاص شمارش می‌کند. برای این بار کاری، بانک Primus یک همکار داده و نویسنده بار کاری خواهد بود که لیست مشتریان رمزگذاری شده را برای بار کاری که در فضای محرمانه اجرا می‌شود، فراهم می‌کند. بانک Secundus یک اپراتور بار کاری خواهد بود و بار کاری را در یک فضای محرمانه اجرا خواهد کرد.
  • مرحله 5 (ب): بار کاری دوم را اجرا کنید که مشتریان مشترک بانک‌های Primus و Secundus را پیدا می‌کند. برای این بار کاری، بانک Primus و بانک Secundus هر دو همکار داده خواهند بود. آنها لیست‌های رمزگذاری شده مشتریان را در اختیار بار کاری که در فضای محرمانه اجرا می‌شود، قرار می‌دهند. بانک Secundus دوباره یک اپراتور بار کاری خواهد بود. این بار کاری نیز توسط بانک Secundus مجاز خواهد بود زیرا بار کاری برای یافتن مشتریان مشترک باید به لیست‌های رمزگذاری شده مشتریان بانک Secundus نیز دسترسی داشته باشد. در این حالت، بانک Secundus بر اساس ویژگی‌های اینکه چه کسی بار کاری را اجرا می‌کند، بار کاری چه کاری انجام می‌دهد و بار کاری در کجا اجرا می‌شود، همانطور که در مرحله 4 برای بانک Primus ذکر شد، به بار کاری اجازه دسترسی به داده‌های مشتریان خود را می‌دهد.

fdef93a6868a976.png

۲. منابع ابری را تنظیم کنید

قبل از اینکه شروع کنی

  • برای دریافت اسکریپت‌های مورد نیاز که به عنوان بخشی از این آزمایشگاه کد استفاده می‌شوند، این مخزن را با استفاده از دستور زیر کلون کنید.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
  • دایرکتوری مربوط به این codelab را تغییر دهید.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
  • مطمئن شوید که متغیرهای محیطی مورد نیاز پروژه را مطابق شکل زیر تنظیم کرده‌اید. برای اطلاعات بیشتر در مورد ایجاد یک پروژه GCP، لطفاً به این codelab مراجعه کنید. می‌توانید برای کسب اطلاعات بیشتر در مورد نحوه بازیابی شناسه پروژه و تفاوت آن با نام پروژه و شماره پروژه، به این مراجعه کنید.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
  • فعال کردن صورتحساب برای پروژه‌هایتان
  • API محاسبات محرمانه و API های زیر را برای هر دو پروژه فعال کنید.
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 استفاده می‌شود. اگر متغیر تنظیم نشود، نام منبع ابری از project-name تولید می‌شود و منبع ابری جدید به عنوان بخشی از موارد زیر ایجاد می‌شود:

$PRIMUS_INPUT_STORAGE_BUCKET

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

$PRIMUS_WORKLOAD_IDENTITY_POOL

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

$PRIMUS_WIP_PROVIDER

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

$PRIMUS_SERVICE_ACCOUNT

حساب کاربری سرویس بانک Primus که $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

مخزن مصنوعات که ایمیج داکرِ حجم کار در آن قرار می‌گیرد.

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

$SECUNDUS_INPUT_STORAGE_BUCKET

باکتی که فایل داده‌های مشتری بانک Secundus را ذخیره می‌کند

$SECUNDUS_WORKLOAD_IDENTITY_POOL

مجموعه هویت بار کاری (WIP) بانک Secundus که ادعاها را تأیید می‌کند.

$SECUNDUS_WIP_PROVIDER

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

$SECUNDUS_SERVICE_ACCOUNT

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

$SECUNDUS_ENC_KEY

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

$SECUNDUS_ENC_KEYRING

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

$SECUNDUS_RESULT_STORAGE_BUCKET

باکتی که نتایج حجم کار را ذخیره می‌کند.

$WORKLOAD_IMAGE_NAME

نام تصویر کانتینر بار کاری.

$WORKLOAD_IMAGE_TAG

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

$WORKLOAD_SERVICE_ACCOUNT

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

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

راه‌اندازی منابع ابری برای بانک پریموس

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

  • مخزن ذخیره‌سازی ابری ( $PRIMUS_INPUT_STORAGE_BUCKET ) برای ذخیره فایل داده‌های رمزگذاری‌شده‌ی مشتریان بانک پریموس.
  • کلید رمزگذاری ( $PRIMUS_ENC_KEY ) و حلقه کلید ( $PRIMUS_ENC_KEYRING ) در KMS برای رمزگذاری فایل داده‌های مشتری بانک Primus.
  • Workload Identity Pool ( $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، منابع ابری زیر مورد نیاز است. این اسکریپت را اجرا کنید تا منابع بانک Secundus تنظیم شوند. به عنوان بخشی از این مراحل، منابع ذکر شده زیر ایجاد خواهند شد:

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

۳. ایجاد حجم کار

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

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

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

  • نقش confidentialcomputing.workloadUser را به حساب سرویس بارکاری اعطا کنید. این به حساب کاربری اجازه می‌دهد تا یک توکن گواهی (attestation token) ایجاد کند.
  • نقش 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

ایجاد حجم کار

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

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

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

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

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

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

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

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

پریموس از فدراسیون هویت بار کاری برای اجرای یک سیاست دسترسی بر اساس این الزامات استفاده می‌کند.

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

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

  • چه چیزی : آخرین $WORKLOAD_IMAGE_NAME آپلود شده در مخزن $PRIMUS_ARTIFACT_REPOSITORY .
  • که در آن : محیط اجرای قابل اعتماد Confidential Space بر روی تصویر ماشین مجازی Confidential Space که کاملاً پشتیبانی می‌شود، اجرا می‌شود.
  • چه کسی : حساب خدماتی $WORKLOAD_SERVICE_ACCOUNT بانک Secundus.
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، بانک Secundus می‌خواهد به بارهای کاری اجازه دسترسی به داده‌های مشتریان خود را بر اساس موارد زیر بدهد:

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

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

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

قبل از ایجاد ارائه‌دهندگان مخزن هویت بار کاری، 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"

حجم کار اجرا (ها)

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

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

اجرای اولین حجم کار

به عنوان بخشی از اجرای اولین بار کاری، بار کاری، مشتریان بانک Primus را از مکان ارائه شده در آرگومان‌های کانتینر بار کاری شمارش خواهد کرد. همانطور که در زیر نشان داده شده است، اولین بار کاری دستور " 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\"]""

مشاهده نتایج

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

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

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

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

به عنوان بخشی از اجرای بار کاری دوم، مشتریان مشترک بانک Primus و بانک Secundus را پیدا خواهیم کرد. همانطور که در زیر نشان داده شده است، بار کاری دوم دستور " 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\"]""

مشاهده نتایج

در پروژه Secundus، نتایج بار کاری دوم را مشاهده کنید. 3 تا 5 دقیقه صبر کنید تا بار کاری اجرا شود و نتیجه در مخزن ذخیره‌سازی ابری در دسترس قرار گیرد.

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

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

خروجی:

Eric
Clinton
Ashley
Cooper

اجرای حجم کار غیرمجاز

قرارداد بانک پریموس که به بانک سکندوس اجازه دسترسی به داده‌هایش را می‌داد، منقضی می‌شود. بنابراین بانک پریموس شرط ویژگی خود را به‌روزرسانی می‌کند تا به ماشین‌های مجازی اجازه دهد از حساب سرویس شریک جدیدشان، بانک ترتیوس، استفاده کنند.

بانک پریموس، ارائه‌دهنده‌ی Workload Identity Pool را تغییر می‌دهد

در $PRIMUS_PROJECT_ID ، شرط ویژگی را برای ارائه‌دهنده هویت Attestation Verifier به‌روزرسانی کنید تا بارهای کاری را در یک مکان جدید مجاز کند.

  1. پروژه را روی $PRIMUS_PROJECT_ID تنظیم کنید.
gcloud config set project $PRIMUS_PROJECT_ID
  1. با استفاده از دستور زیر، شناسه پروژه GCP بانک Tertius را صادر کنید. بعداً بانک Primus از این برای به‌روزرسانی وضعیت ویژگی ارائه‌دهنده استخر هویت بار کاری استفاده خواهد کرد. بانک Primus مجوزدهی حساب‌های سرویس بار کاری بانک Secundus را متوقف نخواهد کرد. اکنون به حساب‌های سرویس بار کاری بانک 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. به جای تأیید حساب سرویس بار کاری از بانک Secundus، اکنون حساب سرویس بار کاری از بانک Tertius تأیید خواهد شد.
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"

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

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

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

  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 مخفیانه بار کاری را تغییر دهد تا کل لیست مشتریان بانک Secundus را به یک باکت متعلق به بانک Primus ارسال کند، این تلاش شکست خواهد خورد زیرا خلاصه بار کاری مخرب با خلاصه تصویری که در Workload Identity Pool بانک Secundus مجاز شده است، متفاوت خواهد بود.

۵. تمیز کردن

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

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

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

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

تبریک می‌گویم

تبریک می‌گویم، شما با موفقیت آزمایشگاه کد را به پایان رساندید!

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

بعدش چی؟

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

مطالعه بیشتر