Membatasi penggunaan akun layanan

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

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

Sebelum memulai

Anda harus memiliki izin untuk mengubah kebijakan organisasi guna 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 Boolean

Batasan berikut adalah jenis boolean constraint, yang ditetapkan ke benar atau salah.

Menonaktifkan pemberian peran otomatis ke akun layanan default

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

Untuk meningkatkan keamanan, sebaiknya nonaktifkan pemberian peran otomatis. Gunakan batasan boolean iam.automaticIamGrantsForDefaultServiceAccounts untuk menonaktifkan pemberian peran otomatis.

Menonaktifkan pembuatan akun layanan

Anda dapat menggunakan batasan boolean iam.disableServiceAccountCreation untuk menonaktifkan pembuatan akun layanan baru. Dengan begitu, Anda dapat memusatkan pengelolaan akun layanan tanpa membatasi izin lain yang dimiliki developer Anda atas project.

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

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

Menonaktifkan pembuatan kunci akun layanan

Anda dapat menggunakan batasan boolean iam.disableServiceAccountKeyCreation untuk menonaktifkan pembuatan kunci akun layanan eksternal baru. 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 dalam project yang terpengaruh oleh batasan tersebut.

Menonaktifkan upload kunci akun layanan

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

Nonaktifkan lampiran akun layanan ke resource di project lain

Setiap akun layanan berada dalam project. Anda dapat menggunakan batasan boolean iam.disableCrossProjectServiceAccountUsage untuk mencegah akun layanan dalam project ditambahkan ke resource dalam project lain.

Jika Anda ingin mengizinkan akun layanan digunakan di seluruh project, baca Mengaktifkan peniruan identitas akun layanan di seluruh project.

Membatasi penghapusan lien project saat akun layanan digunakan di seluruh project

Jika Anda mengizinkan akun layanan project untuk ditambahkan ke resource dalam project lain, IAM akan menambahkan lien project agar Anda tidak menghapus project tersebut. Secara default, siapa saja yang memiliki izin resourcemanager.projects.updateLiens pada project dapat menghapus lien.

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

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

Menonaktifkan pembuatan cluster workload identity

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

Cluster GKE yang sudah ada yang mengaktifkan Workload Identity tidak akan terpengaruh, dan akan tetap berfungsi seperti biasa.

Menerapkan batasan boolean

Konsol

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

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

    Buka Organization policies

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

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

  4. Klik Manage Policy.

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

  6. Klik Tambahkan aturan.

  7. Di bagian Enforcement, pilih On.

  8. Untuk menerapkan kebijakan, klik Tetapkan 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' \
    BOOLEAN_CONSTRAINT

Dengan BOOLEAN_CONSTRAINT adalah batasan boolean yang ingin Anda terapkan.

Untuk menonaktifkan penerapan, perintah yang sama dapat diberikan dengan

disable-enforce
perintah.

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

Contoh kebijakan dengan batasan boolean

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

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

Batasan daftar

Batasan berikut adalah jenis batasan daftar, yang ditetapkan ke daftar nilai.

Memperpanjang masa pakai token akses OAuth 2.0

Anda dapat membuat token akses OAuth 2.0 yang memberikan kredensial yang memiliki masa aktif singkat untuk akun layanan. Secara default, masa berlaku maksimum token akses adalah 1 jam (3.600 detik). Namun, Anda dapat memperpanjang masa pakai maksimum hingga 12 jam. Untuk melakukannya, identifikasi akun layanan yang memerlukan perpanjangan masa aktif untuk token akses, lalu tambahkan akun layanan ini ke kebijakan organisasi yang menyertakan batasan daftar constraints/iam.allowServiceAccountCredentialLifetimeExtension.

Membatasi masa aktif kunci akun layanan

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

Untuk menetapkan expiry time, gunakan batasan daftar constraints/iam.serviceAccountKeyExpiryHours untuk menetapkan jumlah jam bagi kunci yang baru dibuat menjadi valid. Setelah jangka waktu ini, kunci akun layanan akan berakhir masa berlakunya, dan Anda tidak dapat menggunakannya lagi.

Batasan daftar ini menerima nilai ALLOW berikut, dan tidak menerima nilai DENY. Sebagai praktik terbaik, gunakan waktu masa berakhir tersingkat 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.

Tentukan penyedia identitas eksternal yang diizinkan

Jika menggunakan federasi identitas workload, yang memungkinkan identitas eksternal mengakses resource Google Cloud, Anda dapat menentukan penyedia identitas eksternal yang diizinkan. Secara default, semua penyedia diizinkan. Untuk menetapkan batas, gunakan batasan daftar constraints/iam.workloadIdentityPoolProviders untuk menentukan URI bagi penyedia yang diizinkan, dengan menggunakan format berikut:

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

    Untuk membatasi akun AWS yang diizinkan, gunakan batasan daftar 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.

Tentukan akun AWS yang diizinkan

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

Nonaktifkan kunci akun layanan terekspos secara otomatis

Google Cloud terkadang mendeteksi bahwa kunci akun layanan tertentu telah terekspos—misalnya, mungkin mendeteksi kunci di repositori publik. Untuk menentukan tindakan yang dilakukan Google Cloud dengan kunci ini, gunakan batasan daftar iam.serviceAccountKeyExposureResponse.

Batasan daftar ini menerima nilai ALLOW berikut, dan tidak menerima nilai DENY.

  • DISABLE_KEY: Jika mendeteksi kunci yang terekspos, Google Cloud akan otomatis menonaktifkan kunci tersebut.
  • WAIT_FOR_ABUSE: Google Cloud tidak akan menonaktifkan kunci yang terekspos secara proaktif. Namun, Google Cloud mungkin masih menonaktifkan kunci yang terekspos jika digunakan dengan cara yang berdampak buruk pada platform.

Saat Google Cloud menonaktifkan kunci, log audit akan berisi gcp-compromised-key-response@system.gserviceaccount.com utama.

Sebaiknya tetapkan batasan ini ke DISABLE_KEY. Menetapkan batasan ini ke WAIT_FOR_ABUSE akan meningkatkan risiko penyalahgunaan kunci yang bocor.

Jika Anda memutuskan untuk menetapkan batasan ke WAIT_FOR_ABUSE, sebaiknya tinjau informasi kontak keamanan Anda di Kontak Penting dan pastikan kontak keamanan Anda merespons notifikasi dengan tepat waktu.

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

Menetapkan batasan daftar

Konsol

Untuk menetapkan kebijakan organisasi yang berisi batasan daftar:

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

    Buka Organization policies

  2. Klik menu drop-down Organization di bagian atas halaman, lalu pilih organisasi Anda.

  3. Klik batasan yang ingin ditambahkan.

  4. Klik Manage Policy.

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

  6. Di bagian Penegakan kebijakan, pilih Gabungkan dengan induk untuk menggabungkan kebijakan ini dengan kebijakan yang sudah ada di hierarki Anda.

  7. Klik Tambahkan aturan.

  8. Di bagian Policy values, pilih Custom.

  9. Di bagian Policy values, pilih Allow.

  10. Di bagian Custom values, masukkan nilai pertama untuk batasan daftar.

    1. Jika Anda ingin menambahkan lebih banyak nilai, klik New policy value untuk membuat lebih banyak baris, lalu tambahkan satu nilai ke setiap baris.
  11. Untuk menerapkan kebijakan, klik Tetapkan 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 daftar. Misalnya, constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • VALUE_1, VALUE_N...: Nilai untuk batasan daftar.

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

Contoh kebijakan dengan batasan daftar

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

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

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 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 aktif 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 dalam project tersebut. Batasan ini juga memengaruhi layanan Google Cloud yang, saat diaktifkan, akan otomatis membuat akun layanan default dalam project, seperti:

  • Compute Engine
  • GKE
  • App Engine
  • Dataflow

Jika batasan iam.disableServiceAccountCreation diterapkan, upaya untuk mengaktifkan layanan ini akan gagal karena akun layanan default 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 tersebut.