VPC Service Controls Basic Tutorial II - عیب یابی نقض خروج

1. مقدمه

کنترل‌های سرویس VPC (VPC-SC) یک کنترل امنیتی در سطح سازمان در Google Cloud است که به مشتریان سازمانی امکان می‌دهد خطرات استخراج داده را کاهش دهند. کنترل‌های سرویس VPC با امکان دسترسی مشتریان به IPهای مجاز، زمینه مشتری و پارامترهای دستگاه در حین اتصال به سرویس‌های چند مستاجر از اینترنت و سایر سرویس‌ها، دسترسی سبک اعتماد صفر را به سرویس‌های چند مستاجر ارائه می‌کند تا هم عمدی و هم عمدی را کاهش دهد. ضررهای غیر عمدی همانطور که در آموزش ابتدایی کنترل های سرویس VPC دیدیم، می توانید از کنترل های سرویس VPC برای ایجاد محیط هایی استفاده کنید که از منابع و داده های سرویس هایی که به صراحت مشخص کرده اید محافظت می کند.

اهداف این آموزش عبارتند از:

  • اصول کنترل های سرویس VPC را بدانید
  • محیط سرویس را به روز کنید و آن را با استفاده از حالت Dry-run تست کنید
  • از دو سرویس با کنترل های سرویس VPC محافظت کنید
  • عیب‌یابی نقض خروجی کنترل‌های سرویس VPC هنگام فهرست کردن یک شی از فضای ذخیره‌سازی ابری

2. راه اندازی و الزامات

برای این آموزش به پیش نیازهای زیر نیاز داریم:

dbec101f41102ca2.png

تنظیم منابع

  1. منابع را همانطور که در بخش "تنظیم منابع" آموزش ابتدایی کنترل های سرویس VPC توضیح داده شده است تنظیم کنید.
  2. بررسی کنید که مجوزهای لازم برای مدیریت فضای ذخیره‌سازی ابری را دارید.
  3. برای این آموزش، ما قصد داریم از CLI به جای کنسول ابری استفاده کنیم. در یکی از محیط های توسعه، gcloud CLI را راه اندازی کنید:
  • Cloud Shell : برای استفاده از یک ترمینال آنلاین با Gcloud CLI که قبلاً راه اندازی شده است، Cloud Shell را فعال کنید.

Cloud Shell را با کلیک بر روی نماد در گوشه سمت راست بالای کنسول ابری خود فعال کنید. ممکن است چند ثانیه طول بکشد تا جلسه شروع به کار کند. برای جزئیات بیشتر به راهنمای Cloud Shell مراجعه کنید.

a0ceb29950db4eac.png

هزینه

برای استفاده از منابع/APIهای Cloud باید صورت‌حساب را در کنسول Cloud فعال کنید. اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورت‌حساب فراتر از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

تنها منابعی که هزینه ایجاد می کند، نمونه VM و شی ذخیره سازی ابری است. هزینه تخمینی نمونه VM را می توان در ماشین حساب قیمت یافت. هزینه تخمینی Cloud Storage را می توان در این لیست قیمت یافت.

3. یک Storage Bucket و Object ایجاد کنید

همانطور که قبلا ذکر شد، ما قصد داریم از منابع ایجاد شده در آموزش قبلی مجددا استفاده کنیم. بنابراین ما به ساخت سطل Cloud Storage ادامه خواهیم داد. برای این آموزش، ما قصد داریم از gcloud CLI به جای کنسول استفاده کنیم.

  1. در کنسول گوگل، ProjectX را انتخاب کنید. در این پروژه، ما Storage Bucket و Object را ایجاد خواهیم کرد.
  2. مطمئن شوید که پوسته ابری را برای استفاده از ProjectX با اجرای دستور زیر تنظیم کرده اید:
gcloud config set project PROJECT_ID
  1. در محیط توسعه خود، دستور زیر را اجرا کنید:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
  1. یک شی ذخیره سازی ایجاد کنید تا بتوانیم آن را از VM Instance واقع در ProjectZ بخوانیم. ما یک فایل txt ایجاد خواهیم کرد.
nano hello.txt 

هر چیزی را که می خواهید در فایل متنی اضافه کنید.

  1. شی را در سطل آپلود کنید.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
  1. بررسی کنید که شیء در سطل آپلود شده است با فهرست کردن آن.
gcloud storage ls gs://BUCKET_NAME

باید فایل hello.txt فهرست شده در کنسول را ببینید.

4. محافظت از Cloud Storage API

در کد لبه قبلی، محیطی ایجاد کردیم و از Compute Engine API محافظت کردیم. در این کد لبه، محیط حالت اجرا خشک خود را ویرایش می کنیم و Cloud Storage را اضافه می کنیم. این به ما کمک می‌کند تا با نشان دادن نقض‌های کنترل‌های سرویس VPC در گزارش‌های حسابرسی، تأثیر محافظت از محیط را تعیین کنیم، اما تا زمانی که محیط را اجرا نکنیم، منابع در دسترس خواهند بود.

  1. در کنسول گوگل، سازمان خود را انتخاب کنید. به کنترل های سرویس VPC دسترسی پیدا کنید . مطمئن شوید که در محدوده سازمان هستید.
  2. Cloud Shell را باز کنید و محیط Dry Run "SuperProtection" ایجاد شده در آزمایشگاه قبلی را به روز کنید:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
  1. با توصیف محیط بررسی کنید که Cloud Storage API به روز شده است
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY 

در خروجی مشاهده خواهید کرد که Cloud Storage API در زیر سرویس های محدود شده فهرست شده است

همراه با Compute Engine API اما با برچسب " -vpcAccessibleServices: {}" :

2025ddc01a2e9a81.png

5. بررسی کنید که Cloud Storage API محافظت شده است

در حالت اجرای خشک، با فهرست کردن شیء از نمونه VM ایجاد شده در ProjectZ به ProjectX که میزبان سطل ذخیره‌سازی است، بررسی کنید که محیط «SuperProtection» انکار را به ما نشان می‌دهد.

  1. در Cloud Console، به انتخابگر پروژه بروید و ProjectZ را انتخاب کنید، سپس به Compute Engine > VM Instances بروید.
  2. برای اتصال به VM Instance و دسترسی به خط فرمان آن، روی دکمه SSH کلیک کنید.

5ca02149b78c11f9.png

  1. فایل hello.txt را که قبلا آپلود کرده بودیم فهرست کنید.
gcloud storage ls gs://BUCKET_NAME

از آنجایی که Cloud Storage API در حالت اجرا خشک محافظت می شود، باید بتوانید منابع را فهرست کنید، اما باید یک پیام خطا در گزارش های حسابرسی ProjectZ داشته باشید.

  1. به Logs Explorer API در ProjectZ بروید و به دنبال آخرین پیغام خطای VPC Service Controls بگردید. می توانید از این فیلتر برای به دست آوردن گزارش مورد نظر استفاده کنید:
protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS"
"(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:UNIQUE_ID"

این فیلتر آخرین تخلف را در حالت Dry-run که متعلق به Cloud Storage است به ما نشان می دهد. در اینجا مثالی از نحوه ظاهر گزارش آورده شده است و ما می توانیم هنگام تلاش برای فهرست کردن محتوای موجود در سطل واقع در ProjectX، تأیید کنیم که نقض یک خروجی است.

egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTX_ID"
sourceType: "Network"
targetResource: "projects/PROJECTZ_ID"
}
]
resourceNames: [
0: "projects//buckets/BUCKET_NAME"
]
securityPolicyInfo: {
organizationId: "ORGANIZATION_ID"
servicePerimeterName: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
vpcServiceControlsUniqueId: "UNIQUE_ID"
}
methodName: "google.storage.objects.list"
  1. از آنجایی که تأیید کرده‌ایم که فراخوانی API به Cloud Storage یک نقض کنترل‌های سرویس VPC ایجاد می‌کند، محیط را با پیکربندی جدید اجرا می‌کنیم. Cloud Shell را باز کنید و محیط Dry-run را اجرا کنید:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
  1. با استفاده از SSH به نمونه VM متصل شوید و دوباره سطل ذخیره سازی را فهرست کنید تا بررسی کنید که محیط Dry-run به درستی اجرا شده است.
gcloud storage ls gs://BUCKET_NAME

به جای لیستی از اشیاء ذخیره سازی، یک نقض کنترل سرویس VPC در VM CLI دریافت خواهیم کرد:

ERROR: (gcloud.storage.ls) User [PROJECT_NUMBER-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:"UNIQUE_ID"

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

6. عیب یابی رد لیست.

ما می‌خواهیم ردی را که از CLI نمونه VM دریافت کرده‌ایم عیب‌یابی کنیم. بیایید گزارش های حسابرسی را بررسی کنیم و شناسه منحصر به فرد کنترل های سرویس VPC را جستجو کنیم.

  1. به انتخابگر پروژه بروید و ProjectZ را انتخاب کنید.
  2. شناسه منحصر به فرد کنترل های سرویس VPC را در گزارش های حسابرسی با استفاده از عبارت زیر در Logs Explorer پیدا کنید:
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"

این همه گزارش های حسابرسی کنترل های سرویس VPC را نشان می دهد. ما به دنبال آخرین گزارش خطا خواهیم بود. از آنجایی که تماس API از نمونه VM انجام شده است، اصلی باید حساب خدمات Compute Engine " PROJECT_NUMBER-compute@developer.gserviceaccount.com" باشد.

از آنجایی که قبلاً شناسه منحصربه‌فرد کنترل‌های سرویس VPC را داریم، می‌توانیم از آن برای دریافت مستقیم گزارش مورد نظر با استفاده از این فیلتر استفاده کنیم:

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. روی هدر VPC Service Controls کلیک کنید و «Troubleshoot denial» را انتخاب کنید تا عیب‌یابی VPC Service Controls باز شود.

این API در یک رابط کاربری دوستانه دلیل نقض را به ما نشان می دهد، و اینکه آیا این یک نقض ورودی یا خروجی از جمله موارد مفید دیگر است.

در این تمرین به دنبال موارد زیر خواهیم بود:

authenticationInfo: {
principalEmail: "PROJECT_ID-compute@developer.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTZ_ID"
sourceType: "Network"
targetResource: "projects/PROJECTX_ID"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

این اطلاعات کافی است تا بدانیم که باید یک قانون خروج ایجاد کنیم تا به حساب سرویس Compute Engine اجازه دسترسی به سطل ذخیره سازی از ProjectZ به ProjectX را بدهیم. همچنین می‌توانیم ببینیم که شبکه در یک محیط قرار ندارد، بنابراین باید به ارتباطات VPC اجازه دهیم سرویس‌ها و داده‌ها را در میان محیط‌های سرویس به اشتراک بگذاریم.

  1. Cloud Shell را فعال کنید و با استفاده از ویرایشگر متن یک فایل .yaml با قانون خروج ایجاد کنید.
nano egresstorage.yaml 
- egressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: \"*\"
    resources:
    - projects/PROJECTX_ID
 egressFrom:
    identities:
    - serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com
  1. خط مشی ورودی را که از ProjectZ محافظت می کند، به روز کنید .
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY 

اکنون می توانیم دوباره سعی کنیم از نمونه VM به سطل دسترسی پیدا کنیم.

  1. در Cloud Console، به انتخابگر پروژه بروید و ProjectZ را انتخاب کنید، سپس به Compute Engine > VM Instances بروید.
  2. برای اتصال به VM Instance و دسترسی به خط فرمان آن، روی دکمه SSH کلیک کنید.
  3. وقتی وارد VM CLI شدید، سعی کنید اشیاء را در Storage Bucket فهرست کنید.
gcloud storage ls gs://BUCKET_NAME/

با پیغام خطای زیر مواجه خواهید شد:

ERROR: (gcloud.storage.ls) User [PROJECT_ID-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): PROJECT_ID-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
  1. ما باید به حساب سرویس Compute Engine مجوز یک شی خوان بدهیم تا بتوانیم اشیاء را در Storage Bucket فهرست کنیم.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
  1. یک بار دیگر، بیایید سعی کنیم فایل hello.txt را از CLI نمونه VM فهرست کنیم.
gcloud storage ls gs://BUCKET_NAME/
.
.
gs://BUCKET_NAME/hello.txt

اکنون می‌توانیم شی را بدون نقض مجوز VPC Service Controls فهرست کنیم، اما در مورد دانلود فایل چطور؟ بیایید آن را امتحان کنیم.

gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}

و خروجی زیر را دریافت خواهیم کرد

Copying gs://BUCKET_NAME/hello.txt to file:///home/${USER}
 Completed files 1/1 | 54.0B/54.0B  

7. پاکسازی

در حالی که هیچ هزینه جداگانه ای برای استفاده از کنترل های سرویس VPC در زمانی که سرویس در حال استفاده نیست، دریافت نمی شود، تمیز کردن تنظیمات مورد استفاده در این آزمایشگاه بهترین روش است. همچنین می توانید نمونه VM و/یا پروژه های Cloud خود را حذف کنید تا از تحمیل هزینه جلوگیری کنید. با حذف پروژه Cloud، صورت‌حساب تمام منابع مورد استفاده در آن پروژه متوقف می‌شود.

  1. برای حذف نمونه VM خود، کادر انتخاب سمت چپ نام نمونه VM خود را انتخاب کنید و سپس روی Delete کلیک کنید.

da0abf0894fe03cd.png

  1. برای حذف محیط، مراحل زیر را انجام دهید:
  • در کنسول Google Cloud، روی Security کلیک کنید و سپس روی VPC Service Controls در محدوده سازمان کلیک کنید.
  • در صفحه VPC Service Controls، در ردیف جدول مربوط به محیطی که می خواهید حذف کنید، روی "Delete Icon" کلیک کنید.
  1. برای حذف سطح دسترسی، مراحل زیر را انجام دهید:
  • در کنسول Google Cloud، صفحه Access Context Manager را در محدوده پوشه باز کنید.
  • در شبکه، در ردیف سطح دسترسی که می‌خواهید حذف کنید، روی «Delete Icon» کلیک کنید و سپس روی Delete کلیک کنید.
  1. برای حذف شی Storage و Bucket مراحل زیر را انجام دهید:
  • در کنسول Google Cloud، صفحه سطل‌های فضای ذخیره‌سازی ابری را باز کنید.
  • کادر کنار سطلی که ایجاد کردید را انتخاب کنید.
  • روی Delete کلیک کنید.
  • در پنجره ای که باز می شود، تأیید کنید که می خواهید سطل را حذف کنید.
  • روی Delete کلیک کنید.
  1. برای خاموش کردن پروژه خود، مراحل زیر را انجام دهید:
  • در کنسول Google Cloud، به صفحه IAM & Admin Settings پروژه ای که می خواهید حذف کنید بروید.
  • در صفحه IAM & Admin Settings، روی Shutdown کلیک کنید.
  • شناسه پروژه را وارد کرده و در هر حال بر روی Shutdown کلیک کنید.

8. تبریک می گویم!

در این کد لبه، شما یک محیط VPC Service Controls Dry-run را به روز کردید، آن را اجرا کردید و عیب‌یابی کرد.

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.