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

۱. مقدمه

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

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

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

۲. تنظیمات و الزامات

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

dbec101f41102ca2.png

منابع-تنظیمات

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

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

a0ceb29950db4eac.png

هزینه

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

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

۳. یک سطل ذخیره‌سازی و شیء ایجاد کنید

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

  1. در کنسول گوگل، ProjectX را انتخاب کنید. در این پروژه، ما Storage Bucket و شیء آن را ایجاد خواهیم کرد.
  2. با اجرای دستور زیر، مطمئن شوید که پوسته ابری را برای استفاده از ProjectX تنظیم کرده‌اید:
gcloud config set project PROJECT_ID
  1. در محیط توسعه خود، دستور زیر را اجرا کنید:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
  1. یک شیء ذخیره‌سازی ایجاد کنید تا بتوانیم آن را از نمونه ماشین مجازی واقع در 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 را که در کنسول فهرست شده است، ببینید.

۴. از API ذخیره‌سازی ابری محافظت کنید

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

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

در خروجی، خواهید دید که API مربوط به فضای ذخیره‌سازی ابری (Cloud Storage API) در زیر سرویس‌های محدود شده فهرست شده است.

همراه با رابط برنامه‌نویسی کاربردی موتور محاسبات اما با برچسب " -vpcAccessibleServices: {}" :

2025ddc01a2e9a81.png

۵. تأیید کنید که API ذخیره‌سازی ابری محافظت شده است

در حالت اجرای خشک (Dry Run)، با فهرست کردن شیء از نمونه ماشین مجازی ایجاد شده در ProjectZ به ProjectX که میزبان Storage Bucket است، تأیید کنید که محیط "SuperProtection" عدم پذیرش را به ما نشان می‌دهد.

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

5ca02149b78c11f9.png

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

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

  1. به رابط برنامه‌نویسی کاربردی Logs Explorer در 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 Service Controls را ایجاد می‌کند، ما محیط را با پیکربندی جدید اعمال خواهیم کرد. Cloud Shell را باز کنید و محیط Dry-run را اعمال کنید:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
  1. با استفاده از SSH به ماشین مجازی متصل شوید و دوباره سطل ذخیره‌سازی را فهرست کنید تا تأیید شود که محیط Dry-run به درستی اعمال شده است.
gcloud storage ls gs://BUCKET_NAME

به جای لیستی از اشیاء ذخیره‌سازی، در رابط خط فرمان ماشین مجازی (VM CLI) با خطای VPC Service Control مواجه خواهیم شد:

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 برای جلوگیری از خواندن داده‌ها از یا کپی کردن داده‌ها به منبعی خارج از محیط، با موفقیت از خروج داده‌ها جلوگیری کردیم.

۶. عیب‌یابی رد شدن لیست.

ما قصد داریم مشکل عدم پذیرش درخواست از رابط خط فرمان (CLI) نمونه ماشین مجازی را عیب‌یابی کنیم. بیایید گزارش‌های حسابرسی را بررسی کنیم و شناسه منحصر به فرد کنترل‌های سرویس VPC را پیدا کنیم.

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

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

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

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. روی سربرگ VPC Service Controls کلیک کنید و گزینه "Troubleshoot denial" را انتخاب کنید که VPC Service Controls Troubleshooter را باز خواهد کرد.

این 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 

حالا می‌توانیم دوباره سعی کنیم از طریق ماشین مجازی به باکت دسترسی پیدا کنیم.

  1. در کنسول ابری، به انتخابگر پروژه بروید و ProjectZ را انتخاب کنید، سپس به Compute Engine > VM Instances بروید.
  2. برای اتصال به ماشین مجازی و دسترسی به خط فرمان آن، روی دکمه 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) نمونه ماشین مجازی فهرست کنیم.
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  

۷. پاکسازی

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

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

da0abf0894fe03cd.png

  1. برای حذف حاشیه، مراحل زیر را انجام دهید:
  • در کنسول Google Cloud، روی Security کلیک کنید و سپس در محدوده Organization روی VPC Service Controls کلیک کنید.
  • در صفحه کنترل‌های سرویس VPC، در ردیف جدول مربوط به محیطی که می‌خواهید حذف کنید، روی «آیکون حذف» کلیک کنید.
  1. برای حذف سطح دسترسی، مراحل زیر را انجام دهید:
  • در کنسول گوگل کلود، صفحه Access Context Manager را در محدوده پوشه باز کنید.
  • در جدول، در ردیف مربوط به سطح دسترسی که می‌خواهید حذف کنید، روی «حذف آیکون» کلیک کنید و سپس روی «حذف» کلیک کنید.
  1. برای حذف شیء Storage و Bucket، مراحل زیر را انجام دهید:
  • در کنسول گوگل کلود، صفحه Cloud Storage buckets را باز کنید.
  • کادر کنار باکتی که ایجاد کرده‌اید را علامت بزنید.
  • روی حذف کلیک کنید.
  • در پنجره‌ای که باز می‌شود، تأیید کنید که می‌خواهید سطل را حذف کنید.
  • روی حذف کلیک کنید.
  1. برای خاموش کردن پروژه خود، مراحل زیر را انجام دهید:
  • در کنسول گوگل کلود، به صفحه تنظیمات مدیریت و دسترسی به اطلاعات (IAM & Admin Settings) پروژه‌ای که می‌خواهید حذف کنید، بروید.
  • در صفحه تنظیمات مدیریت و دسترسی (IAM & Admin Settings)، روی خاموش کردن (Shutdown) کلیک کنید.
  • شناسه پروژه را وارد کنید و روی «خاموش کردن به هر حال» کلیک کنید.

۸. تبریک می‌گویم!

در این آزمایشگاه کد، شما یک محیط اجرای خشک VPC Service Controls را به‌روزرسانی، آن را اجرا و عیب‌یابی کردید.

بیشتر بدانید

مجوز

این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.