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

1. بررسی اجمالی

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

5af5e4da3ccfdff3.png

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

راه اندازی فضای کاری

gcloud را راه اندازی کنید

در 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

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

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

یک مخزن استاندارد 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 ظاهر شد روی Authorize کلیک کنید

به 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 Editor باز کنید و تنظیمات بازگشتی را به پایین فایل درست در داخل تگ بسته شدن 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 Registry آپلود کنید

با پیکربندی Artifact Registry در Maven، اکنون می توانید از Artifact Registry برای ذخیره شیشه های جاوا برای استفاده توسط پروژه های دیگر در سازمان خود استفاده کنید.

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

mvn deploy -DskipTests

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

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

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

147eac5168648db1.png

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

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

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

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

از 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

بخش مخزن را به pom.xml خود اضافه کنید. مطمئن شوید که تگ <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/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 برای پروژه خود ایجاد کنید.

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 خارج کنید

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

rm -rf ~/.m2/repository 
mvn compile

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

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

9deea93caa5fefd7.png

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

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

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

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

کل بخش مخازن را در pom خود با بخش یک مخازن مجازی از خروجی جایگزین کنید.

مثال: (نام پروژه شما در 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

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

تبریک می گویم، شما نرم افزار کد را تمام کردید!

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

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

پاک کردن

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

gcloud projects delete ${PROJECT_ID}

-

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