Akun Layanan Kustom untuk Cloud Build (generasi ke-1)

Cloud Run Functions memanfaatkan Cloud Build saat membangun dan men-deploy fungsi Cloud Run Anda. Secara default, Cloud Run Functions menggunakan akun layanan Cloud Build default sebagai prinsipal saat melakukan build Anda. Mulai Juli 2024, Cloud Build telah mengubah perilaku default tentang cara Cloud Build menggunakan akun layanan di project baru. Perubahan ini dijelaskan dalam Perubahan Akun Layanan Cloud Build. Sebagai akibat dari perubahan ini, project baru yang men-deploy fungsi untuk pertama kalinya mungkin menggunakan akun layanan Cloud Build default dengan izin yang tidak memadai untuk membangun fungsi. Jika Anda terpengaruh oleh perubahan ini, Anda dapat melakukan salah satu hal berikut:

  • Tinjau panduan Cloud Build tentang perubahan pada akun layanan default dan pilih untuk tidak menerapkan perubahan ini.

  • Tambahkan peran Akun Cloud Build (roles/cloudbuild.builds.builder) ke akun layanan Compute Engine default.

  • Buat akun layanan Cloud Build kustom untuk deployment fungsi.

Dokumen ini menjelaskan cara meneruskan akun layanan yang dibuat pengguna, yang akan digunakan oleh Cloud Build, saat men-deploy fungsi Anda.

Anda dapat men-deploy fungsi dengan akun layanan kustom menggunakan Google Cloud CLI, konsolGoogle Cloud , atau Cloud Run Functions API.

Berikut beberapa skenario saat Anda mungkin ingin menyediakan akun layanan yang berbeda untuk digunakan saat Cloud Build membangun fungsi Anda:

  • Anda menginginkan kontrol yang lebih besar atas akun layanan yang akan ditambahkan ke perimeter VPC-SC Anda.

  • Anda ingin Cloud Build berjalan dengan izin yang berbeda dari yang dimiliki akun layanan default tanpa harus mencabut setiap izin satu per satu.

  • Anda ingin menetapkan izin Cloud Build terperinci khusus untuk fungsi Anda, bukan membagikan akun layanan Cloud Build yang dioptimalkan untuk tujuan lain.

  • Organisasi Anda menonaktifkan penggunaan akun layanan default.

Mengaktifkan API

Fitur ini memerlukan pengaktifan IAM API.

Gunakan Google Cloud CLI untuk mengaktifkan API yang diperlukan untuk men-deploy fungsi Cloud Run, atau gunakan konsolGoogle Cloud :

gcloud services enable iam.googleapis.com

Mengonfigurasi Akun Layanan

Dokumen ini menjelaskan cara membuat akun layanan baru dan memberikan izin yang diperlukan. Jika ingin menggunakan akun layanan yang ada, Anda memerlukan alamat email akun layanan yang akan digunakan. Lihat mengonfigurasi akun layanan yang ditentukan pengguna untuk mengetahui detailnya.

Anda dapat melihat akun layanan yang ada sebagai berikut, atau menggunakan konsolGoogle Cloud :

gcloud iam service-accounts list

Membuat Akun Layanan

Gunakan Google Cloud CLI untuk membuat akun layanan atau gunakan konsol Google Cloud :

gcloud iam service-accounts create SA_EMAIL

Ganti SA_EMAIL dengan alamat email akun layanan Anda.

Memberikan Izin

Akun layanan yang Anda gunakan memerlukan peran berikut:

  • roles/logging.logWriter— Diperlukan untuk menyimpan log build di Cloud Logging.
  • roles/artifactregistry.writer— Diperlukan untuk menyimpan image build di Artifact Registry. Untuk perilaku default, akun layanan memerlukan akses ke repositori bernama "gcf-artifacts" dan "cloud-run-source-deploy". Akses ke repositori dapat ditetapkan pada kebijakan IAM repositori. Sebagai alternatif, Anda dapat menyediakan repositori artefak Anda sendiri melalui kolom dockerRepository.
  • roles/storage.objectViewer— Diperlukan untuk mengambil sumber fungsi dari bucket Cloud Storage, dan untuk menyimpan image build di Container Registry. Untuk perilaku default, akun layanan memerlukan akses ke bucket yang bernama "gcf-sources-*". Hal ini dapat dilakukan dengan menambahkan kondisi IAM ke pemberian peran seperti: (resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-sources-")))

  • roles/storage.objectAdmin— Diperlukan untuk container registry (kini tidak digunakan lagi). Akses ke bucket bernama *.artifacts.PROJECT_ID.appspot.com diperlukan untuk mengakses container registry.

Berikan peran berikut menggunakan Google Cloud CLI, atau gunakan konsolGoogle Cloud .

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
    --role=roles/logging.logWriter

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/artifactregistry.writer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectViewer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectAdmin

Ganti kode berikut:

Pertimbangan Kontrol Layanan VPC

Jika Anda memiliki perimeter Kontrol Layanan VPC yang melindungi project dan Cloud Run Functions API, dan jika Anda menggunakan akun layanan default Compute Engine sebagai peran Akun Layanan Cloud Build untuk Cloud Run Functions, Anda harus membuat aturan ingress berikut:

  • Izinkan ingress akun layanan default Compute Engine ke semua metode di Cloud Storage dan Cloud Logging API.
  • Izinkan ingress service-[PROJECT_NUMBER]@gcf-admin-robot.iam.gserviceaccount.com akun layanan ke semua metode di Cloud Storage dan Cloud Logging API.

Men-deploy fungsi dengan akun layanan kustom

Anda dapat menggunakan Google Cloud CLI untuk men-deploy fungsi yang menggunakan akun layanan kustom untuk Cloud Build:

  • Flag --build-service-account menentukan akun layanan IAM yang kredensialnya akan digunakan untuk langkah build. Jika akun layanan kustom tidak diberikan, fungsi akan menggunakan akun layanan default project untuk Cloud Build.
  • Anda dapat secara opsional menggunakan pool pribadi, yang Anda tentukan menggunakan flag --build-worker-pool.

gcloud functions deploy FUNCTION_NAME \
   --no-gen2 \
   --region=REGION \
   --project=PROJECT_ID \
   --runtime=RUNTIME \
   --entry-point=CODE_ENTRYPOINT \
   --build-service-account=projects/PROJECT_ID/serviceAccounts/SA_EMAIL \
   --memory=256Mi \
   --trigger-http \
   --source=.

Ganti kode berikut: