تامین امنیت نرم افزار

۱. مرور کلی

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

5af5e4da3ccfdff3.png

در این آزمایشگاه، شما یاد می‌گیرید که چگونه وظایف زیر را انجام دهید.

  • برای استقرار بسته‌های خصوصی خود از مخازن استاندارد استفاده کنید
  • استفاده از مخازن راه دور برای ذخیره سازی بسته های مرکزی maven
  • از مخازن مجازی برای ترکیب چندین مخزن بالادستی در یک پیکربندی استفاده کنید

تنظیم محیط خودتنظیم

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه ، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. می‌توانید آن را در هر زمانی به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاه‌های کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان PROJECT_ID شناخته می‌شود). اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند.
  • برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، می‌توانید منابعی را که ایجاد کرده‌اید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

تنظیمات فضای کاری

جی کلود را تنظیم کنید

در Cloud Shell، شناسه پروژه و شماره پروژه خود را تنظیم کنید. آنها را به عنوان متغیرهای PROJECT_ID و PROJECT_NUMBER ذخیره کنید.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

فعال کردن APIها

gcloud services enable artifactregistry.googleapis.com

مخزن را کلون کنید

git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis

۲. مخازن استاندارد

مخازن استاندارد راهی برای ذخیره بسته‌های خصوصی شما و اشتراک‌گذاری آنها در سایر برنامه‌هایتان فراهم می‌کنند.

ایجاد یک مخزن استاندارد maven

از Cloud Shell دستور زیر را برای ایجاد مخزنی برای مصنوعات جاوا اجرا کنید:

gcloud artifacts repositories create container-dev-java-repo \
    --repository-format=maven \
    --location=us-central1 \
    --description="Java package repository for Container Dev Workshop"

اگر پیام مجوز Cloud Shell ظاهر شد، روی تأیید کلیک کنید.

به Google Cloud Console - Artifact Registry - Repositories بروید و مخزن Maven تازه ایجاد شده خود با نام container-dev-java-repo را مشاهده کنید، اگر روی آن کلیک کنید، می‌بینید که در حال حاضر خالی است.

gcloud artifacts repositories describe container-dev-java-repo \
    --location=us-central1

باید پاسخی مشابه زیر برگرداند

Encryption: Google-managed key
Repository Size: 0.000MB
createTime: '2023-03-21T19:01:45.461589Z'
description: Java package repository for Container Dev Workshop
format: MAVEN
mavenConfig: {}
mode: STANDARD_REPOSITORY
name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo
updateTime: '2023-03-21T19:01:45.461589Z'

پیکربندی Maven برای رجیستری مصنوعات

دستور زیر را برای چاپ پیکربندی مخزن جهت اضافه کردن به پروژه جاوا خود اجرا کنید:

gcloud artifacts print-settings mvn \
    --repository=container-dev-java-repo \
    --location=us-central1

دستور قبلی xml را برمی‌گرداند تا به پروژه‌های شما pom.xml اضافه شود.

  • بخش مخازن مشخص می‌کند که Maven می‌تواند مصنوعات از راه دور را برای استفاده توسط پروژه فعلی دانلود کند.
  • بخش distributionManagement مشخص می‌کند که پروژه هنگام استقرار به کدام مخزن راه دور ارسال خواهد شد.
  • بخش افزونه‌ها artifactregistry-maven-wagon را اضافه می‌کند که لایه احراز هویت و انتقال مورد نیاز برای اتصال به Artifact Registry را فعال می‌کند.
  • نکته: افزونه‌ها می‌توانند در pom.xml یا extensions.xml وجود داشته باشند. در مواردی که پروژه به یک پروژه والد وابسته است، به آن وابستگی‌ها قبل از بارگذاری بقیه ورودی‌های pom.xml دسترسی پیدا می‌شود. برای اطمینان از دسترسی والد به افزونه، می‌توان آن را در یک فایل extensions.xml قرار داد که قبل از pom.xml بارگذاری می‌شود و در نتیجه برای وابستگی‌های والد در دسترس قرار می‌گیرد.

سه بخش را کپی کنید، سپس فایل pom.xml را در ویرایشگر Cloud Shell باز کنید و تنظیمات برگردانده شده را به انتهای فایل، درست داخل تگ پایانی project اضافه کنید.

نکته: در cloudshell، دستور زیر را در ترمینال اجرا کنید تا ویرایشگر در دایرکتوری فعلی باز شود.

cloudshell workspace .

مثال: (نام پروژه‌های شما در URL های شما متفاوت خواهد بود)

  ...

  <distributionManagement>
    <snapshotRepository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </snapshotRepository>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </repository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <build>
    <extensions>
      <extension>
        <groupId>com.google.cloud.artifactregistry</groupId>
        <artifactId>artifactregistry-maven-wagon</artifactId>
        <version>2.2.0</version>
      </extension>
    </extensions>
  </build>

</project>

بسته جاوا خود را در رجیستری Artifact آپلود کنید

با پیکربندی Artifact Registry در Maven، اکنون می‌توانید از Artifact Registry برای ذخیره فایل‌های جاوا (Java jars) جهت استفاده توسط سایر پروژه‌های سازمان خود استفاده کنید.

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

mvn deploy -DskipTests

اگر می‌خواهید این دستور را دوباره اجرا کنید، حتماً نسخه را در pom.xml افزایش دهید.

بسته جاوا را در رجیستری Artifact بررسی کنید

به Cloud Console - Artifact Registry - Repositories بروید و روی container-dev-java-repo کلیک کنید و بررسی کنید که فایل باینری hello-world در آنجا وجود داشته باشد:

۱۴۷eac5168648db1.png

۳. مخازن راه دور

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

ایجاد یک مخزن از راه دور

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

از Cloud Shell دستور زیر را برای ایجاد یک مخزن راه دور برای مصنوعات Maven Central اجرا کنید:

gcloud artifacts repositories create maven-central-cache \
    --project=$PROJECT_ID \
    --repository-format=maven \
    --location=us-central1 \
    --description="Remote repository for Maven Central caching" \
    --mode=remote-repository \
    --remote-repo-config-desc="Maven Central" \
    --remote-mvn-repo=MAVEN-CENTRAL

مخزن را در کنسول بررسی کنید

به Cloud Console - Artifact Registry - Repositories بروید. روی maven-central-cache کلیک کنید و متوجه شوید که ایجاد شده و در حال حاضر خالی است.

مخزن را در ترمینال بررسی کنید

gcloud artifacts repositories describe maven-central-cache \
    --location=us-central1

مخزن را در پروژه خود ادغام کنید

دستور زیر را برای چاپ پیکربندی مخزن جهت اضافه کردن به پروژه جاوا خود اجرا کنید:

gcloud artifacts print-settings mvn \
    --repository=maven-central-cache \
    --location=us-central1

بخش مخزن (repository) را به فایل pom.xml خود اضافه کنید. مطمئن شوید که تگ بیرونی <repositories> را از خروجی کپی نمی‌کنید.

شناسه مخزن تازه اضافه شده را به "central" تغییر دهید تا مطمئن شوید که هر ورودی مخزن یک شناسه منحصر به فرد دارد.

مثال: (نام پروژه‌های شما در URL های شما متفاوت خواهد بود)

  ...

  <distributionManagement>
    <snapshotRepository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </snapshotRepository>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </repository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>

    <repository>
      <id>central</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>


  </repositories>

  <build>
    <extensions>
      <extension>
        <groupId>com.google.cloud.artifactregistry</groupId>
        <artifactId>artifactregistry-maven-wagon</artifactId>
        <version>2.2.0</version>
      </extension>
    </extensions>
  </build>

</project>

دستورات زیر را در ترمینال خود اجرا کنید تا یک extensions.xml برای پروژه خود ایجاد کنید. برای استفاده از مکانیزم اصلی extensions، اطمینان حاصل کنید که Maven می‌تواند وابستگی‌های والد یا افزونه را از Artifact Registry حل کند.

mkdir .mvn 
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
  <extension>
    <groupId>com.google.cloud.artifactregistry</groupId>
    <artifactId>artifactregistry-maven-wagon</artifactId>
    <version>2.2.0</version>
  </extension>
</extensions>
EOF

وابستگی‌ها را از مخزن راه دور دریافت کنید

دستور زیر را برای کامپایل برنامه خود با استفاده از Remote Repository اجرا کنید:

rm -rf ~/.m2/repository 
mvn compile

بررسی بسته‌های موجود در کنسول

به Cloud Console - Artifact Registry - Repositories بروید و روی maven-central-cache کلیک کنید و بررسی کنید که مصنوعات باینری در آنجا ذخیره شده باشند:

9deea93caa5fefd7.png

۴. مخازن مجازی

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

ایجاد فایل سیاست

cat > ./policy.json << EOF
[
  {
    "id": "private",
    "repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
    "priority": 100
  },
  {
    "id": "central",
    "repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
    "priority": 80
  }
]

EOF

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

gcloud artifacts repositories create virtual-maven-repo \
    --project=${PROJECT_ID} \
    --repository-format=maven \
    --mode=virtual-repository \
    --location=us-central1 \
    --description="Virtual Maven Repo" \
    --upstream-policy-file=./policy.json

مخزن را در پروژه خود ادغام کنید

دستور زیر را برای چاپ پیکربندی مخزن جهت اضافه کردن به پروژه جاوا خود اجرا کنید:

gcloud artifacts print-settings mvn \
    --repository=virtual-maven-repo \
    --location=us-central1

کل بخش مخازن (repositories) در pom خود را با بخش one virtual repositories از خروجی جایگزین کنید.

مثال: (نام پروژه‌های شما در URL های شما متفاوت خواهد بود)

  ...


  <distributionManagement>
    <snapshotRepository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </snapshotRepository>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </repository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <build>
    <extensions>
      <extension>
        <groupId>com.google.cloud.artifactregistry</groupId>
        <artifactId>artifactregistry-maven-wagon</artifactId>
        <version>2.2.0</version>
      </extension>
    </extensions>
  </build>

</project>


وابستگی‌ها را از مخزن مجازی دریافت کنید

از آنجایی که مخزن مجازی یک مخزن موقت است و هیچ بسته واقعی را ذخیره نمی‌کند، برای نمایش واضح‌تر فرآیند، مخزن maven-central-cache را که قبلاً ایجاد کرده‌اید حذف کرده و آن را دوباره ایجاد می‌کنید تا دوباره با یک مخزن خالی شروع کنید.

برای ایجاد مجدد مخزن کش، دستورات زیر را اجرا کنید

gcloud artifacts repositories delete maven-central-cache \
    --project=$PROJECT_ID \
    --location=us-central1 \
    --quiet

gcloud artifacts repositories create maven-central-cache \
    --project=$PROJECT_ID \
    --repository-format=maven \
    --location=us-central1 \
    --description="Remote repository for Maven Central caching" \
    --mode=remote-repository \
    --remote-repo-config-desc="Maven Central" \
    --remote-mvn-repo=MAVEN-CENTRAL

می‌توانید مخزن خالی را در کنسول بررسی کنید. به Cloud Console - Artifact Registry - Repositories بروید.

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

rm -rf ~/.m2/repository 
mvn compile

بررسی بسته‌های موجود در کنسول

به Cloud Console - Artifact Registry - Repositories بروید و روی maven-central-cache کلیک کنید و بررسی کنید که آیا مصنوعات باینری برای استخراج از مخزن مجازی پیکربندی شده‌اند یا خیر، اما در نهایت از maven-central-cache استخراج شده‌اند:

9deea93caa5fefd7.png

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

تبریک می‌گویم، شما codelab را تمام کردید!

آنچه شما پوشش داده‌اید

  • مخازن استاندارد مورد استفاده برای استقرار بسته‌های خصوصی شما
  • استفاده از مخازن راه دور برای ذخیره سازی بسته های مرکزی maven
  • از مخازن مجازی برای ترکیب چندین مخزن بالادستی در یک پیکربندی استفاده شد

پاکسازی

برای حذف پروژه دستور زیر را اجرا کنید

gcloud projects delete ${PROJECT_ID}

آخرین به‌روزرسانی: 23/3/22