Memecahkan masalah error kebijakan organisasi untuk akun layanan

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

Memecahkan masalah pembuatan kunci akun layanan yang dinonaktifkan

Jika batasan iam.disableServiceAccountKeyCreation diterapkan untuk organisasi, Anda tidak dapat membuat kunci untuk akun layanan apa pun di organisasi. 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.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com
    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.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com",
            "description": "Key creation is not allowed on this service account."
          }
        ]
      }
    ]
  }
}

Solusi yang direkomendasikan untuk error pembuatan kunci akun layanan

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

  1. Evaluasi 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 non-penolakan.

    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, lakukan tindakan 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 Set policy.

  • Untuk mengecualikan project Anda dari penerapan, 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 di organisasi mewarisi nilai tag ini, kecuali jika ditimpa 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 mengganti 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:

      • Konfigurasikan 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')"
        
      • Konfigurasikan batasan iam.disableServiceAccountKeyCreation yang akan diterapkan pada semua resource lainnya.

Memecahkan masalah pembuatan akun layanan yang dinonaktifkan

Jika batasan iam.disableServiceAccountCreation diterapkan untuk organisasi, Anda tidak dapat membuat akun layanan di project apa pun di organisasi. 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."
          }
        ]
      }
    ]
  }
}

Solusi yang direkomendasikan untuk error pembuatan akun layanan

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

  1. Evaluasi 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, lakukan tindakan 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 Set policy.

  • Untuk mengecualikan project Anda dari penerapan, 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 di organisasi mewarisi nilai tag ini, kecuali jika ditimpa 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:

      • Konfigurasikan 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')"
        
      • Konfigurasikan batasan iam.disableServiceAccountCreation yang akan diterapkan pada semua resource lainnya.

Memecahkan masalah pemberian peran ke akun layanan default

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

  • Akun layanan default layanan App Engine: PROJECT_ID@appspot.gserviceaccount.com
  • Akun layanan default Compute Engine: PROJECT_NUMBER-compute@developer.gserviceaccount.com

Semua akun layanan default secara otomatis diberi peran Editor (roles/editor) saat dibuat, kecuali jika perilaku tersebut dinonaktifkan oleh kebijakan organisasi. Ada dua batasan kebijakan organisasi yang mencegah peran Editor diberikan ke akun layanan default:

  • iam.automaticIamGrantsForDefaultServiceAccounts: Batasan bawaan yang mencegah akun layanan default diberi peran secara otomatis. Batasan ini tidak mencegah Anda memberikan peran Editor ke akun layanan default di lain waktu.
  • constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts: Batasan terkelola yang mencegah peran Editor dan Pemilik (roles/owner) diberikan kepada akun layanan default.

Error saat memberikan peran dasar ke akun layanan

Jika batasan iam.automaticIamGrantsForDefaultServiceAccounts atau batasan constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts diterapkan untuk project Anda, beban kerja dalam 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 Solusi yang direkomendasikan untuk memberikan peran ke akun layanan default.

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

Selain itu, jika batasan constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts diterapkan untuk project Anda, Anda akan melihat pesan error seperti berikut jika mencoba memberikan peran Pemilik atau Editor ke akun layanan default:

Konsol

Di konsol Google Cloud, dialog akan muncul dengan judul Kebijakan IAM gagal diperbarui. Dialog menyatakan bahwa perubahan yang Anda coba lakukan pada kebijakan IAM telah dibatasi oleh administrator kebijakan organisasi, lalu mencantumkan batasan yang memblokir pembaruan. Batasan yang tercantum mencakup batasan customConstraints/custom.cantGrantProjectIamAdmin.

gcloud

ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION: Operation denied by
org policy on resource 'RESOURCE_ID':
["constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts":
"When this constraint is enforced, it prevents anyone from granting the Editor
role (roles/editor) or the Owner role (roles/owner) to the Compute Engine and
App Engine default service accounts, at any time. To learn more about default
service accounts, see
https://cloud.google.com/iam/help/service-accounts/default. Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues for
services that use these service accounts. To learn which roles to grant to each
service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default."].

REST

{
  "error": {
    "code": 400,
    "message": "Operation denied by org policy on resource
    'RESOURCE_ID':
    [\"constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts\":
    \"When this constraint is enforced, it prevents anyone from granting the
    Editor role (roles/editor) or the Owner role (roles/owner) to the Compute
    Engine and App Engine default service accounts, at any time. To learn more
    about default service accounts, see
    https://cloud.google.com/iam/help/service-accounts/default.\n Enforcing this
    constraint prevents the default service accounts from automatically being
    granted the Editor role (roles/editor). This might cause permission issues
    for services that use these service accounts. To learn which roles to grant
    to each service account, see
    https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\"].",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "CUSTOM_ORG_POLICY_VIOLATION",
        "domain": "googleapis.com",
        "metadata": {
          "customConstraints": "constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts",
          "resource": "projects/PROJECT_ID"
        }
      }
    ]
  }
}

Solusi 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@appspot.gserviceaccount.com) Peran Akun Cloud Build (roles/cloudbuild.builds.builder)
Compute Engine Akun layanan default Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

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 Memilih peran yang telah ditetapkan.

Saat memutuskan peran 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@developer.gserviceaccount.com) Peran Akun Layanan Cloud Build (roles/cloudbuild.builds.builder)
Cloud Deploy Akun layanan default Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com) 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 daftar panduan memulai Cloud Deploy, lihat Panduan Memulai dalam dokumentasi Cloud Deploy.
Cloud Run Functions dan Cloud Functions Akun layanan default Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

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@developer.gserviceaccount.com)

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 Memilih peran yang telah ditetapkan.

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@developer.gserviceaccount.com)

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

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

Workflows Akun layanan default Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

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 Memilih peran bawaan.

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