Mengonfigurasi kebijakan organisasi

Kebijakan organisasi memberi Anda kontrol terpusat dan terprogram atas resource organisasi. Sebagai administrator kebijakan organisasi, Anda dapat mengonfigurasi kebijakan di seluruh organisasi untuk mendapatkan manfaat berikut:

  • Kontrol terpusat untuk mengonfigurasi batasan tentang cara penggunaan resource organisasi Anda.
  • Menentukan dan menetapkan batas aman bagi tim pengembangan Anda agar tetap berada dalam batas kepatuhan.
  • Membantu pemilik project dan tim mereka bergerak cepat tanpa melanggar kepatuhan.

Google Distributed Cloud (GDC) yang terisolasi tidak menyediakan UI konsol atau CLI khusus untuk membuat dan mengelola kebijakan organisasi. Anda harus menggunakan Kubernetes API atau kubectl CLI.

Perbedaan dari Identity and Access Management

Identity and Access Management (IAM) dan kebijakan organisasi menjalankan fungsi akses dan tata kelola yang saling melengkapi:

  • IAM berfokus pada pemberian izin. Kebijakan ini menentukan siapa (anggota seperti pengguna, grup, atau akun layanan) yang dapat melakukan tindakan apa (peran) pada resource mana (cakupan resource). Izin yang diberikan melalui peran IAM bersifat tambahan dan tidak memiliki aturan penolakan.
  • Kebijakan organisasi berfokus pada penetapan batas aman. Kebijakan ini memungkinkan administrator mengonfigurasi pembatasan terprogram pada resource di seluruh organisasi, seperti menonaktifkan layanan tertentu atau membatasi modifikasi resource berdasarkan atribut subjek menggunakan kontrol akses berbasis atribut (ABAC). Kebijakan organisasi lebih diutamakan untuk memblokir operasi meskipun anggota memiliki peran IAM.

Sebelum memulai

Sebelum mengonfigurasi kebijakan organisasi, Anda harus meminta izin yang diperlukan dan menyiapkan lingkungan Anda.

Meminta peran IAM

Hubungi Admin IAM Organisasi Anda untuk meminta peran IAM berikut berdasarkan tugas yang perlu Anda lakukan:

  • Admin Kebijakan Layanan yang Dibatasi (gdchrestrictedservice-policy-admin): membuat, memperbarui, dan menghapus kebijakan layanan yang dibatasi.
  • Admin Kebijakan Pembatasan Berdasarkan Atribut (gdchrestrictbyattributes-policy-admin): membuat, memperbarui, dan menghapus kebijakan kontrol akses berbasis atribut.

Menyiapkan lingkungan Anda

Mengonfigurasi kebijakan

Anda dapat mengonfigurasi dua jenis kebijakan organisasi di GDC:

  • Kebijakan layanan terbatas (GDCHRestrictedService): membatasi layanan yang dapat Anda gunakan atau ubah dalam cluster.
  • Kebijakan kontrol akses berbasis atribut (GDCHRestrictByAttributes): membatasi akses ke resource dalam cluster secara bersyarat berdasarkan atribut subjek yang dipetakan dari penyedia identitas Anda.

Mengonfigurasi kebijakan layanan terbatas

Jenis kebijakan GDCHRestrictedService memungkinkan Anda membatasi layanan yang dapat digunakan atau diubah dalam cluster dengan memblokir API tertentu, seperti membatasi layanan ke project tertentu atau memblokir akses ke layanan baru saat Anda mengujinya. Buat kebijakan ini di cluster yang sama dengan resource layanan. Anda dapat membuat beberapa instance kebijakan dalam cluster untuk berbagai layanan atau project.

GDCHRestrictedService mendukung operasi CREATE, UPDATE, dan DELETE. Untuk membatasi operasi baca GET dan LIST, gunakan binding peran IAM untuk memberikan dan mencabut akses.

Mengonfigurasi kebijakan layanan terbatas:

  1. Tentukan manifes kebijakan:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: GDCHRestrictedService
    metadata:
      name: POLICY_NAME
    spec:
      match:
        kinds:
          - apiGroups:
              - "API_GROUP"
            kinds:
              - "KIND"
      parameters:
        disabledOperations:
          - DISABLED_OPERATION
    

    Ganti kode berikut:

    • POLICY_NAME: nama kebijakan organisasi.

    • API_GROUP: grup API layanan yang akan dibatasi, seperti yang tercantum dalam tabel layanan yang didukung berikut.

    • KIND: jenis resource yang akan dibatasi, seperti yang tercantum dalam tabel layanan yang didukung berikut.

    • DISABLED_OPERATION: grup operasi yang diblokir oleh kebijakan ini. Nilai yang diizinkan adalah CREATE, UPDATE, dan DELETE. Nilai default untuk kolom disabledOperations adalah *. Untuk menonaktifkan layanan sepenuhnya, cantumkan CREATE, UPDATE, dan DELETE (serta tentukan semua jenisnya).

    Secara default, kebijakan ini berlaku di semua namespace dalam cluster. Untuk mencakup kebijakan ke namespace atau project tertentu, lihat Menentukan cakupan kebijakan organisasi dalam cluster.

    Kebijakan GDCHRestrictedService mendukung subkumpulan layanan berikut di GDC:

    Layanan Grup API jenis
    Marketplace marketplace.gdc.goog MarketplaceService
    Vertex AI Workbench aiplatform.gdc.goog Notebook
    Database Service - Postgres postgresql.dbadmin.gdc.goog
    • DBCluster
    • BackupPlan
    • Import
    • Restore
    Transfer Appliance system.gpc.gke.io TransferApplianceRequest
    Cadangan backup.gdc.goog BackupRepositoryManager
    Kontainer Dataproc untuk Spark (Layanan Marketplace) sparkoperator.k8s.io SparkApplication

    Jika layanan mencantumkan beberapa jenis dalam tabel (seperti Layanan Database), Anda hanya dapat menentukan jenis individual yang ingin dibatasi. Misalnya, Anda dapat memblokir operasi Restore sambil terus mengizinkan operasi DBCluster.

    Contoh berikut membatasi update pada layanan marketplace:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: GDCHRestrictedService
    metadata:
      name: no-update-to-marketplace-service
    spec:
      match:
        kinds:
        - apiGroups:
          - "marketplace.gdc.goog"
          kinds:
          - MarketplaceService
      parameters:
        disabledOperations:
          - "UPDATE"
    
  2. Terapkan kebijakan menggunakan CLI kubectl:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yaml
    

    Ganti kode berikut:

    • CLUSTER_KUBECONFIG: file kubeconfig dari cluster tempat Anda ingin menerapkan kebijakan
    • POLICY_NAME: nama file kebijakan organisasi

Mengonfigurasi kebijakan kontrol akses berbasis atribut

Jenis kebijakan GDCHRestrictByAttributes memungkinkan Anda membuat kebijakan ABAC untuk membatasi akses ke resource secara bersyarat berdasarkan atribut subjek. Misalnya, Anda dapat menggunakan jenis kebijakan ini untuk membatasi operasi tulis atau ubah pada bucket penyimpanan sehingga hanya pengguna atau akun layanan dengan atribut identitas tertentu (seperti citizenship=USA atau citizenship=UK) yang dapat melakukannya.

Buat kebijakan ini di cluster yang sama dengan resource. Anda dapat membuat beberapa instance kebijakan di cluster untuk resource atau project yang berbeda.

Mengonfigurasi kebijakan kontrol akses berbasis atribut:

  1. Buat file JSON patch untuk memetakan atribut identitas kustom untuk resource IdentityProviderConfig Anda:

    cat <<EOF > attributeMapping-patch.json
    {
      "CUSTOM_ATTRIBUTE": "assertion[\"CUSTOM_ATTRIBUTE\"]"
    }
    EOF
    

    Ganti CUSTOM_ATTRIBUTE dengan nama atribut identitas yang akan dipetakan, seperti citizenship.

  2. Patch resource IdentityProviderConfig di namespace platform:

    kubectl --kubeconfig CLUSTER_KUBECONFIG patch \
        IdentityProviderConfig IDENTITY_PROVIDER_CONFIG_NAME \
        -n platform --type=json \
        -p '[{"op":"add","path":"/spec/oidc/attributeMapping", "value": '"$(cat attributeMapping-patch.json)"'}]'
    

    Ganti kode berikut:

    • CLUSTER_KUBECONFIG: file kubeconfig cluster tempat penyedia identitas berada
    • IDENTITY_PROVIDER_CONFIG_NAME: nama resource IdentityProviderConfig
  3. Tentukan manifes kebijakan:

    apiVersion: constraints.global.gatekeeper.sh/v1beta1
    kind: GDCHRestrictByAttributes
    metadata:
      name: POLICY_NAME
    spec:
      match:
        kinds:
          - apiGroups:
              - "API_GROUP"
            kinds:
              - "KIND"
      parameters:
        attributes:
          - CUSTOM_ATTRIBUTE
        attributeValues:
          - ALLOWED_ATTRIBUTE_VALUE
    

    Ganti kode berikut:

    • POLICY_NAME: nama kebijakan organisasi.

    • API_GROUP: grup API resource yang akan dibatasi, seperti object.gdc.goog.

    • KIND: jenis resource yang akan dibatasi, seperti Bucket.

    • CUSTOM_ATTRIBUTE: atribut subjek kustom yang dipetakan dari penyedia identitas, seperti citizenship.

    • ALLOWED_ATTRIBUTE_VALUE: nilai yang diizinkan untuk atribut kustom, seperti USA. Permintaan dari subjek yang atributnya tidak cocok dengan salah satu nilai yang diizinkan akan ditolak.

    Secara default, kebijakan ini berlaku di semua namespace dalam cluster. Untuk mencakup kebijakan ke namespace atau project tertentu, lihat Menentukan cakupan kebijakan organisasi dalam cluster.

    Contoh berikut membatasi modifikasi resource Bucket di namespace project-foo untuk subjek dengan atribut citizenship=USA atau citizenship=UK:

    apiVersion: constraints.global.gatekeeper.sh/v1beta1
    kind: GDCHRestrictByAttributes
    metadata:
      name: restrict-by-citizenship
    spec:
      match:
        scope: Namespaced
        kinds:
          - apiGroups:
              - "object.gdc.goog"
            kinds:
              - Bucket
        namespaces:
          - project-foo
      parameters:
        attributes:
          - "citizenship"
        attributeValues:
          - "USA"
          - "UK"
    
  4. Terapkan kebijakan menggunakan CLI kubectl:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yaml
    

    Ganti kode berikut:

    • CLUSTER_KUBECONFIG: file kubeconfig dari cluster tempat Anda ingin menerapkan kebijakan
    • POLICY_NAME: nama file kebijakan organisasi

Menentukan cakupan kebijakan organisasi dalam cluster

Saat menentukan kebijakan organisasi, tentukan apakah kebijakan tersebut harus memengaruhi semua namespace, hanya namespace tertentu, atau semua namespace kecuali daftar tertentu. Untuk mencapai hal ini, gunakan kombinasi parameter .spec.match.excludedNamespaces, .spec.match.namespaceSelector, .spec.match.namespaces, dan .spec.match.scope dari definisi kebijakan.

Baca halaman bagian kecocokan kebijakan organisasi untuk mempelajari lebih lanjut parameter ini. Misalnya, untuk mengizinkan pembuatan database hanya di namespace yang memiliki label owner: dba-team, buat kebijakan berikut:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: db-restricted-to-dbas
spec:
  match:
    scope: Namespaced
    namespaceSelector:
      matchExpressions:
      # We are restricting the use of the service in namespaces that
      # don't have the owner: dba-team label
      - key: owner
        operator: NotIn
        values:
        - dba-team
    kinds:
    - apiGroups:
      - "postgresql.dbadmin.gdc.goog"
      kinds:
      - DBCluster
      - BackupPlan
      - Import
      - Restore
  parameters:
    disabledOperations:
      - "UPDATE"
      - "CREATE"
      - "DELETE"

Mengembalikan kebijakan yang ada

Untuk berhenti menerapkan kebijakan yang ada, hapus kebijakan tersebut menggunakan CLI kubectl. Gunakan file kubeconfig yang memberi Anda akses ke cluster tempat kebijakan ditentukan dan peran IAM yang sesuai dengan jenis kebijakan (seperti gdchrestrictedservice-policy-admin atau gdchrestrictbyattributes-policy-admin).

Menghapus kebijakan organisasi:

kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
    POLICY_TYPE/POLICY_NAME

Ganti kode berikut:

  • CLUSTER_KUBECONFIG: file kubeconfig dari cluster tempat kebijakan organisasi berada

  • POLICY_TYPE: jenis kebijakan organisasi yang akan dihapus, seperti GDCHRestrictedService atau GDCHRestrictByAttributes

  • POLICY_NAME: nama kebijakan organisasi yang akan dihapus

Menguji kebijakan dalam mode audit

Anda dapat menguji kebijakan tanpa menerapkannya. Uji kebijakan untuk memastikan bahwa kebijakan tidak merusak sistem yang ada sebelum diluncurkan, atau untuk mendapatkan perkiraan seberapa luas perilaku tersebut. Untuk menambahkan pengujian, tambahkan enforcementAction ke definisi kebijakan Anda. Ada tiga kemungkinan nilai untuk parameter ini:

  • deny: kebijakan diterapkan. Ini adalah setelan default.
  • dryrun: tindakan diizinkan, tetapi Anda dapat melihat bahwa ada pelanggaran kebijakan di log audit dan status kebijakan. Periksa pelanggaran dengan kubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME.
  • warn: setara dengan dryrun, tetapi pengujian juga menampilkan peringatan sebagai respons terhadap permintaan yang memicu pelanggaran kebijakan.

Misalnya, untuk menguji kebijakan yang menonaktifkan Marketplace, buat kebijakan berikut:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: disable-marketplace-service-project-alice
spec:
  enforcementAction: warn
  match:
    kinds:
      - apiGroups: ["marketplace.gdc.goog"]
        kinds: ["MarketplaceService"]