Mengamankan Pasokan Software

1. Ringkasan

Artifact Registry memungkinkan Anda menyimpan berbagai jenis artefak, membuat beberapa repositori dalam satu project, dan mengaitkan region tertentu atau multi-region dengan setiap repositori. Ada beberapa jenis mode repositori. Setiap mode memiliki tujuan yang berbeda. Diagram berikut menunjukkan salah satu dari banyak cara menggunakan repositori dalam berbagai mode secara bersamaan. Diagram ini menunjukkan alur kerja di dua project Google Cloud. Dalam project pengembangan, developer membangun aplikasi Java. Dalam project runtime terpisah, build lain membuat image container dengan aplikasi untuk deployment ke Google Kubernetes Engine.

5af5e4da3ccfdff3.png

Di lab ini, Anda akan mempelajari cara melakukan tugas berikut.

  • Menggunakan Repositori Standar untuk men-deploy paket pribadi Anda
  • Menggunakan Repositori Jarak Jauh untuk meng-cache paket Maven Central
  • Menggunakan Repositori Virtual untuk menggabungkan beberapa repositori upstream dalam satu konfigurasi

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number , yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai$300 USD.

Penyiapan Workspace

Menyiapkan gcloud

Di Cloud Shell, tetapkan project ID dan nomor project Anda. Simpan sebagai variabel PROJECT_ID dan PROJECT_NUMBER.

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

Mengaktifkan API

gcloud services enable artifactregistry.googleapis.com

Meng-clone repo

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

2. Repositori standar

Repositori Standar menyediakan cara untuk menyimpan paket pribadi dan membagikannya ke seluruh aplikasi Anda yang lain

Membuat repositori maven standar

Dari Cloud Shell, jalankan perintah berikut untuk membuat repositori artefak Java:

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

Klik Authorize jika perintah otorisasi Cloud Shell muncul

Buka Google Cloud Console - Artifact Registry - Repositories dan perhatikan repositori Maven yang baru dibuat dengan nama container-dev-java-repo. Jika Anda mengkliknya, Anda akan melihat bahwa repositori tersebut kosong saat ini.

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

Tampilan respons akan mirip dengan yang berikut

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'

Mengonfigurasi Maven untuk Artifact Registry

Jalankan perintah berikut untuk mencetak konfigurasi repositori yang akan ditambahkan ke project Java Anda:

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

Perintah sebelumnya menampilkan xml yang akan ditambahkan ke dalam pom.xml project Anda.

  • Bagian repositories menentukan tempat Maven dapat mendownload artefak jarak jauh untuk digunakan oleh project saat ini.
  • Bagian distributionManagement menentukan repositori jarak jauh tempat project akan dikirim untuk deployment-nya.
  • Bagian extensions menambahkan artifactregistry-maven-wagon yang memungkinkan lapisan transpor dan Autentikasi yang diperlukan untuk terhubung ke Artifact Registry
  • Catatan: Ekstensi dapat berada di pom.xml atau extensions.xml. Jika project bergantung pada project induk, dependensi tersebut akan diakses sebelum entri lainnya di pom.xml dimuat. Untuk memastikan project induk memiliki akses ke ekstensi, ekstensi dapat ditempatkan dalam file extensions.xml yang dimuat sebelum pom.xml sehingga ekstensi itu akan tersedia bagi dependensi induk.

Salin ketiga bagian tersebut, lalu buka pom.xml di Cloud Shell Editor dan tambahkan setelan yang ditampilkan ke bagian bawah file tepat di dalam tag project penutup.

Tips: Di cloudshell, jalankan perintah berikut di terminal untuk membuka editor di direktori saat ini.

cloudshell workspace .

Contoh: (nama project Anda akan berbeda di URL Anda)

  ...

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

Mengupload paket Java Anda ke Artifact Registry

Dengan Artifact Registry yang dikonfigurasi di Maven, Anda kini dapat menggunakan Artifact Registry untuk menyimpan file jar Java untuk digunakan oleh project lain di organisasi Anda.

Jalankan perintah berikut untuk mengupload paket Java Anda ke Artifact Registry:

mvn deploy -DskipTests

Jika Anda ingin menjalankan perintah ini lagi, pastikan untuk meningkatkan versi di pom.xml.

Memeriksa paket Java di Artifact Registry

Buka Cloud Console - Artifact Registry - Repositories Klik container-dev-java-repo, lalu periksa apakah artefak biner hello-world ada di repositori tersebut:

147eac5168648db1.png

3. Repositori jarak jauh

Repositori Jarak Jauh memberikan kemampuan untuk meng-cache paket pihak ketiga guna meningkatkan keandalan dan keamanan.

Membuat repositori jarak jauh

Catatan: Untuk mengetahui detail tentang autentikasi dan konfigurasi, tinjau dokumentasi produk.

Dari Cloud Shell, jalankan perintah berikut untuk membuat repositori jarak jauh bagi artefak 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

Meninjau repositori di konsol

Buka Cloud Console - Artifact Registry - Repositories Klik maven-central-cache dan perhatikan bahwa repositori tersebut telah dibuat dan saat ini kosong

Meninjau repositori di terminal

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

Mengintegrasikan repositori ke dalam project Anda

Jalankan perintah berikut untuk mencetak konfigurasi repositori yang akan ditambahkan ke project Java Anda:

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

Tambahkan bagian repositori ke dalam pom.xml Anda. Pastikan untuk tidak menyalin tag <repositories> terluar dari output.

Ubah ID repositori yang baru ditambahkan menjadi "central" untuk memastikan setiap entri repositori memiliki ID unik.

Contoh: (nama project Anda akan berbeda di URL Anda)

  ...

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

Jalankan perintah berikut di terminal untuk membuat extensions.xml bagi project Anda. Tindakan ini menggunakan mekanisme ekstensi inti sehingga Maven dapat me-resolve dependensi plugin atau induk dari 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

Menarik dependensi dari Repositori Jarak Jauh

Jalankan perintah berikut untuk mengompilasi aplikasi Anda menggunakan Repositori Jarak Jauh:

rm -rf ~/.m2/repository 
mvn compile

Meninjau paket di konsol

Buka Cloud Console - Artifact Registry - Repositories Klik maven-central-cache dan periksa apakah artefak biner di-cache di sana:

9deea93caa5fefd7.png

4. Repositori virtual

Repositori Virtual berfungsi sebagai antarmuka untuk mengakses beberapa repositori melalui satu konfigurasi. Hal ini menyederhanakan konfigurasi klien untuk konsumen artefak Anda dan meningkatkan keamanan dengan memitigasi serangan confusion dependensi.

Buat file kebijakan

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

Buat repositori virtual

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

Mengintegrasikan repositori ke dalam project Anda

Jalankan perintah berikut untuk mencetak konfigurasi repositori yang akan ditambahkan ke project Java Anda:

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

Ganti seluruh bagian repositori di pom Anda dengan satu bagian repositori virtual dari output.

Contoh: (nama project Anda akan berbeda di URL Anda)

  ...


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


Menarik dependensi dari Repositori Virtual

Karena repositori Virtual berfungsi sebagai perantara dan tidak akan menyimpan paket sebenarnya, untuk mendemonstrasikan prosesnya dengan jelas, Anda akan menghapus repositori maven-central-cache yang Anda buat sebelumnya dan membuatnya kembali, untuk memulai lagi dengan repositori kosong

Jalankan perintah berikut untuk membuat ulang repositori 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

Anda dapat meninjau repositori kosong di konsol. Buka Cloud Console - Artifact Registry - Repositories

Sekarang, uji repositori virtual dengan membangun project Anda menggunakan perintah berikut

rm -rf ~/.m2/repository 
mvn compile

Meninjau paket di konsol

Buka Cloud Console - Artifact Registry - Repositories Klik maven-central-cache dan pastikan bahwa artefak biner yang sebelumnya dikonfigurasi untuk melakukan penarikan dari repositori virtual, akhirnya diubah ke maven-central-cache:

9deea93caa5fefd7.png

5. Selamat!

Selamat, Anda telah menyelesaikan codelab!

Yang telah Anda pelajari

  • Menggunakan Repositori Standar untuk men-deploy paket pribadi Anda
  • Menggunakan Repositori Jarak Jauh untuk meng-cache paket Maven Central
  • Menggunakan Repositori Virtual untuk menggabungkan beberapa repositori upstream dalam satu konfigurasi

Pembersihan

Jalankan perintah berikut untuk menghapus project

gcloud projects delete ${PROJECT_ID}

Terakhir diperbarui: 22/3/2023