Membatasi penggunaan akun layanan

Resource Manager menyediakan batasan yang dapat digunakan dalam kebijakan organisasi untuk membatasi penggunaan akun layanan Identity and Access Management (IAM).

Banyak batasan ini menentukan apakah akun layanan dan resource lainnya dapat dibuat atau dikonfigurasi dengan cara tertentu. Batasan ini tidak berlaku surut; batasan ini tidak memengaruhi akun layanan yang dibuat dan dikonfigurasi sebelumnya.

Sebelum memulai

Anda harus memiliki izin untuk mengubah kebijakan organisasi untuk menetapkan batasan. Misalnya, peran orgpolicy.policyAdmin memiliki izin untuk menetapkan batasan kebijakan organisasi. Baca halaman Menggunakan Batasan untuk mempelajari lebih lanjut cara mengelola kebijakan di tingkat organisasi.

Batasan terkelola

Batasan berikut adalah jenis batasan terkelola, yang ditetapkan ke benar atau salah. Batasan terkelola dibangun di platform kebijakan organisasi kustom.

Untuk mempelajari cara membuat kebijakan organisasi yang menerapkan batasan terkelola, lihat Menggunakan batasan terkelola dalam kebijakan organisasi.

Mencegah pemberian peran Pemilik dan Editor ke akun layanan default

Beberapa layanan Google Cloud membuat akun layanan default secara otomatis. Saat akun layanan default dibuat, akun tersebut secara otomatis diberi peran Editor (roles/editor) di project Anda. Seseorang juga dapat memilih untuk memberikan peran dengan hak istimewa tinggi, seperti peran Editor atau peran Pemilik (roles/owner), kepada akun layanan default di lain waktu.

Peran Editor dan Pemilik adalah peran dasar dengan hak istimewa tinggi. Anda tidak boleh memberikannya kepada principal mana pun dalam produksi, termasuk akun layanan default.

Untuk mencegah akun layanan default diberi peran Editor atau Pemilik, gunakan batasan iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts yang dikelola. Batasan ini mencegah akun layanan default diberi peran Editor atau Pemilik, baik secara otomatis maupun manual.

Menonaktifkan pembuatan akun layanan

Anda dapat menggunakan batasan terkelola iam.managed.disableServiceAccountCreation untuk menonaktifkan pembuatan akun layanan baru. Dengan demikian, Anda dapat memusatkan pengelolaan akun layanan tanpa membatasi izin lain yang dimiliki developer Anda di project.

Jika Anda menerapkan batasan ini di project, maka beberapa layanan Google Cloud tidak dapat membuat akun layanan default secara otomatis. Akibatnya, jika project menjalankan workload yang perlu meniru akun layanan, project tersebut mungkin tidak berisi akun layanan yang dapat digunakan workload tersebut. Untuk mengatasi masalah ini, Anda dapat mengaktifkan peniruan identitas akun layanan di seluruh project. Saat mengaktifkan fitur ini, Anda dapat membuat akun layanan dalam project terpusat, lalu melampirkan akun layanan ke resource dalam project lain.

Untuk mengetahui informasi selengkapnya tentang cara mengatur akun layanan, lihat Tempat membuat akun layanan.

Menonaktifkan pembuatan kunci API yang terikat ke akun layanan

Anda dapat menggunakan batasan terkelola iam.managed.disableServiceAccountApiKeyCreation untuk menonaktifkan pembuatan kunci API yang terikat ke akun layanan. Jika batasan ini ditetapkan, pengguna tidak dapat membuat kunci API yang terikat ke akun layanan di project yang terpengaruh oleh batasan.

Batasan ini diterapkan secara default.

Menonaktifkan pembuatan kunci akun layanan

Anda dapat menggunakan batasan yang dikelola iam.managed.disableServiceAccountKeyCreation untuk menonaktifkan pembuatan kunci akun layanan eksternal baru dan kunci HMAC Cloud Storage. Hal ini memungkinkan Anda mengontrol penggunaan kredensial jangka panjang yang tidak dikelola untuk akun layanan. Jika batasan ini ditetapkan, kredensial yang dikelola pengguna tidak dapat dibuat untuk akun layanan di project yang terpengaruh oleh batasan tersebut.

Menonaktifkan upload kunci akun layanan

Anda dapat menggunakan batasan terkelola iam.managed.disableServiceAccountKeyUpload untuk menonaktifkan upload kunci publik eksternal ke akun layanan. Jika batasan ini ditetapkan, pengguna tidak dapat mengupload kunci publik ke akun layanan di project yang terpengaruh oleh batasan tersebut.

Batasan terkelola (lama) dengan aturan boolean

Batasan berikut adalah jenis batasan terkelola lama dengan aturan boolean, yang ditetapkan ke benar (true) atau salah (false).

Menonaktifkan pemberian peran otomatis ke akun layanan default

Beberapa layanan Google Cloud secara otomatis membuat akun layanan default. Saat akun layanan default dibuat, akun tersebut secara otomatis diberi peran Editor (roles/editor) pada project Anda.

Untuk meningkatkan keamanan, sebaiknya Anda menonaktifkan pemberian peran otomatis. Gunakan batasan yang dikelola lama iam.automaticIamGrantsForDefaultServiceAccounts untuk menonaktifkan pemberian peran otomatis.

Menonaktifkan pembuatan akun layanan

Anda dapat menggunakan batasan terkelola lama iam.disableServiceAccountCreation untuk menonaktifkan pembuatan akun layanan baru. Dengan demikian, Anda dapat memusatkan pengelolaan akun layanan tanpa membatasi izin lain yang dimiliki developer Anda di project.

Jika Anda menerapkan batasan ini di project, maka beberapa layanan Google Cloud tidak dapat membuat akun layanan default secara otomatis. Akibatnya, jika project menjalankan workload yang perlu meniru akun layanan, project mungkin tidak berisi akun layanan yang dapat digunakan workload tersebut. Untuk mengatasi masalah ini, Anda dapat mengaktifkan peniruan identitas akun layanan di seluruh project. Saat mengaktifkan fitur ini, Anda dapat membuat akun layanan dalam project terpusat, lalu melampirkan akun layanan ke resource dalam project lain.

Untuk mengetahui informasi selengkapnya tentang cara mengatur akun layanan, lihat Tempat membuat akun layanan.

Menonaktifkan pembuatan kunci akun layanan

Anda dapat menggunakan batasan terkelola lama iam.disableServiceAccountKeyCreationuntuk menonaktifkan pembuatan kunci akun layanan eksternal baru dan kunci HMAC Cloud Storage. Hal ini memungkinkan Anda mengontrol penggunaan kredensial jangka panjang yang tidak dikelola untuk akun layanan. Jika batasan ini ditetapkan, kredensial yang dikelola pengguna tidak dapat dibuat untuk akun layanan di project yang terpengaruh oleh batasan tersebut.

Menonaktifkan upload kunci akun layanan

Anda dapat menggunakan batasan terkelola lama iam.disableServiceAccountKeyUpload untuk menonaktifkan upload kunci publik eksternal ke akun layanan. Jika batasan ini ditetapkan, pengguna tidak dapat mengupload kunci publik ke akun layanan di project yang terpengaruh oleh batasan tersebut.

Menonaktifkan lampiran akun layanan ke resource di project lain

Setiap akun layanan berada dalam project. Anda dapat menggunakan batasan terkelola lama iam.disableCrossProjectServiceAccountUsage untuk mencegah akun layanan dalam project dilampirkan ke resource dalam project lain.

Jika Anda ingin mengizinkan penggunaan akun layanan di seluruh project, lihat Mengaktifkan peniruan akun layanan di seluruh project.

Membatasi penghapusan jaminan project saat akun layanan digunakan di seluruh project

Saat Anda mengizinkan akun layanan project dilampirkan ke resource di project lain, IAM akan menambahkan lien project yang mencegah Anda menghapus project. Secara default, siapa pun yang memiliki izin resourcemanager.projects.updateLiens di project dapat menghapus hak gadai.

Jika Anda menerapkan batasan iam.restrictCrossProjectServiceAccountLienRemoval yang dikelola warisan, maka akun utama hanya dapat menghapus lien jika memiliki izin resourcemanager.projects.updateLiens di organisasi.

Sebaiknya terapkan batasan ini jika ada project Anda yang mengizinkan peniruan akun layanan di seluruh project.

Menonaktifkan pembuatan cluster workload identity

Anda dapat menggunakan batasan iam.disableWorkloadIdentityClusterCreationterkelola lama untuk mewajibkan agar semua cluster Google Kubernetes Engine baru menonaktifkan fitur Workload Identity pada saat pembuatannya. Jika ingin mengontrol akses akun layanan secara ketat di organisasi Anda, Anda mungkin ingin menonaktifkan Workload Identity selain pembuatan akun layanan dan pembuatan kunci akun layanan.

Cluster GKE yang sudah ada dengan Workload Identity Federation untuk GKE diaktifkan tidak akan terpengaruh, dan akan terus berfungsi seperti biasa.

Menetapkan batasan terkelola (lama) dengan aturan boolean

Konsol

Untuk menetapkan kebijakan organisasi yang menerapkan batasan untuk membatasi penggunaan akun layanan:

  1. Di konsol Google Cloud , buka halaman Kebijakan organisasi.

    Buka Organization policies

  2. Dari pemilih project, pilih organisasi yang ingin Anda batasi penggunaan akun layanannya.

  3. Klik salah satu batasan penggunaan akun layanan yang tercantum di halaman ini.

  4. Klik Manage Policy.

  5. Di bagian Berlaku untuk, pilih Ganti kebijakan induk.

  6. Klik Add a rule.

  7. Di bagian Enforcement, pilih On.

  8. Untuk menerapkan kebijakan, klik Setel kebijakan.

gcloud

Kebijakan dapat ditetapkan melalui Google Cloud CLI.

Untuk membatasi penggunaan akun layanan, jalankan perintah berikut:

gcloud resource-manager org-policies enable-enforce \
    --organization 'ORGANIZATION_ID' \
    CONSTRAINT_NAME

Dengan CONSTRAINT_NAME adalah batasan yang ingin Anda terapkan.

Untuk menonaktifkan penerapan, perintah yang sama dapat dikeluarkan dengan

Perintah
disable-enforce
.

Untuk mempelajari cara menggunakan batasan dalam kebijakan organisasi, lihat Menggunakan Batasan.

Contoh batasan terkelola (lama) dengan aturan boolean

Cuplikan kode berikut menunjukkan kebijakan organisasi yang menerapkan batasan terkelola lama iam.disableServiceAccountCreation, yang mencegah pembuatan akun layanan:

name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
  rules:
  - enforce: true

Batasan terkelola (lama) dengan aturan daftar

Batasan berikut adalah jenis batasan terkelola lama dengan aturan daftar, yang ditetapkan ke daftar nilai.

Memperpanjang masa aktif token akses OAuth 2.0

Anda dapat membuat token akses OAuth 2.0 yang menyediakan kredensial berumur pendek untuk akun layanan. Secara default, masa aktif maksimum token akses adalah 1 jam (3.600 detik). Namun, Anda dapat memperpanjang masa aktif maksimum menjadi 12 jam. Untuk melakukannya, identifikasi akun layanan yang memerlukan perpanjangan masa aktif untuk token akses, lalu tambahkan akun layanan ini ke kebijakan organisasi yang mencakup batasan constraints/iam.allowServiceAccountCredentialLifetimeExtension yang dikelola lama.

Membatasi masa pakai kunci akun layanan

Kunci akun layanan memungkinkan Anda mengautentikasi permintaan sebagai akun layanan. Secara default, masa berlaku kunci akun layanan tidak pernah berakhir. Anda dapat mengubah setelan default ini dengan menetapkan expiry time untuk semua kunci yang baru dibuat di project, folder, atau organisasi Anda.

Untuk menetapkan waktu habis masa berlaku, gunakan batasan terkelola lama constraints/iam.serviceAccountKeyExpiryHours untuk menentukan jumlah jam validitas kunci yang baru dibuat. Setelah jangka waktu ini, kunci akun layanan akan habis masa berlakunya, dan Anda tidak dapat menggunakannya lagi.

Batasan terkelola lama ini menerima nilai ALLOW berikut; tidak menerima nilai DENY. Sebagai praktik terbaik, gunakan waktu habis masa berlaku terpendek yang memenuhi kebutuhan Anda:

  • 1h: 1 jam
  • 8h: 8 jam
  • 24h: 24 jam (1 hari)
  • 168h: 168 jam (7 hari)
  • 336h: 336 jam (14 hari)
  • 720h: 720 jam (30 hari)
  • 1440h: 1.440 jam (60 hari)
  • 2160h: 2.160 jam (90 hari)

Batasan constraints/iam.serviceAccountKeyExpiryHours tidak dapat digabungkan dengan kebijakan induk. Untuk menerapkan batasan ini, Anda harus mengganti atau mewarisi kebijakan induk.

Menentukan penyedia identitas eksternal yang diizinkan

Jika Anda menggunakan workload identity federation, yang memungkinkan identitas eksternal mengakses resource Google Cloud , Anda dapat menentukan penyedia identitas eksternal mana yang diizinkan. Secara default, semua penyedia diizinkan. Untuk menetapkan batas, gunakan batasan terkelola lama constraints/iam.workloadIdentityPoolProviders untuk menentukan URI penyedia yang diizinkan, menggunakan format berikut:

  • Amazon Web Services (AWS): https://sts.amazonaws.com

    Untuk membatasi akun AWS yang diizinkan, gunakan batasan terkelola lama constraints/iam.workloadIdentityPoolAwsAccounts seperti yang dijelaskan di halaman ini.

  • Microsoft Azure: https://sts.windows.net/azure-tenant-id

  • Penyedia identitas lain yang mendukung OpenID Connect (OIDC): Gunakan URI penerbit dari penyedia identitas Anda.

Menentukan akun AWS yang diizinkan

Jika Anda menggunakan workload identity federation, yang memungkinkan identitas eksternal mengakses Google Cloud resource, Anda dapat menentukan akun AWS mana yang diizinkan untuk mengakses resource Anda. Secara default, beban kerja dari akun AWS mana pun diizinkan untuk mengakses resource Google Cloud Anda. Untuk membatasi akun AWS yang diizinkan, gunakan batasan terkelola lama constraints/iam.workloadIdentityPoolAwsAccounts untuk menentukan daftar ID akun yang diizinkan.

Menonaktifkan kunci akun layanan yang terekspos secara otomatis

Google Cloud terkadang mendeteksi bahwa kunci akun layanan tertentu telah terekspos—misalnya,Google Cloud dapat mendeteksi kunci di repositori publik. Untuk menentukan tindakan Google Cloud dengan kunci ini, gunakan batasan terkelola lama iam.serviceAccountKeyExposureResponse. Kunci yang dipantau mencakup kunci akun layanan yang aktif dalam waktu lama dan kunci API yang terikat ke akun layanan.

Batasan terkelola lama ini menerima nilai ALLOW berikut; batasan ini tidak menerima nilai DENY.

  • DISABLE_KEY: Jika Google Cloud mendeteksi kunci yang terekspos, kunci tersebut akan dinonaktifkan secara otomatis. Selain itu, alat ini akan membuat peristiwa Cloud Audit Logs dan mengirim notifikasi tentang kunci yang terekspos kepada pemilik project dan kontak keamanan.

  • WAIT_FOR_ABUSE: Google Cloud tidak akan secara proaktif menonaktifkan kunci yang terekspos. Namun, Google Cloud masih dapat menonaktifkan kunci yang terekspos jika kunci tersebut digunakan dengan cara yang merugikan platform. Terlepas dari apakah kunci yang terekspos dinonaktifkan, Google Cloud akan membuat peristiwa Cloud Audit Logs dan mengirim notifikasi tentang kunci yang terekspos kepada pemilik project dan kontak keamanan.

Saat Google Cloud mendeteksi kunci yang terekspos atau menonaktifkan kunci yang terekspos, alat ini juga melakukan hal berikut:

  • Membuat peristiwa Cloud Audit Logs.

    • Saat Google Cloud mendeteksi bahwa kunci telah terekspos, peristiwa penyalahgunaan akan dibuat di log Peristiwa Penyalahgunaan.

    • Saat Google Cloud menonaktifkan kunci, log audit berisi tindakan penonaktifan oleh akun utama gcp-compromised-key-response@system.gserviceaccount.com.

  • Menetapkan kolom extendedStatus.value dari kunci yang terekspos atau dinonaktifkan. Kolom status yang diperluas mencakup lokasi tempat kebocoran terdeteksi.

Sebaiknya Anda menetapkan batasan ini ke DISABLE_KEY. Menetapkan batasan ini ke WAIT_FOR_ABUSE meningkatkan risiko penyalahgunaan kunci yang terekspos.

Jika Anda memutuskan untuk menyetel batasan ke WAIT_FOR_ABUSE, sebaiknya Anda berlangganan peristiwa Cloud Audit Logs, meninjau informasi kontak keamanan Anda di Kontak Penting, dan memastikan bahwa kontak keamanan Anda merespons notifikasi secara tepat waktu.

Batasan iam.serviceAccountKeyExposureResponse tidak dapat digabungkan dengan kebijakan induk. Untuk menerapkan batasan ini, Anda harus mengganti kebijakan induk.

Menetapkan batasan terkelola (lama) dengan aturan daftar

Konsol

Untuk menetapkan kebijakan organisasi yang berisi batasan terkelola lama:

  1. Di konsol Google Cloud , buka halaman Kebijakan organisasi.

    Buka Organization policies

  2. Dari pemilih project, pilih resource yang ingin Anda tetapkan kebijakan organisasinya.

  3. Di halaman Kebijakan organisasi, pilih batasan dari daftar. Halaman Policy details untuk batasan tersebut akan muncul.

  4. Untuk memperbarui kebijakan organisasi untuk resource ini, klik Manage policy.

  5. Di bagian Policy enforcement, pilih opsi penegakan:

    • Untuk menggabungkan dan mengevaluasi kebijakan organisasi Anda, pilih Gabungkan dengan induk. Untuk mengetahui informasi selengkapnya tentang pewarisan dan hierarki resource, lihat Memahami evaluasi hierarki.
    • Untuk mengganti kebijakan yang diwarisi dari resource induk, pilih Ganti.
  6. Klik Add a rule.

  7. Di bagian Policy values, pilih Custom.

  8. Di bagian Policy values, pilih Allow.

  9. Di bagian Nilai kustom, masukkan nilai pertama untuk batasan yang dikelola lama.

    1. Jika Anda ingin menambahkan lebih banyak nilai, klik Tambahkan nilai untuk membuat lebih banyak baris, lalu tambahkan satu nilai ke setiap baris.
  10. Setelah selesai menambahkan nilai, klik Selesai.

  11. Untuk menerapkan kebijakan, klik Setel kebijakan.

gcloud

Kebijakan dapat ditetapkan melalui Google Cloud CLI:

gcloud resource-manager org-policies allow \
    CONSTRAINT_NAME \
    VALUE_1 [VALUE_N ...] \
    --organization=ORGANIZATION_ID \

Ganti nilai berikut:

  • CONSTRAINT_NAME: Nama batasan terkelola lama. Contoh, constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • VALUE_1, VALUE_N...: Nilai untuk batasan terkelola lama.

Untuk mempelajari cara menggunakan batasan dalam kebijakan organisasi, lihat Menggunakan Batasan.

Contoh batasan terkelola (lama) dengan aturan daftar

Cuplikan kode berikut menunjukkan kebijakan organisasi yang menerapkan batasan terkelola lama iam.allowServiceAccountCredentialLifetimeExtension, yang memperpanjang masa aktif maksimum token akses OAuth 2.0 untuk akun layanan yang tercantum:

name: organizations/012345678901/policies/iam.allowServiceAccountCredentialLifetimeExtension
spec:
  rules:
  - values:
      allowedValues:
      - SERVICE_ACCOUNT_ADDRESS

Menerapkan batasan secara bersyarat menggunakan tag

Tag dapat digunakan untuk menyertakan atau mengecualikan resource yang diberi tag dari penerapan kebijakan organisasi. Setelah membuat tag dan melampirkannya ke akun layanan, Anda dapat menambahkan kondisi ke kebijakan untuk menyertakan atau mengecualikan akun layanan yang diberi tag secara bersyarat dari penegakan.

Untuk mengetahui detail selengkapnya tentang penggunaan tag dengan kebijakan organisasi, lihat Menetapkan kebijakan organisasi dengan tag.

Pesan error

Menonaktifkan pembuatan akun layanan

Jika iam.disableServiceAccountCreation diterapkan, pembuatan akun layanan akan gagal dengan error:

FAILED_PRECONDITION: Service account creation is not allowed on this project.

Menonaktifkan pembuatan kunci API yang terikat ke akun layanan

Jika iam.managed.disableServiceAccountApiKeyCreation diterapkan, pembuatan kunci API yang terikat ke akun layanan akan gagal dengan error:

FAILED_PRECONDITION: Operation denied by org policy:
["constraints/iam.managed.disableServiceAccountApiKeyCreation":
"When enforced, disables creation of API Keys bound to service accounts."]

Menonaktifkan pembuatan kunci akun layanan

Jika iam.disableServiceAccountKeyCreation diterapkan, pembuatan akun layanan akan gagal dengan error:

FAILED_PRECONDITION: Key creation is not allowed on this service account.

Menonaktifkan pembuatan cluster workload identity

Jika iam.disableWorkloadIdentityClusterCreation diterapkan, pembuatan cluster GKE dengan Workload Identity yang diaktifkan akan gagal dengan error:

FAILED_PRECONDITION: Workload Identity is disabled by the organization
policy constraints/iam.disableWorkloadIdentityClusterCreation. Contact your
administrator to enable this feature.

Memecahkan masalah umum

Akun layanan default

Menerapkan batasan iam.disableServiceAccountCreation akan mencegah pembuatan akun layanan di project tersebut. Batasan ini juga memengaruhi Google Cloud layanan yang, jika diaktifkan, akan otomatis membuat akun layanan default di project, seperti:

  • Compute Engine
  • GKE
  • App Engine
  • Dataflow

Jika batasan iam.disableServiceAccountCreation diterapkan, upaya untuk mengaktifkan layanan ini akan gagal karena akun layanan defaultnya tidak dapat dibuat.

Untuk menyelesaikan masalah ini:

  1. Hapus batasan iam.disableServiceAccountCreation untuk sementara.
  2. Aktifkan layanan yang diinginkan.
  3. Buat akun layanan lain yang diinginkan.
  4. Terakhir, terapkan kembali batasan.