Mengonfigurasi identitas layanan

Layanan atau revisi Cloud Run memiliki identitas layanan yang digunakan sebagai akun terautentikasi untuk mengakses Google Cloud API dari container instance Cloud Run Anda. Untuk mempelajari identitas layanan lebih lanjut, lihat panduan Pengantar identitas layanan.

Cara identitas layanan digunakan

Di Cloud Run, identitas layanan adalah akun layanan yang merupakan resource dan akun utama.

  • Identitas layanan sebagai resource: Untuk mengaitkan akun layanan sebagai identitas layanan, akun deployer harus memiliki akses di resource identitas layanan. Operasi tertentu, seperti membuat atau mengupdate layanan atau revisi, mengharuskan akun deployer memiliki izin pada resource identitas layanan.
  • Identitas layanan sebagai akun utama: Untuk mengakses Google Cloud API dari layanan atau revisi Cloud Run, Anda harus memberi identitas layanan tersebut peran atau izin yang diperlukan untuk operasi yang Anda inginkan untuk dijalankan oleh layanan atau revisi.

Bagian berikutnya membahas peran yang diperlukan untuk memberikan akses akun deployer pada resource identitas layanan dan memberikan akses untuk akun utama akun layanan.

Peran yang diperlukan

Anda atau administrator Anda harus memberikan peran dan izin IAM untuk akun deployer dan identitas layanan.

Klik untuk melihat peran yang diperlukan untuk akun deployer

Untuk mendapatkan izin yang diperlukan untuk melampirkan akun layanan sebagai identitas layanan pada layanan atau revisi, Anda atau administrator harus memberikan peran Service Account User (roles/iam.serviceAccountUser) ke akun deployer pada akun layanan yang digunakan sebagai identitas layanan.

Peran yang telah ditetapkan ini berisi izin iam.serviceAccounts.actAs, yang diperlukan untuk menambahkan akun layanan pada layanan atau revisi. Anda mungkin juga bisa mendapatkan izin ini dengan mengonfigurasi peran khusus atau menggunakan peran standar lainnya.

Untuk petunjuk tentang cara memberikan peran ini kepada akun deployer pada identitas layanan, lihat izin deployment. Jika akun layanan berada dalam project yang berbeda dengan layanan atau revisi Cloud Run, Anda atau administrator Anda juga harus mengonfigurasi peran IAM untuk agen layanan Cloud Run dan menyiapkan kebijakan organisasi. Lihat menggunakan akun layanan dalam project lain untuk detail selengkapnya.

Klik untuk melihat peran yang diperlukan untuk identitas layanan

Agar identitas layanan dapat mengakses Google Cloud API dari Cloud Run, Anda atau administrator Anda harus memberikan izin atau peran yang diperlukan oleh operasi yang ingin Anda lakukan kepada identitas layanan. Untuk mengakses Library Klien Cloud tertentu, lihat dokumentasi Google Cloud untuk layanan Google Cloud.

Jika layanan atau revisi Cloud Run tidak mengakses layanan Google Cloud lainnya, Anda tidak perlu memberikan peran atau izin apa pun kepada identitas layanan. Anda juga dapat menggunakan akun layanan default yang ditetapkan ke project tersebut.

Mendapatkan rekomendasi untuk membuat akun layanan khusus

Saat Anda membuat akun layanan baru dari konsol Google Cloud, langkah opsional "Berikan akses project ke akun layanan ini" ditujukan untuk akses tambahan yang diperlukan. Misalnya, satu layanan Cloud Run mungkin memanggil layanan Cloud Run pribadi lainnya, atau mungkin mengakses database Cloud SQL, yang keduanya memerlukan peran IAM tertentu. Baca dokumentasi tentang mengelola akses untuk mengetahui informasi selengkapnya.

Layanan Pemberi rekomendasi juga otomatis memberikan rekomendasi untuk membuat akun layanan khusus dengan kumpulan izin minimal yang diperlukan.

Mengonfigurasi identitas layanan

Jika belum membuat akun layanan, Anda dapat membuat akun layanan yang dikelola pengguna di IAM, atau di Cloud Run.

Untuk mengonfigurasi identitas layanan, gunakan konsol Google Cloud, gcloud CLI, API (YAML) saat Anda membuat layanan baru atau men-deploy revisi baru, atau Terraform:

Konsol

  1. Di konsol Google Cloud, buka Cloud Run:

    Buka Cloud Run

  2. Klik Buat Layanan jika Anda mengonfigurasi layanan baru yang akan di-deploy. Jika Anda mengonfigurasi layanan yang ada, klik layanan, lalu klik Edit and deploy new revision.

  3. Jika Anda mengonfigurasi layanan baru, isi halaman setelan layanan awal sesuai keinginan, kemudian klik Container, vo;ume, jejaring, sekuritas untuk memperluas halaman konfigurasi layanan.

  4. Klik tab Keamanan.

    gambar

    • Klik menu dropdown Service account dan pilih akun layanan yang ada, atau klik Create a new service account jika ada.
  5. Klik Buat atau Deploy.

gcloud

Jika belum membuat akun layanan, Anda dapat membuat akun layanan yang dikelola pengguna di IAM.

Anda dapat mengupdate layanan yang ada agar memiliki akun layanan baru dengan menggunakan perintah berikut:

gcloud run services update SERVICE --service-account SERVICE_ACCOUNT

Ganti:

  • SERVICE dengan nama layanan Anda.
  • SERVICE_ACCOUNT dengan akun layanan yang terkait dengan identitas baru: nilai ini adalah alamat email untuk akun layanan, misalnya, example@myproject.iam.gserviceaccount.com.

Anda juga dapat menetapkan akun layanan selama deployment menggunakan perintah:

gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT

Replace:

  • IMAGE_URL dengan referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL berbentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • SERVICE_ACCOUNT dengan akun layanan yang terkait dengan identitas baru: nilai ini adalah alamat email untuk akun layanan, misalnya, example@myservice.iam.gserviceaccount.com.

YAML

Jika belum membuat akun layanan, Anda dapat membuat akun layanan yang dikelola pengguna di IAM.

  1. Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang ada, download konfigurasi YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Perbarui serviceAccountName: atribut:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: SERVICE_ACCOUNT
    

    Ganti

    • SERVICE dengan nama layanan Cloud Run Anda.
    • SERVICE_ACCOUNT dengan akun layanan yang terkait dengan identitas baru: nilai ini adalah alamat email untuk akun layanan, misalnya, SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  3. Buat atau update layanan menggunakan perintah berikut:

    gcloud run services replace service.yaml

Terraform

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Untuk membuat akun layanan, tambahkan resource berikut ke file main.tf Anda yang ada:

resource "google_service_account" "cloudrun_service_identity" {
  account_id = "my-service-account"
}

Buat atau perbarui layanan Cloud Run service dan sertakan akun layanan Anda:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloud-run-srv"
  location = "us-central1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    service_account = google_service_account.cloudrun_service_identity.email
  }
}

Menggunakan akun layanan dalam project lain

Jika Anda mengonfigurasi akun layanan dari project Google Cloud yang berbeda dengan resource Cloud Run, lakukan hal berikut:

  1. Anda atau administrator Anda harus memberikan peran Service Account User (roles/iam.serviceAccountUser) di akun layanan yang digunakan sebagai identitas layanan.

    Konsol

    1. Buka halaman akun Layanan di konsol Google Cloud:

      Buka halaman Service accounts

    2. Pilih alamat email akun layanan yang Anda gunakan sebagai identitas layanan.

    3. Klik tab Izin.

    4. Klik tombol Berikan akses.

    5. Masukkan alamat email akun deployer yang cocok dengan akun utama yang Anda beri peran Admin atau Developer.

    6. Di drop-down Select a role, pilih peran Service Accounts > Service Account User.

    7. Klik Save.

    gcloud

    Gunakan perintah gcloud iam service-accounts add-iam-policy-binding dengan mengganti variabel yang ditandai dengan nilai yang sesuai:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="PRINCIPAL" \
        --role="roles/iam.serviceAccountUser"
    

    Ganti:

    • SERVICE_ACCOUNT_NAME: Nama akun layanan tempat Anda menambahkan resource Cloud Run.
    • SERVICE_ACCOUNT_PROJECT_ID: Project ID tempat akun layanan berada.
    • PRINCIPAL dengan akun deployer yang Anda tambahi binding, menggunakan format user|group|serviceAccount:email atau domain:domain. Contoh:

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
  2. Anda atau administrator Anda harus memberikan peran Service Account Token Creator kepada agen layanan Cloud Run (roles/iam.serviceAccountTokenCreator) pada akun layanan yang Anda gunakan sebagai identitas layanan. Agen layanan mengikuti format service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    Konsol

    1. Buka halaman akun Layanan di konsol Google Cloud:

      Buka halaman Service accounts

    2. Pilih alamat email akun layanan yang Anda gunakan sebagai identitas layanan.

    3. Klik tab Izin.

    4. Klik tombol Berikan akses.

    5. Masukkan alamat email agen layanan. Contoh: service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com

    6. Di menu drop-down Select a role, pilih peran Service Accounts > Service Account Token Creator.

    7. Klik Save.

    gcloud

    Gunakan perintah gcloud iam service-accounts add-iam-policy-binding:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    Ganti nilai berikut:

    • SERVICE_ACCOUNT_NAME: Nama akun layanan tempat Anda menambahkan resource Cloud Run.
    • SERVICE_ACCOUNT_PROJECT_ID: Project ID tempat akun layanan berada.
    • CLOUD_RUN_RESOURCE_PROJECT_NUMBER: Nomor project tempat Cloud Run berada.

    Perintah ini mencetak kebijakan izin yang diperbarui untuk akun layanan yang dikelola pengguna.

  3. Project yang berisi akun layanan ini mengharuskan kebijakan organisasi iam.disableCrossProjectServiceAccountUsage disetel ke salah (false) atau tidak diterapkan di tingkat folder, atau diwarisi dari setelan level project. Secara default, nilai ini ditetapkan ke true.

    Konsol

    1. Buka halaman Kebijakan organisasi di Konsol Google Cloud:

      Buka Organization policies

    2. Dari pemilih project, pilih organisasi dan project yang penggunaan akun layanan lintas-projectnya ingin Anda nonaktifkan.

    3. Pilih kebijakan nonaktifkan penggunaan akun layanan lintas-project.

    4. Klik Manage Policy.

    5. Di bagian Sumber kebijakan, pilih Ganti kebijakan induk.

    6. Klik Tambahkan aturan.

    7. Di bagian Penegakan, pilih Nonaktif.

    8. Untuk menerapkan kebijakan, klik Tetapkan kebijakan.

    gcloud

    Pada project yang memiliki akun layanan, pastikan batasan kebijakan organisasi iam.disableCrossProjectServiceAccountUsage tidak diterapkan. Batasan ini diterapkan secara default.

    Untuk menonaktifkan batasan kebijakan organisasi ini, jalankan:

    gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage
        --project=SERVICE_ACCOUNT_PROJECT_ID
    

    Ganti SERVICE_ACCOUNT_PROJECT_ID dengan project ID yang berisi akun layanan.

Anda dapat menerapkan keanggotaan peran secara langsung ke resource akun layanan atau mendapatkannya dari level yang lebih tinggi dalam hierarki resource.

Langkah selanjutnya