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 mundur; batasan ini 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 batasan boolean, yang ditetapkan ke true atau 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 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. Hal ini memungkinkan Anda memusatkan pengelolaan akun layanan tanpa membatasi izin lain yang dimiliki developer Anda di project.

Jika Anda menerapkan batasan ini pada project, beberapa layanan Google Cloud tidak dapat otomatis membuat akun layanan default. 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 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 dan kunci HMAC Cloud Storage. Hal ini memungkinkan Anda mengontrol penggunaan kredensial jangka panjang yang tidak dikelola untuk akun layanan. Saat batasan ini ditetapkan, kredensial yang dikelola pengguna tidak dapat dibuat untuk akun layanan di project yang terpengaruh oleh batasan.

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.

Menonaktifkan 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 dilampirkan ke resource dalam project lain.

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

Membatasi penghapusan lien project saat akun layanan digunakan di seluruh project

Saat Anda mengizinkan akun layanan project untuk 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 lien.

Jika Anda menerapkan batasan boolean iam.restrictCrossProjectServiceAccountLienRemoval, 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 boolean iam.disableWorkloadIdentityClusterCreation untuk mewajibkan cluster Google Kubernetes Engine baru agar fitur Workload Identity dinonaktifkan pada saat pembuatannya. Jika ingin mengontrol akses akun layanan dengan ketat di organisasi, Anda dapat menonaktifkan Workload Identity selain pembuatan akun layanan dan pembuatan kunci akun layanan.

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

Menerapkan batasan boolean

Konsol

Untuk menetapkan kebijakan organisasi yang menerapkan batasan guna 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 Applies to, pilih Override parent's policy.

  6. Klik Add a rule.

  7. Di bagian Enforcement, pilih On.

  8. Untuk menerapkan kebijakan, klik Set policy.

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 dikeluarkan dengan

Perintah
disable-enforce
.

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 akun layanan dibuat:

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

Mencantumkan batasan

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

Memperpanjang masa berlaku token akses OAuth 2.0

Anda dapat membuat token akses OAuth 2.0 yang memberikan 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 token akses, lalu tambahkan akun layanan ini ke kebijakan organisasi yang menyertakan batasan daftar constraints/iam.allowServiceAccountCredentialLifetimeExtension.

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 daftar constraints/iam.serviceAccountKeyExpiryHours untuk menentukan jumlah jam validitas kunci yang baru dibuat. Setelah jangka waktu ini, kunci akun layanan akan berakhir masa berlakunya, dan Anda tidak dapat lagi menggunakannya.

Batasan daftar ini menerima nilai ALLOW berikut; tidak menerima nilai DENY. Sebagai praktik terbaik, gunakan expiry time 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 menggunakan workload identity federation, 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 untuk penyedia yang diizinkan, 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 lainnya yang mendukung OpenID Connect (OIDC): Gunakan URI penerbit dari penyedia identitas Anda.

Menentukan akun AWS yang diizinkan

Jika menggunakan workload identity federation, yang memungkinkan identitas eksternal mengakses resource Google Cloud, Anda dapat menentukan akun AWS mana 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.

Menonaktifkan kunci akun layanan yang terekspos secara otomatis

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

Batasan daftar ini menerima nilai ALLOW berikut; tidak menerima nilai DENY.

  • DISABLE_KEY: Jika mendeteksi kunci yang terekspos, Google Cloud akan otomatis menonaktifkan kunci tersebut. Tindakan ini juga 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 menonaktifkan kunci yang diekspos secara proaktif. Namun, Google Cloud mungkin masih menonaktifkan kunci yang diekspos jika kunci tersebut digunakan dengan cara yang berdampak buruk pada platform. Terlepas dari apakah kunci yang terekspos dinonaktifkan atau tidak, Google Cloud akan membuat peristiwa Cloud Audit Logs dan mengirim notifikasi tentang kunci yang terekspos kepada pemilik project dan kontak keamanan.

Saat mendeteksi kunci yang terekspos atau menonaktifkan kunci yang terekspos, Google Cloud juga akan melakukan tindakan 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 akan berisi tindakan penonaktifan oleh akun utama gcp-compromised-key-response@system.gserviceaccount.com.

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

Sebaiknya tetapkan batasan ini ke DISABLE_KEY. Menetapkan batasan ini ke WAIT_FOR_ABUSE akan meningkatkan risiko kunci yang diekspos akan disalahgunakan.

Jika Anda memutuskan untuk menetapkan 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 daftar

Konsol

Untuk menetapkan kebijakan organisasi yang berisi batasan daftar:

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

    Buka Organization policies

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

  3. Di halaman Organization policies, 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 penerapan:

    • Untuk menggabungkan dan mengevaluasi kebijakan organisasi Anda secara bersamaan, pilih Gabungkan dengan induk. Untuk 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 Custom values, masukkan nilai pertama untuk batasan daftar.

    1. Jika Anda ingin menambahkan nilai lainnya, klik Add value untuk membuat lebih banyak baris, dan tambahkan satu nilai ke setiap baris.
  10. Setelah selesai menambahkan nilai, klik Selesai.

  11. Untuk menerapkan kebijakan, klik Set policy.

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. Contoh, 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 memperluas 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

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 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 layanan Google Cloud yang, saat 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.