کنترل های سرویس VPC - حفاظت از سرویس انتقال داده BigQuery

1. مقدمه

در این آزمایشگاه، نحوه محافظت از BigQuery Data Transfer Service را با استفاده از VPC Service Controls ، در حین انتقال داده ها از Cloud Storage به مجموعه داده BigQuery یاد خواهیم گرفت. سپس از Cloud Storage محافظت می کنیم و فرآیند را برای انتقال داده ها از Cloud Storage به BigQuery تکرار می کنیم. محافظت از Cloud Storage باعث نقض کنترل های سرویس VPC می شود که برای انتقال موفقیت آمیز باید برطرف شود. در پایان، از BigQuery نیز محافظت می‌کنیم و سپس سعی می‌کنیم مجموعه داده‌ها را بین پروژه‌ها کپی کنیم، که همچنین باعث نقض می‌شود که باید اصلاح شود.

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

  • نحوه رفع تخلفات ورودی و خروجی را با استفاده از قوانین ورودی و خروجی به ترتیب در سرویس‌های مختلف، به ویژه Cloud Storage، BigQuery، و BigQuery Data Transfer Service را بدانید.
  • درک کنید که چرا یک تخلف خاص رخ داده است.

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

قبل از شروع

در این کد لبه فرض می کنیم که شما قبلاً می دانید:

راه اندازی

راه اندازی اولیه ما به شرح زیر طراحی شده است:

نمودار راه اندازی اولیه Codelab

یک خط مشی محدوده و یک محدوده خدمات منظم ایجاد کنید

در این کد لبه از یک سرویس معمولی محافظت از محیط project-2 استفاده خواهیم کرد.

در perimeter perimeter-2 ، BigQuery Data Transfer API محدود کنید.

تنظیمات VPC SC از سرویس انتقال داده محافظت می کند.

ایجاد سطل فضای ذخیره سازی ابری و مجموعه داده BigQuery

برای این کد لبه، هر فایل csv صرف نظر از محتوا کافی است. محدودیت اصلی مربوط به الزامات هم محل است که این موارد را اعمال می کند:

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

از این پس، برای این نرم‌افزار کد، مطمئن خواهیم شد که هم سطل فضای ذخیره‌سازی ابری و هم مجموعه داده BigQuery در یک منطقه یا چند منطقه قرار دارند.

یک سطل ذخیره سازی ابری جدید در project-1 ایجاد کنید

برای ایجاد یک سطل ذخیره‌سازی ابری جدید، مراحل مستند را برای ایجاد یک سطل جدید دنبال کنید.

  • برای نام سطل، نامی را وارد کنید که شرایط نام سطل را برآورده کند. برای این کد لبه، سطل را codelab-bqtransfer-bucket می نامیم.
  • برای مکان ذخیره داده ها، مکان سطل، نوع مکان و مکانی را انتخاب کنید که داده های سطل به طور دائم در آن ذخیره شوند. برای این کد لبه، ما از ما (مناطق متعدد در ایالات متحده) استفاده خواهیم کرد.

پیکربندی ایجاد فضای ذخیره سازی ابری.

یک فایل CSV ایجاد کنید

از ماشین محلی شما یا با استفاده از Cloud Shell ، می‌توانیم از دستور echo برای ایجاد یک نمونه فایل csv، codelab-test-file.csv ، با استفاده از دستورات زیر استفاده کنیم:

echo "name,age" > codelab-test-file.csv; \
echo "Alice,10" >> codelab-test-file.csv; \
echo "Bob,20" >> codelab-test-file.csv; \
echo "Carol,30" >> codelab-test-file.csv; \
echo "Dan,40" >> codelab-test-file.csv; \
echo "Eve,50" >> codelab-test-file.csv; \
echo "Frank,60" >> codelab-test-file.csv; \
echo "Grace,70" >> codelab-test-file.csv; \
echo "Heidi,80" >> codelab-test-file.csv;

فایل CSV را در سطل فضای ذخیره سازی ابری آپلود کنید

پس از ایجاد فایل csv، دستور زیر را برای آپلود شی فایل در سطل ایجاد شده اجرا کنید:

gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket

دستور cp را برای آپلود فایل csv در فضای ذخیره سازی ابری اجرا کنید.

با فهرست کردن اشیاء در سطل یا اجرای دستور زیر می‌توانید تأیید کنید که فایل در سطل ایجاد شده آپلود شده است:

gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**

مجموعه داده و جدول BigQuery را در project-2 ایجاد کنید

  1. با دنبال کردن این مراحل ، یک مجموعه داده BigQuery در پروژه پروژه project-2 ایجاد کنید.
    1. برای شناسه مجموعه داده ، یک نام مجموعه داده منحصر به فرد وارد کنید. برای این کد لبه از: codelab_bqtransfer_dataset استفاده می کنیم.
    2. برای نوع مکان ، یک مکان جغرافیایی برای مجموعه داده انتخاب کنید. برای این آزمایشگاه کد، از همان مکان سطل ذخیره‌سازی ابری استفاده می‌کنیم: US (مناطق متعدد در ایالات متحده) . ایجاد مجموعه داده BigQuery.
  2. با دنبال کردن این مراحل ، یک جدول BigQuery، در زیر مجموعه داده ایجاد شده codelab_bqtransfer_dataset ایجاد کنید.
    1. در قسمت Source ، در لیست Create table from گزینه Empty table را انتخاب کنید.
    2. در قسمت Table نام جدولی را که می خواهید ایجاد کنید وارد کنید. برای این کد لبه از نام: codelab-bqtransfer-table استفاده می کنیم.
    3. بررسی کنید که قسمت Table type روی Native table تنظیم شده باشد
    4. در قسمت Schema تعریف schema را وارد کنید. می توانید با کلیک بر روی Edit as text اطلاعات طرح را وارد کرده و طرح زیر را وارد کنید که با فرمت فایل csv ایجاد شده مطابقت دارد.
    [{
    "name": "name",
    "type": "STRING",
    "mode": "NULLABLE",
    "description": "The name"
    },
    {
    "name": "age",
    "type": "INTEGER",
    "mode": "NULLABLE",
    "description": "The age"
    }]
    

هزینه

برای استفاده از منابع Cloud/APIها باید صورتحساب را در پروژه های project-2 و project-1 فعال کنید. توصیه می کنیم برای جلوگیری از تحمیل صورتحساب فراتر از این کد، منابع استفاده شده را خاموش کنید.

منابعی که متحمل هزینه می شوند BigQuery و Cloud Storage هستند. هزینه تخمینی را می توان در ماشین حساب قیمت BigQuery و ماشین حساب Cloud Storage پیدا کرد.

3. انتقال داده از شی ذخیره سازی ابری به جدول BigQuery را پیکربندی کنید

اکنون سعی می کنیم یک سرویس انتقال داده (در project-2 ) ایجاد کنیم تا از فضای ذخیره سازی ابری (واقع در project-1 ) به BigQuery (واقع در project-2 ) منتقل شود، در حالی که کنترل های سرویس VPC از سرویس انتقال داده BigQuery در project-2 محافظت می کند. project-2 . فقط محافظت از سرویس انتقال داده BigQuery (بدون محافظت از BigQuery و Cloud Storage) مدیران را محدود می کند که فقط انتقال داده را ایجاد و مدیریت کنند (مانند شروع دستی انتقال داده).

راه اندازی انتقال داده از Cloud Storage

برای ایجاد انتقال داده، مراحل زیر را دنبال کنید:

  1. به صفحه BigQuery در کنسول Google Cloud project-2 بروید.
  2. روی انتقال داده کلیک کنید.

نقض VPC SC در صفحه سرویس انتقال داده.

هنگام دسترسی به صفحه انتقال داده، تخلف را بررسی کنید

در کنسول Google Cloud، می‌توانیم شناسه منحصربه‌فرد VPC Service Controls را ببینیم. از همان شناسه برای فیلتر کردن گزارش‌ها و شناسایی جزئیات تخلف استفاده کنید (شناسه انکار مشاهده شده را جایگزین OBSERVED_VPCSC_DENIAL_UNIQUE_ID کنید):

protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"

نقض مشاهده شده یک NO_MATCHING_ACCESS_LEVEL است که یک نقض ورودی با جزئیات مشابه زیر است:

ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
}]
violationReason: "NO_MATCHING_ACCESS_LEVEL"
callerIp: "USER_PUBLIC_IP_ADDRESS"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.ListTransferConfigs"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}

با دسترسی به صفحه انتقال داده تلاش می شود تا هر گونه انتقال داده پیکربندی شده را فهرست کند. بنابراین، نقض متد ListTransferConfigs .

رفع تخلف برای سرویس bigquerydatatransfer.googleapis.com

یک سطح دسترسی یا یک قانون ورود می‌تواند برای رفع نقض ورودی استفاده شود. در این لبه کد، اجازه دهید از یک قانون ورود پیکربندی شده با هویت کاربر رد شده استفاده کنیم که امکان دسترسی به سرویس bigquerydatatransfer.googleapis.com و همه روش ها را فراهم می کند.

قانون ورود به روش‌های انتقال داده.

پس از برقراری قانون ورود، دسترسی به صفحه انتقال داده ها باید بدون مشکل کار کند.

راه اندازی انتقال داده از فضای ذخیره سازی ابری را از سر بگیرید

از مراحل قبلی، در حالی که در صفحه انتقال داده (پس از کلیک بر روی انتقال داده) هستید، مراحل زیر را ادامه دهید:

  1. روی + ایجاد انتقال کلیک کنید.
  2. در بخش نوع منبع ، برای منبع ، Google Cloud Storage را انتخاب کنید.
  3. در بخش Transfer config name ، برای نمایش نام ، یک نام برای انتقال مانند Codelab Transfer وارد کنید.
  4. در قسمت گزینه های زمانبندی :
    1. یک فرکانس تکرار مانند 15 دقیقه را انتخاب کنید.
    2. مطمئن شوید که اکنون شروع را انتخاب کنید. در غیر این صورت، انتقال داده تنها پس از فرکانس تکرار پیکربندی شده شروع می شود
  5. در بخش تنظیمات مقصد ، برای مجموعه داده مقصد ، مجموعه داده‌ای را که برای ذخیره داده‌های خود ایجاد کرده‌اید انتخاب کنید: codelab_bqtransfer_dataset
  6. در قسمت جزئیات منبع داده
    1. برای جدول مقصد ، نام جدول مقصد خود را وارد کنید. جدول مقصد باید از قوانین نامگذاری جدول پیروی کند. برای این کدلب از جدولی که قبلا ایجاد کردیم استفاده می کنیم: codelab-bqtransfer-table
    2. برای Cloud Storage URI ، Cloud Storage URI را وارد کنید. برای این کد لبه، از سطل و فایل ایجاد شده استفاده می کنیم: codelab-bqtransfer-bucket/codelab-test-file.csv
    3. برای اولویت نوشتن ، APPEND نگه دارید (یا MIRROR را انتخاب کنید).
    4. حذف فایل‌ها را پس از انتقال انتخاب نکنید (زیرا از یک فایل چندین بار استفاده مجدد می‌کنیم. اما می‌توانید از چندین فایل استفاده کنید و فایل‌های منبع را پس از انتقال حذف کنید)
    5. برای فرمت فایل ، CSV را انتخاب کنید
    6. در گزینه های انتقال ، در زیر CSV ، کاما("") را به عنوان جداکننده فیلد وارد کنید.
  7. در منوی حساب سرویس ، یک حساب سرویس از حساب‌های خدمات مرتبط با پروژه Google Cloud خود انتخاب کنید
    1. حساب سرویس انتخابی باید مجوزهای لازم برای هر دو فضای ذخیره سازی ابری در پروژه میزبان سطل ذخیره سازی را داشته باشد. project-1 در این کد لبه.
    2. برای این کد لبه، از یک حساب سرویس ایجاد شده در project-2 به نام codelab-sa@project-2.iam.gserviceaccount.com استفاده خواهیم کرد.
  8. روی ذخیره کلیک کنید.

از آنجایی که ما Start Now را به عنوان گزینه زمان بندی انتخاب کردیم، به محض انتخاب ذخیره ، اولین انتقال شروع می شود.

وضعیت سرویس انتقال داده را تأیید کنید

برای تأیید وضعیت انتقال داده پیکربندی شده:

مشاغل خدمات انتقال داده

روی Codelab Transfer (زیر نمایش نام) کلیک کنید و لیستی از تمام اجراهای انجام شده تا کنون نمایش داده می شود.

جزئیات سرویس انتقال داده اجرا می شود.

اجرای انتقال داده باید موفقیت‌آمیز باشد، بدون نقض کنترل‌های سرویس VPC برای انتقال داده‌ها به صورت دستی و برنامه‌ریزی‌شده. توجه داشته باشید که فقط انتقالی که به صورت دستی راه اندازی می شود به قانون ورود نیاز دارد تا به اصل دسترسی داشته باشد، یعنی شروع انتقال به صورت دستی.

4. محدودیت آدرس IP برای انتقال دستی داده

قوانین ورودی پیکربندی شده فعلی به هویت پیکربندی شده اجازه می دهد تا انتقال داده را به صورت دستی از هر آدرس IP آغاز کند.

با استفاده از سطح دسترسی، کنترل‌های سرویس VPC توانایی محدود کردن دسترسی مجاز را با ویژگی‌های درخواست API خاص، به ویژه:

  • زیرشبکه های IP: بررسی می کند که آیا درخواست از یک آدرس IP خاص می آید یا خیر.
  • مناطق: بررسی می‌کند که آیا درخواست از یک منطقه خاص می‌آید، که توسط موقعیت جغرافیایی آدرس IP تعیین می‌شود.
  • اصول: بررسی می کند که آیا درخواست از یک حساب خاص می آید یا خیر.
  • خط‌مشی دستگاه: بررسی می‌کند که آیا درخواست از دستگاهی می‌آید که الزامات خاصی را برآورده می‌کند یا خیر.

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

دسترسی توسط VPC SC توسط آدرس IP کاربر محافظت می شود این نمودار دسترسی آغاز شده توسط دو اصل ( user@example.com و user2@example.com ) را در سه سناریو نشان می‌دهد، و نشان می‌دهد که چگونه کنترل‌های سرویس VPC منابع (سطح دسترسی ورودی) و ویژگی‌های هویت را به عنوان یک شرط AND ارزیابی می‌کنند که در آن هر دو باید مطابقت داشته باشند. .

  1. کاربر user@example.com هنگام تلاش برای دسترسی از یک آدرس IP مجاز توسط سطح دسترسی مجاز به دسترسی است، زیرا آدرس IP و حساب کاربری آنها با پیکربندی‌های قانون ورود مطابقت دارند.
  2. دسترسی کاربر user@example.com زمانی مسدود می شود که آدرس IP آنها با آدرس IP مجاز مطابقت نداشته باشد، علیرغم اینکه حساب کاربری آنها در قانون ورود پیکربندی شده است.
  3. کاربر user2@example.com علیرغم تلاش برای دسترسی از یک آدرس IP مجاز، دسترسی کاربر را مسدود کرده است ، زیرا حساب آنها توسط قانون ورود مجاز نیست.

ایجاد سطح دسترسی

برای ایجاد سطح دسترسی که دسترسی را با آدرس IP محدود می کند :

  1. صفحه Access Context Manager را در کنسول Google Cloud باز کنید.
    • اگر از شما خواسته شد، پوشه codelab-folder انتخاب کنید.
  2. در بالای صفحه Access Context Manager ، روی CREATE ACCESS LEVEL کلیک کنید.
  3. در پنجره New Access Level ، به سطح دسترسی جدید یک عنوان بدهید. برای این کد لبه، آن را project_2_al می نامیم.
  4. در بخش شرایط ، روی + در مقابل زیرشبکه‌های IP کلیک کنید.
  5. در کادر IP Subnetworks ، Public IP را انتخاب کنید
    • به عنوان جایگزین، می توانید انتخاب کنید که از IP خصوصی برای استفاده از آدرس IP داخلی در سطوح دسترسی استفاده کنید. با این حال، برای این کد لبه، ما از یک IP عمومی استفاده می کنیم.
    • یک یا چند محدوده IPv4 یا IPv6 فرمت شده به عنوان بلوک CIDR را وارد کنید.

سطح دسترسی را در قانون ورود اضافه کنید

در قانون ورودی، سطح دسترسی در قسمت sources ارجاع می‌شود، که یک فیلد الزامی است که در مرجع قانون ورود مستند شده است. برای اجازه ورود به منابع، VPC Service Controls sources و ویژگی‌های identityType را به عنوان یک شرط AND ارزیابی می‌کند. قانون ورود از هویت اصلی استفاده می کند که انتقال داده را به صورت دستی آغاز می کند، نه حساب سرویس مشخص شده در پیکربندی انتقال داده.

قانون ورود با سطح دسترسی پیکربندی شده است.

با تنظیماتی که دسترسی به آدرس IP را محدود می کند، انتقال را دوباره اجرا کنید

برای ارزیابی اثربخشی پیکربندی های اعمال شده، با استفاده از سناریوهای زیر، انتقال را دوباره آغاز کنید:

  • با استفاده از آدرس IP در محدوده مجاز در سطح دسترسی اشاره شده توسط قانون ورود.
  • با استفاده از یک آدرس IP که توسط تنظیمات مجاز نیست

دسترسی از آدرس IP مجاز باید موفقیت آمیز باشد در حالی که دسترسی از آدرس های IP غیرمجاز باید ناموفق باشد و منجر به نقض کنترل های سرویس VPC شود.

یکی از راه‌های آسان برای آزمایش با استفاده از یک آدرس IP متفاوت، اجازه دادن به آدرس IP اختصاص داده شده در هنگام استفاده از کنسول Google Cloud و سپس آزمایش در هنگام استفاده از Cloud Shell است.

در Cloud Shell، با جایگزین کردن هر دو RUN_TIME و RESOURCE_NAME، دستور زیر را اجرا کنید تا به صورت دستی یک انتقال را راه اندازی کنید :

bq mk \
  --transfer_run \
  --run_time='RUN_TIME' \
  RESOURCE_NAME

به عنوان مثال، دستور نمونه زیر بلافاصله برای پیکربندی انتقال 12345678-90ab-cdef-ghij-klmnopqrstuv در پروژه 1234567890 اجرا می شود.

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ");
bq mk \
  --transfer_run \
  --run_time=$NOW \
  projects/1234567890/locations/us/transferConfigs/12345678-90ab-cdef-ghij-klmnopqrstuv

خروجی مشاهده شده نقض کنترل های سرویس VPC را نشان می دهد، همانطور که انتظار می رود، زیرا آدرس IP مجاز نیست.

نقض VPC SC از آدرس IP غیر مجاز.

نقض مشاهده شده در روش DataTransferService.StartManualTransferRuns است.

ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
targetResourcePermissions: [0: "vpcsc.permissions.unavailable"]
}]
violationReason: "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.StartManualTransferRuns"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
severity: "ERROR"

5. شروع انتقال داده در حین محافظت از سرویس ذخیره سازی ابری

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

در پیکربندی perimeter-2 ، Cloud Storage API را به عنوان یکی از سرویس‌های محدود، همراه با BigQuery Data Transfer API اضافه کنید.

پیکربندی‌های VPC SC از فضای ذخیره‌سازی ابری محافظت می‌کنند.

پس از ایمن سازی Cloud Storage API، منتظر انتقال داده های برنامه ریزی شده بعدی باشید یا به صورت دستی با استفاده از مراحل زیر، انتقال را فعال کنید :

  1. به صفحه BigQuery در کنسول Google Cloud بروید.
  2. روی انتقال داده کلیک کنید.
  3. انتقال خود را از لیست انتخاب کنید: برای این کد لبه، ما از انتقال انتقال کدلب استفاده می کنیم
  4. روی Run transfer now کلیک کنید
  5. روی OK کلیک کنید.

انتقال دیگری آغاز خواهد شد. ممکن است لازم باشد صفحه را به روز کنید تا آن را ببینید. این بار انتقال با نقض کنترل های سرویس VPC ناموفق خواهد بود.

نقض VPC SC برای کپی کردن مجموعه داده BigQuery.

نقض کنترل‌های سرویس VPC ذخیره‌سازی ابری را بررسی کنید

گزارش های حسابرسی را با استفاده از vpcServiceControlsUniqueIdentifier همانطور که در خلاصه انتقال مشاهده می شود فیلتر کنید.

نقض مشاهده شده یک نقض خروجی RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER با جزئیات زیر است:

  • Principal حساب سرویس پیکربندی شده در سرویس انتقال داده است (چه به صورت دستی راه اندازی شود و چه انتقال داده برنامه ریزی شده اجرا شود، اصل رد شده یکسان خواهد بود.)
  • سرویس تحت تأثیر فضای ذخیره‌سازی ابری است
  • منبع درخواست پروژه ای است که در آن سرویس انتقال داده پیکربندی شده است: project-2
  • پروژه هدف پروژه ای است که شی Cloud Storage در آن قرار دارد: project-1
principalEmail: "codelab-sa@project-2.iam.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT2_NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT1_NUMBER]"
targetResourcePermissions: [0: "storage.objects.get"]
}]
labels: {
method: "google.storage.objects.get"
project_id: "project-2"
service: "storage.googleapis.com"
}

رفع نقض خروج از فضای ذخیره‌سازی ابری

برای رفع نقض خروج، باید از یک قانون خروج استفاده کنیم که اجازه می دهد تا ترافیک از حساب سرویس رد شده به سمت پروژه با اشیاء Cloud Storage.

قانون خروج برای اجازه دادن به حساب سرویس Codelab.

پس از اصلاح perimeter-2 ، این فرآیند را تکرار کنید تا انتقال دوباره آغاز شود. انتقال خطا نشان نخواهد داد.

جزئیات انتقال داده پس از پیکربندی قانون خروج اجرا می شود.

6. BigQuery Dataset را از project-2 به project-1 کپی کنید

پس از تأیید اینکه می‌توانیم داده‌ها را از سطل ذخیره‌سازی ابری در project-1 به مجموعه داده BigQuery در project-2 منتقل کنیم، بیایید مجموعه داده BigQuery را از project-2 به project-1 کپی کنیم. در حالی که BigQuery API توسط کنترل های سرویس VPC محافظت می شود.

برای ایجاد و کپی مجموعه داده از دستور bq mk استفاده می کنیم که از ابزار bq استفاده می کند.

ایجاد مجموعه داده مقصد در project-1

قبل از کپی کردن مجموعه داده، ابتدا باید مجموعه داده مقصد ایجاد شود. برای ایجاد مجموعه داده مقصد، می‌توانیم دستور زیر را اجرا کنیم که یک مجموعه داده با نام copied_dataset را در پروژه project-1 با us به عنوان مکان ایجاد می‌کند.

bq mk \
  --dataset \
  --location=us \
  project-1:copied_dataset

از سرویس BigQuery در project-2 با کنترل های سرویس VPC محافظت کنید

پیکربندی perimeter perimeter-2 را تغییر دهید و BigQuery API را به عنوان سرویس محافظت شده به همراه خدمات انتقال داده BigQuery و Cloud Storage اضافه کنید.

VPC SC برای محافظت از Cloud Storage API پیکربندی شده است.

کپی مجموعه داده را آغاز کنید

برای کپی کردن مجموعه داده، دستور bq mk زیر را اجرا کنید، که مجموعه داده codelab_bqtransfer_dataset را در پروژه project-2 به مجموعه داده copied_dataset در project-1 کپی می کند و در صورت وجود، محتوای مجموعه داده را بازنویسی می کند.

bq mk \
  --transfer_config \
  --project_id=project-1 \
  --target_dataset=copied_dataset \
  --data_source=cross_region_copy \
  --display_name='Dataset from project-2 to project-1' \
  --params='{
     "source_dataset_id":"codelab_bqtransfer_dataset",
     "source_project_id":"project-2",
     "overwrite_destination_table":"true"
     }'

دستور با موفقیت اجرا خواهد شد. در همین حال، پیکربندی انتقال با موفقیت ایجاد شد تا عملیات کپی کردن مجموعه داده آغاز شود. کپی کردن خود مجموعه داده با نقض کنترل های سرویس VPC با شکست مواجه خواهد شد.

برای یافتن جزئیات نقض مربوط به کنترل های سرویس VPC، گزارش های مربوط به project-2 (پروژه مجموعه داده منبع) را با جستجوی گزارش زیر بررسی کنید. جستجوی گزارش، گزارش‌های سرویس BigQuery و نام منبع مجموعه داده کپی شده را فیلتر می‌کند ( codelab_bqtransfer_dataset ).

resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"

نقض مشاهده شده VPC Service Controls یک نقض خروج از project-2 به project-1 است.

egressViolations: [
  0: {
   servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
   source: "projects/[PROJECT-2-NUMBER]"
   sourceType: "Resource"
   targetResource: "projects/[PROJECT-1-NUMBER]"
   targetResourcePermissions: [
     0: "bigquery.transfers.update"
     1: "bigquery.transfers.get"
     2: "bigquery.jobs.create"
     ]
   }
]
method: "bigquery.tables.getData"
service: "bigquery.googleapis.com"

همه موارد نقض BigQuery را برطرف کنید و دوباره کپی مجموعه داده را شروع کنید

برای رفع تخلف خروج، باید یک قانون خروج ایجاد کنیم که به اصل رد شده اجازه دهد. اصل رد شده همانی است که دستور mk را اجرا می کند.

قانون خروج برای اجازه دسترسی به همه روش‌های BigQuery.

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

7. پاکسازی

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

  • برای حذف سطل Cloud Storage ، مراحل زیر را انجام دهید:
    • در کنسول Google Cloud، به صفحه Cloud Storage Buckets بروید.
    • کادر انتخاب سطل را برای حذف انتخاب کنید و سپس روی Delete کلیک کنید.
    • در پنجره همپوشانی که ظاهر می‌شود، تأیید کنید که می‌خواهید سطل و محتویات آن را حذف کنید. حذف سطل Cloud Storage.
  • برای حذف مجموعه داده BigQuery ، مراحل زیر را انجام دهید:
    • در کنسول Google Cloud، به صفحه BigQuery بروید.
    • در پنجره Explorer ، پروژه خود را گسترش دهید و یک مجموعه داده را انتخاب کنید.
    • منوی سه نقطه را باز کنید و روی حذف کلیک کنید.
    • در گفتگوی حذف مجموعه داده ، delete در فیلد تایپ کنید و سپس روی Delete کلیک کنید. حذف مجموعه داده BigQuery.
  • برای حذف محیط سرویس ، مراحل زیر را انجام دهید:
    • در کنسول Google Cloud، Security و سپس VPC Service Controls را در سطحی که خط مشی دسترسی محدوده است، در این مورد، در سطح پوشه انتخاب کنید.
    • در صفحه VPC Service Controls، در ردیف جدول مربوط به محیطی که می خواهید حذف کنید، Delete Icon انتخاب کنید.
  • برای حذف سطح دسترسی ، مراحل زیر را انجام دهید:
    • در کنسول Google Cloud، صفحه Access Context Manager را در محدوده پوشه باز کنید.
    • در شبکه، ردیفی را برای سطح دسترسی که می‌خواهید حذف کنید مشخص کنید، منوی سه نقطه را انتخاب کنید و سپس حذف را انتخاب کنید.
  • برای خاموش کردن پروژه ها مراحل زیر را انجام دهید:
    • در کنسول Google Cloud، به صفحه IAM & Admin Settings پروژه ای که می خواهید حذف کنید بروید.
    • در صفحه IAM & Admin Settings، Shutdown را انتخاب کنید.
    • شناسه پروژه را وارد کرده و Shutdown anyway را انتخاب کنید.

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

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

بیشتر بدانید

می توانید سناریوهای زیر را نیز بررسی کنید:

  • project-1 در محیط دیگری اضافه کنید که از BigQuery، BigQuery Data Transfer Service و Cloud Storage نیز محافظت می کند.
  • انتقال داده BigQuery را از سایر منابع پشتیبانی شده انجام دهید.
  • دسترسی کاربر را با سایر ویژگی‌ها، مانند خط‌مشی مکان یا دستگاه، محدود کنید.

مجوز

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