Memecahkan masalah error kebijakan organisasi untuk akun layanan

Layanan Kebijakan Organisasi memiliki beberapa batasan terkelola dan telah ditetapkan yang dapat memengaruhi akun layanan di organisasi Anda. Halaman ini membantu Anda memahami error yang dihasilkan oleh kebijakan organisasi tersebut, dan langkah-langkah yang dapat Anda lakukan untuk mengatasi error tersebut.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan guna memecahkan masalah kebijakan organisasi, minta administrator untuk memberi Anda peran IAM Administrator kebijakan organisasi (roles/orgpolicy.policyAdmin) di organisasi. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran kustom atau peran yang telah ditentukan lainnya.

Memecahkan masalah pembuatan kunci akun layanan yang dinonaktifkan

Jika batasan iam.disableServiceAccountKeyCreation diterapkan untuk organisasi Anda, Anda tidak dapat membuat kunci untuk akun layanan apa pun di organisasi Anda. Untuk mengetahui informasi selengkapnya tentang batasan ini, lihat Menonaktifkan pembuatan kunci akun layanan.

Error pembuatan kunci

Jika Anda mencoba membuat kunci akun layanan, tetapi tindakan tersebut diblokir oleh batasan iam.disableServiceAccountKeyCreation, Anda akan mendapatkan pesan error berikut:

Konsol

Di konsol Google Cloud , dialog akan muncul dengan judul Pembuatan kunci akun layanan dinonaktifkan. Dialog menyatakan bahwa batasan iam.disableServiceAccountKeyCreation diterapkan pada organisasi Anda.

gcloud

ERROR: (gcloud.iam.service-accounts.keys.create) FAILED_PRECONDITION: Key
creation is not allowed on this service account.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: Key creation is not allowed on this service account.
    subject: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.
    type: constraints/iam.disableServiceAccountKeyCreation

REST

{
  "error": {
    "code": 400,
    "message": "Key creation is not allowed on this service account.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/iam.disableServiceAccountKeyCreation",
            "subject": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.",
            "description": "Key creation is not allowed on this service account."
          }
        ]
      }
    ]
  }
}

Resolusi yang direkomendasikan untuk error pembuatan kunci akun layanan

Jika kebijakan organisasi mencegah Anda membuat kunci akun layanan, sebaiknya lakukan hal berikut:

  1. Menilai apakah kunci akun layanan diperlukan.

    Sebaiknya jangan gunakan kunci akun layanan untuk autentikasi. Hal ini karena kunci akun layanan dapat menjadi risiko keamanan jika tidak dikelola dengan benar, sehingga meningkatkan kerentanan Anda terhadap ancaman seperti kebocoran kredensial, eskalasi hak istimewa, pengungkapan informasi, dan penyangkalan.

    Dalam sebagian besar kasus, Anda harus menggunakan alternatif yang lebih aman untuk melakukan autentikasi, bukan menggunakan kunci akun layanan.

  2. Jika kunci akun layanan diperlukan untuk kasus penggunaan Anda, nonaktifkan batasan iam.disableServiceAccountKeyCreation untuk project Anda.

Untuk menonaktifkan batasan kebijakan organisasi, nonaktifkan penerapan untuk batasan, atau kecualikan project Anda dari penerapan:

  • Untuk menonaktifkan penerapan batasan untuk seluruh organisasi Anda, lakukan hal berikut:

    1. Pastikan Anda memiliki peran Administrator Kebijakan Organisasi (roles/orgpolicy.policyAdmin) di tingkat organisasi. Peran ini hanya tersedia untuk diberikan di organisasi, dan tidak muncul dalam daftar peran untuk project.

      Untuk mempelajari cara memberikan peran di tingkat organisasi, lihat Mengelola akses ke project, folder, dan organisasi.

    2. Di konsol Google Cloud , buka halaman Organization policies.

      Buka Organization policies

    3. Di pemilih project, pilih organisasi yang ingin Anda nonaktifkan batasan iam.disableServiceAccountKeyCreation-nya.

    4. Di kolom Filter, masukkan iam.disableServiceAccountKeyCreation. Kemudian, di daftar kebijakan, klik Nonaktifkan pembuatan kunci akun layanan.

    5. Klik Manage Policy.

    6. Di bagian Policy source, pastikan Override parent's policy dipilih.

    7. Di bagian Enforcement, nonaktifkan penerapan untuk batasan kebijakan organisasi ini.

    8. Klik Setel kebijakan.

  • Untuk mengecualikan project Anda dari penegakan, lakukan hal berikut:

    1. Pastikan Anda memiliki peran Administrator Tag (roles/resourcemanager.tagAdmin) dan peran Administrator Kebijakan Organisasi (roles/orgpolicy.policyAdmin) di tingkat organisasi. Untuk mempelajari cara memberikan peran di tingkat organisasi, lihat Mengelola akses ke project, folder, dan organisasi.
    2. Di tingkat organisasi, buat kunci tag dan nilai tag yang akan Anda gunakan untuk menentukan apakah resource harus dikecualikan dari kebijakan organisasi. Sebaiknya buat tag dengan kunci disableServiceAccountKeyCreation dan nilai enforced dan not_enforced.

      Untuk mempelajari cara membuat kunci tag dan nilai tag, lihat Membuat dan menentukan tag baru.

    3. Lampirkan tag disableServiceAccountKeyCreation ke organisasi dan tetapkan nilainya ke enforced. Semua resource dalam organisasi mewarisi nilai tag ini, kecuali jika diganti dengan nilai tag yang berbeda.

      Untuk mempelajari cara melampirkan tag ke resource, lihat Melampirkan tag ke resource.

    4. Untuk setiap akun layanan yang ingin Anda kecualikan dari kebijakan organisasi, lampirkan tag disableServiceAccountKeyCreation dan tetapkan nilainya ke not_enforced. Menetapkan nilai tag untuk akun layanan dengan cara ini akan menggantikan nilai tag yang diwarisi dari organisasi.
    5. Buat atau perbarui kebijakan organisasi yang mencegah pembuatan kunci akun layanan sehingga tidak menerapkan batasan untuk resource yang dikecualikan. Kebijakan ini harus memiliki aturan berikut:

      • Konfigurasi batasan iam.disableServiceAccountKeyCreation agar tidak diterapkan pada resource apa pun dengan tag disableServiceAccountKeyCreation: not_enforced. Kondisi dalam aturan ini akan terlihat seperti berikut:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
        
      • Konfigurasi batasan iam.disableServiceAccountKeyCreation agar diterapkan pada semua resource lainnya.

Memecahkan masalah pembuatan akun layanan yang dinonaktifkan

Jika batasan iam.disableServiceAccountCreation diterapkan untuk organisasi Anda, Anda tidak dapat membuat akun layanan di project mana pun di organisasi Anda. Untuk mengetahui informasi selengkapnya tentang batasan ini, lihat Menonaktifkan pembuatan akun layanan.

Error pembuatan akun layanan

Jika Anda mencoba membuat akun layanan, tetapi tindakan tersebut diblokir oleh batasan iam.disableServiceAccountCreation, Anda akan mendapatkan pesan error berikut:

Konsol

Di konsol Google Cloud , dialog akan muncul dengan judul Pembuatan akun layanan gagal. Dialog menyatakan, Tindakan yang dicoba gagal, coba lagi.

gcloud

ERROR: (gcloud.iam.service-accounts.create) FAILED_PRECONDITION: Service account
creation is not allowed on this project.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: Service account creation is not allowed on this project.
    subject: projects/PROJECT_ID/serviceAccounts/?configvalue=
    type: constraints/iam.disableServiceAccountCreation

REST

{
  "error": {
    "code": 400,
    "message": "Service account creation is not allowed on this project.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/iam.disableServiceAccountCreation",
            "subject": "projects/PROJECT_ID/serviceAccounts/?configvalue=",
            "description": "Service account creation is not allowed on this project."
          }
        ]
      }
    ]
  }
}

Resolusi yang direkomendasikan untuk error pembuatan akun layanan

Jika kebijakan organisasi mencegah Anda membuat akun layanan, sebaiknya Anda melakukan hal berikut:

  1. Menilai apakah akun layanan diperlukan.

    Tinjau Memilih waktu untuk menggunakan akun layanan guna mengonfirmasi bahwa akun layanan diperlukan untuk kasus penggunaan Anda.

  2. Jika akun layanan diperlukan untuk kasus penggunaan Anda, nonaktifkan batasan iam.disableServiceAccountCreation untuk project Anda.

Untuk menonaktifkan batasan kebijakan organisasi, nonaktifkan penerapan untuk batasan, atau kecualikan project Anda dari penerapan:

  • Untuk menonaktifkan penerapan batasan untuk seluruh organisasi Anda, lakukan hal berikut:

    1. Pastikan Anda memiliki peran Administrator Kebijakan Organisasi (roles/orgpolicy.policyAdmin) di tingkat organisasi. Peran ini hanya tersedia untuk diberikan di organisasi, dan tidak muncul dalam daftar peran untuk project.

      Untuk mempelajari cara memberikan peran di tingkat organisasi, lihat Mengelola akses ke project, folder, dan organisasi.

    2. Di konsol Google Cloud , buka halaman Organization policies.

      Buka Organization policies

    3. Di pemilih project, pilih organisasi yang ingin Anda nonaktifkan batasan iam.disableServiceAccountCreation-nya.

    4. Di kolom Filter, masukkan iam.disableServiceAccountCreation. Kemudian, di daftar kebijakan, klik Nonaktifkan pembuatan akun layanan.

    5. Klik Manage Policy.

    6. Di bagian Policy source, pastikan Override parent's policy dipilih.

    7. Di bagian Enforcement, nonaktifkan penerapan untuk batasan kebijakan organisasi ini.

    8. Klik Setel kebijakan.

  • Untuk mengecualikan project Anda dari penegakan, lakukan hal berikut:

    1. Pastikan Anda memiliki peran Administrator Tag (roles/resourcemanager.tagAdmin) dan peran Administrator Kebijakan Organisasi (roles/orgpolicy.policyAdmin) di tingkat organisasi. Untuk mempelajari cara memberikan peran di tingkat organisasi, lihat Mengelola akses ke project, folder, dan organisasi.
    2. Di tingkat organisasi, buat kunci tag dan nilai tag yang akan Anda gunakan untuk menentukan apakah resource harus dikecualikan dari kebijakan organisasi. Sebaiknya buat tag dengan kunci disableServiceAccountCreation dan nilai enforced dan not_enforced.

      Untuk mempelajari cara membuat kunci tag dan nilai tag, lihat Membuat dan menentukan tag baru.

    3. Lampirkan tag disableServiceAccountCreation ke organisasi dan tetapkan nilainya ke enforced. Semua resource dalam organisasi mewarisi nilai tag ini, kecuali jika diganti dengan nilai tag yang berbeda.

      Untuk mempelajari cara melampirkan tag ke resource, lihat Melampirkan tag ke resource.

    4. Untuk setiap project atau folder yang ingin Anda kecualikan dari kebijakan organisasi, lampirkan tag disableServiceAccountCreation dan tetapkan nilainya ke not_enforced. Menetapkan nilai tag untuk project atau folder dengan cara ini akan menggantikan nilai tag yang diwarisi dari organisasi.
    5. Buat atau perbarui kebijakan organisasi yang mencegah pembuatan akun layanan sehingga tidak menerapkan batasan untuk resource yang dikecualikan. Kebijakan ini harus memiliki aturan berikut:

      • Konfigurasi batasan iam.disableServiceAccountCreation agar tidak diterapkan pada resource apa pun dengan tag disableServiceAccountCreation: not_enforced. Kondisi dalam aturan ini akan terlihat seperti berikut:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
        
      • Konfigurasi batasan iam.disableServiceAccountCreation agar diterapkan pada semua resource lainnya.

Memecahkan masalah pemberian peran ke akun layanan default

Akun layanan default dibuat secara otomatis saat Anda menggunakan layananGoogle Cloud tertentu. Mereka memiliki ID berikut:

  • Akun layanan default App Engine: PROJECT_ID@
  • Akun layanan default Compute Engine: PROJECT_NUMBER-compute@

Semua akun layanan default secara otomatis diberi peran Editor (roles/editor) saat dibuat, kecuali jika batasan kebijakan organisasi iam.automaticIamGrantsForDefaultServiceAccounts diterapkan untuk project Anda. Batasan ini mencegah peran Editor diberikan secara otomatis kepada akun layanan default.

Error saat memberikan peran dasar ke akun layanan

Jika batasan iam.automaticIamGrantsForDefaultServiceAccounts diterapkan untuk project Anda, workload di project Anda yang menggunakan akun layanan default mungkin mengalami error izin yang tidak memadai. Untuk mempelajari peran yang akan diberikan ke akun layanan default, lihat Resolusi yang direkomendasikan untuk memberikan peran ke akun layanan default.

Batasan iam.automaticIamGrantsForDefaultServiceAccounts tidak menyebabkan error dengan sendirinya. Namun, karena batasan ini, ada kemungkinan beban kerja yang menggunakan akun layanan default tidak akan memiliki izin yang diperlukan.

Resolusi yang direkomendasikan untuk memberikan peran ke akun layanan default

Jika kebijakan organisasi mencegah Anda memberikan peran Editor atau Pemilik ke akun layanan default, Anda harus menemukan peran yang kurang permisif untuk diberikan ke akun layanan. Peran yang diperlukan akun layanan bergantung pada layanan yang Anda gunakan dan tugas yang ingin Anda selesaikan.

Tinjau tabel berikut untuk menentukan peran yang akan diberikan ke akun layanan default, bergantung pada layanan yang Anda gunakan:

Layanan Akun layanan default Peran yang akan diberikan
App Engine Akun layanan default App Engine (PROJECT_ID@) Peran Akun Cloud Build (roles/cloudbuild.builds.builder)
Compute Engine Akun layanan default Compute Engine (PROJECT_NUMBER-compute@)

Peran yang diperlukan akun layanan default bergantung pada tugas yang ingin Anda selesaikan. Untuk mengetahui peran yang diperlukan, tinjau dokumentasi untuk tugas yang ingin Anda selesaikan, atau tinjau Menemukan peran standar yang tepat.

Saat memutuskan peran mana yang akan diberikan, ikuti praktik terbaik yang dijelaskan di halaman Akun layanan dalam dokumentasi Compute Engine.

Cloud Build Akun layanan default Compute Engine (PROJECT_NUMBER-compute@) Peran Akun Layanan Cloud Build (roles/cloudbuild.builds.builder)
Cloud Deploy Akun layanan default Compute Engine (PROJECT_NUMBER-compute@) Untuk melihat peran yang akan diberikan ke akun layanan ini, temukan panduan memulai Cloud Deploy yang sesuai dengan kasus penggunaan Anda, lalu berikan peran yang dijelaskan dalam panduan memulai tersebut. Untuk melihat daftar panduan memulai Cloud Deploy, lihat Panduan memulai di dokumentasi Cloud Deploy.
Cloud Run Functions dan Cloud Functions Akun layanan default Compute Engine (PROJECT_NUMBER-compute@)

Untuk men-deploy fungsi: Peran Akun Cloud Build (roles/cloudbuild.builds.builder)

Untuk mengetahui informasi selengkapnya, lihat Akun layanan kustom untuk Cloud Build.

Cloud Run Akun layanan default Compute Engine (PROJECT_NUMBER-compute@)

Peran yang diperlukan akun layanan default bergantung pada tugas yang ingin Anda selesaikan. Untuk mengetahui peran yang diperlukan, tinjau dokumentasi untuk tugas yang ingin Anda selesaikan, atau tinjau Menemukan peran standar yang tepat.

Untuk mengetahui detail tentang peran Cloud Run, lihat Kontrol akses dengan IAM dalam dokumentasi Cloud Run.

Google Kubernetes Engine Akun layanan default Compute Engine (PROJECT_NUMBER-compute@)

Peran Akun Layanan Node Default Kubernetes Engine (roles/container.defaultNodeServiceAccount)

Untuk mengetahui informasi selengkapnya, lihat Menggunakan akun layanan IAM dengan hak istimewa terendah.

Workflows Akun layanan default Compute Engine (PROJECT_NUMBER-compute@)

Peran yang diperlukan akun layanan default bergantung pada tugas yang ingin Anda selesaikan. Untuk mengetahui peran yang diperlukan, tinjau dokumentasi untuk tugas yang ingin Anda selesaikan, atau tinjau Menemukan peran standar yang tepat.

Ikuti praktik terbaik yang dijelaskan di halaman Memberikan izin alur kerja untuk mengakses resource Google Cloud dalam dokumentasi Workflows.