Menerapkan kebijakan ke grup pengguna menggunakan binding akses

Anda dapat menggunakan binding akses untuk mengontrol aplikasi dan resource mana yang dapat diakses oleh grup pengguna Anda. Binding akses menentukan cara menerapkan tingkat akses dan kontrol sesi ke grup pengguna. Anda dapat menerapkan tingkat akses dan kontrol sesi yang sama ke semua aplikasi, atau Anda dapat menentukan perilaku tertentu untuk setiap aplikasi.

Untuk memastikan bahwa Anda mengonfigurasi semuanya dengan benar, Anda dapat menguji kebijakan sebelum menerapkannya.

Saat menggunakan binding akses, perhatikan perilaku berikut:

  • Grup pengguna hanya dapat memiliki satu binding akses.
  • Jika pengguna berada di beberapa grup, pengguna akan diberi akses jika ada kebijakan yang mengizinkannya (OR bukan AND).
  • Untuk kontrol sesi, hanya binding akses yang baru saja dibuat yang berlaku.

Menggunakan satu konfigurasi untuk semua aplikasi

Metode ini menerapkan tingkat akses dan kontrol sesi yang sama ke semua aplikasi yang diakses oleh grup pengguna.

Sebaiknya uji kebijakan Anda dengan uji coba atau terapkan ke grup pengujian kecil sebelum menerapkannya dalam produksi.

gcloud

Buat binding akses.

gcloud access-context-manager cloud-bindings create \
     --group-key GROUP_ID
     --organization ORG_ID
     --level DEFAULT_ACCESS_LEVEL
  [  --session-length=DEFAULT_SESSION_LENGTH                ]
  [  --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD  ]

Ganti kode berikut:

  • GROUP_ID: ID grup. Jika tidak memiliki ID grup, Anda dapat mengambilnya dengan memanggil metode get di resource grup.
  • ORG_ID: ID organisasi Anda.
  • DEFAULT_ACCESS_LEVEL: Nama tingkat akses opsional, yang berbentuk accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Ganti POLICY_ID dengan ID kebijakan akses, dan ACCESS_LEVEL_NAME dengan nama tingkat akses.
  • DEFAULT_SESSION_LENGTH: Durasi sesi opsional menggunakan format durasi ISO 8601, seperti 30m untuk 30 menit, atau 2h untuk dua jam.
  • DEFAULT_SESSION_REAUTH_METHOD: Metode opsional untuk menantang pengguna agar memverifikasi ulang identitas mereka, yang harus berupa salah satu dari berikut ini:
    • LOGIN: Terapkan login standar, yang dapat mencakup MFA atau faktor lain yang ditentukan Workspace.
    • PASSWORD: Hanya memerlukan sandi, meskipun faktor lain ditentukan. Jika sandi dikelola menggunakan IdP eksternal, pengguna akan dialihkan ke IdP. Jika sesi IdP aktif, pengguna akan diautentikasi ulang secara implisit. Jika IdP tidak aktif, pengguna harus login melalui IdP.
    • SECURITY_KEY: Memerlukan kunci keamanan hardware.

API

  1. Buat isi JSON:

    {
      "groupKey": "GROUP_ID",
      "accessLevels": [
        "DEFAULT_ACCESS_LEVEL"
      ],
      // optional:
      "sessionSettings": {
        "sessionLength": "DEFAULT_SESSION_LENGTH",
        "sessionReauthMethod": "DEFAULT_SESSION_REAUTH_METHOD"
      }
    }
    

    Ganti kode berikut:

    • GROUP_ID: ID grup. Jika tidak memiliki ID grup, Anda dapat mengambilnya dengan memanggil metode get di resource grup.
    • DEFAULT_ACCESS_LEVEL: Nama tingkat akses opsional, yang berbentuk accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Ganti POLICY_ID dengan ID kebijakan akses, dan ACCESS_LEVEL_NAME dengan nama tingkat akses.
    • DEFAULT_SESSION_LENGTH: Durasi sesi opsional menggunakan format durasi ISO 8601, seperti 30m untuk 30 menit, atau 2h untuk dua jam.
    • DEFAULT_SESSION_REAUTH_METHOD: Metode opsional untuk menantang pengguna agar memverifikasi ulang identitas mereka, yang harus berupa salah satu dari berikut ini:
      • LOGIN: Terapkan login standar, yang dapat mencakup MFA atau faktor lain yang ditentukan Workspace.
      • PASSWORD: Hanya memerlukan sandi, meskipun faktor lain ditentukan. Jika sandi dikelola menggunakan IdP eksternal, pengguna akan dialihkan ke IdP. Jika sesi IdP aktif, pengguna akan diautentikasi ulang secara implisit. Jika IdP tidak aktif, pengguna harus login melalui IdP.
      • SECURITY_KEY: Memerlukan kunci keamanan hardware.
  2. Kirim permintaan POST:

    POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
    

    ORG_ID Adalah ID untuk organisasi yang Anda gunakan untuk membuat peran Admin Pengikatan Akses Cloud. Jika properti access-context-manager/organization belum ditetapkan, ganti ORG_ID di flag --organization opsional dengan ID untuk organisasi yang Anda gunakan saat membuat peran Admin Pengikatan Akses Cloud.

Jika berhasil, Anda akan menerima representasi objek JSON. Jika ada masalah, Anda akan menerima pesan error.

Menentukan konfigurasi untuk aplikasi tertentu

Metode ini memungkinkan Anda menerapkan tingkat akses dan kontrol sesi yang berbeda ke aplikasi yang berbeda. Anda juga dapat menetapkan aturan default untuk aplikasi yang tidak memiliki konfigurasi tertentu.

Anda dapat menentukan aplikasi dalam binding akses menggunakan client ID OAuth-nya. Anda dapat menentukan aplikasi berikut menggunakan namanya:

Metode ini berguna jika Anda ingin melakukan hal berikut:

  • Menerapkan kebijakan hanya pada aplikasi tertentu.
  • Buat kebijakan umum, tetapi kecualikan beberapa aplikasi dari kebijakan tersebut.

gcloud

  1. Buat file pengikatan dalam format YAML dengan daftar entri cakupan dalam daftar scopedAccessSettings. Untuk setiap aplikasi yang ingin Anda petakan ke tingkat akses tertentu, sertakan entri clientScope.

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_A
        sessionSettings:
        - sessionLength: SESSION_LENGTH
          sessionReauthMethod: SESSION_REAUTH_METHOD
          sessionLengthEnabled: true
    - scope:
        clientScope:
          restrictedClientApplication:
            #
            # because this app is specified by `name`,
            # it won't work with sessionSettings.
            #
            # if you add sessionSettings, make sure to
            # replace the `name` key with `clientId`,
            # and use the OAuth client ID as the value.
            #
            name: CLIENT_NAME
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_B
    

    Ganti kode berikut:

    • CLIENT_ID: ID klien OAuth. Anda harus menggunakan clientId saat aplikasi berisi sessionSettings.
    • ACCESS_LEVEL_A: Nama tingkat akses dalam format accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • SESSION_LENGTH: Durasi sesi menggunakan format durasi ISO 8601, seperti 30m untuk 30 menit, atau 2h untuk dua jam.
    • SESSION_REAUTH_METHOD: Metode opsional untuk menantang pengguna agar memverifikasi ulang identitas mereka, yang harus berupa salah satu dari berikut ini:

      • LOGIN: Terapkan login standar, yang dapat mencakup MFA atau faktor lain yang ditentukan Workspace.
      • PASSWORD: Hanya memerlukan sandi, meskipun faktor lain ditentukan. Jika sandi dikelola menggunakan IdP eksternal, pengguna akan dialihkan ke IdP. Jika sesi IdP aktif, pengguna akan diautentikasi ulang secara implisit. Jika IdP tidak aktif, pengguna harus login melalui IdP.
      • SECURITY_KEY: Memerlukan kunci keamanan hardware.
    • CLIENT_NAME: Nama klien. Jika aplikasi berisi sessionSettings, Anda tidak dapat menggunakan nama klien. Sebagai gantinya, gunakan ID klien OAuth.

    • ACCESS_LEVEL_B: Nama tingkat akses dalam format accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.

    Untuk menetapkan tingkat akses default bagi aplikasi yang tidak ditentukan dalam file YAML, gunakan argumen --level. File YAML hanya mendukung setelan khusus aplikasi (scopedAccessSettings).

  2. Buat binding akses.

    gcloud access-context-manager cloud-bindings create
        --organization ORG_ID
        --group-key GROUP_ID
        --binding-file BINDING_FILE_PATH
      [  --level DEFAULT_ACCESS_LEVEL ]
      [  --session-length=DEFAULT_SESSION_LENGTH                ]
      [  --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD  ]
    

    Ganti kode berikut:

    • ORG_ID: ID organisasi Anda.
    • GROUP_ID: ID grup. Jika tidak memiliki ID grup, Anda dapat mengambilnya dengan memanggil metode get di resource grup.
    • BINDING_FILE_PATH: Jalur ke file YAML yang berisi skema binding akses. File pengikatan hanya mendukung scopedAccessSettings.
    • DEFAULT_ACCESS_LEVEL: Nama tingkat akses opsional, yang berbentuk accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Ganti POLICY_ID dengan ID kebijakan akses, dan ACCESS_LEVEL_NAME dengan nama tingkat akses.
    • DEFAULT_SESSION_LENGTH: Durasi sesi opsional menggunakan format durasi ISO 8601, seperti 30m untuk 30 menit, atau 2h untuk dua jam.
    • DEFAULT_SESSION_REAUTH_METHOD: Metode opsional untuk menantang pengguna agar memverifikasi ulang identitas mereka, yang harus berupa salah satu dari berikut ini:
      • LOGIN: Terapkan login standar, yang dapat mencakup MFA atau faktor lain yang ditentukan Workspace.
      • PASSWORD: Hanya memerlukan sandi, meskipun faktor lain ditentukan. Jika sandi dikelola menggunakan IdP eksternal, pengguna akan dialihkan ke IdP. Jika sesi IdP aktif, pengguna akan diautentikasi ulang secara implisit. Jika IdP tidak aktif, pengguna harus login melalui IdP.
      • SECURITY_KEY: Memerlukan kunci keamanan hardware.

Cara kerja argumen --level dan --binding-file

  • Jika Anda hanya menggunakan --binding-file, hanya aplikasi dalam file yang menerapkan kebijakan.
  • Jika Anda hanya menggunakan --level, tingkat akses berlaku untuk semua aplikasi.
  • Jika Anda menggunakan keduanya, aturan akan digabungkan. Nilai --level berlaku untuk semua aplikasi, sedangkan kebijakan dalam file YAML yang ditentukan oleh --binding-file hanya berlaku untuk aplikasi seperti yang ditentukan dalam file.

Bekerja dengan kontrol sesi

  • Untuk menyetel kontrol sesi default untuk semua aplikasi, gunakan --session-length dan --session-reauth-method.
  • Jika Anda juga menentukan kontrol sesi dalam file YAML, kontrol sesi tersebut akan menggantikan setelan default untuk aplikasi tertentu tersebut.
  • Anda harus menggunakan --session-length dan --session-reauth-method bersama-sama.

API

Buat isi JSON:

{
  "groupKey": "GROUP_ID",
   //
   // Optional; if specified, all applications that aren't defined in
   // scopedAccessSettings have these access levels applied.
   //
   // If more than one access level is specified, the user is
   // granted access if any one resolves to TRUE (OR logic, not AND).
   //
   // If you omit this key entirely, then no policy enforcement is
   // applied by default.
   //
  "accessLevels": [
    "DEFAULT_ACCESS_LEVEL"
  ],
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "clientId": "CLIENT_ID"
          }
        }
      },
      "activeSettings": {
        "accessLevels": [
          "ACCESS_LEVEL_A"
        ],
        "sessionSettings": [
          {
            "sessionLength": "SESSION_LENGTH",
            "sessionReauthMethod": "SESSION_REAUTH_METHOD",
            "sessionLengthEnabled": true
          }
        ]
      }
    },
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "CLIENT_NAME"
          }
        },
        "activeSettings": {
          "accessLevels": [
            "ACCESS_LEVEL_B"
          ]
        }
      }
    }
  ]
}

Ganti kode berikut:

  • GROUP_ID: ID grup. Jika tidak memiliki ID grup, Anda dapat mengambilnya dengan memanggil metode get di resource grup.
  • DEFAULT_ACCESS_LEVEL: Nama tingkat akses opsional, yang berbentuk accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Ganti POLICY_ID dengan ID kebijakan akses, dan ACCESS_LEVEL_NAME dengan nama tingkat akses.
  • CLIENT_ID: ID klien OAuth. Anda harus menggunakan clientId saat aplikasi berisi sessionSettings.
  • ACCESS_LEVEL_A: Nama tingkat akses dalam format accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
  • SESSION_LENGTH: Durasi sesi menggunakan format durasi ISO 8601, seperti 30m untuk 30 menit, atau 2h untuk dua jam.
  • SESSION_REAUTH_METHOD: Metode opsional untuk menantang pengguna agar memverifikasi ulang identitas mereka, yang harus berupa salah satu dari berikut ini:

    • LOGIN: Terapkan login standar, yang dapat mencakup MFA atau faktor lain yang ditentukan Workspace.
    • PASSWORD: Hanya memerlukan sandi, meskipun faktor lain ditentukan. Jika sandi dikelola menggunakan IdP eksternal, pengguna akan dialihkan ke IdP. Jika sesi IdP aktif, pengguna akan diautentikasi ulang secara implisit. Jika IdP tidak aktif, pengguna harus login melalui IdP.
    • SECURITY_KEY: Memerlukan kunci keamanan hardware.
  • CLIENT_NAME: Nama klien. Jika aplikasi berisi sessionSettings, Anda tidak dapat menggunakan nama klien. Sebagai gantinya, gunakan client ID OAuth.

  • ACCESS_LEVEL_B: Nama tingkat akses dalam format accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.

Kirim permintaan POST:

POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

ORG_ID adalah ID organisasi yang Anda gunakan untuk membuat peran Admin Pengikatan Akses Cloud. Jika properti access-context-manager/organization belum ditetapkan, ganti ORG_ID di flag --organization opsional dengan ID untuk organisasi yang Anda gunakan saat membuat peran Admin Pengikatan Akses Cloud.

Jika berhasil, Anda akan menerima representasi objek JSON, atau pesan error jika ada masalah.

Menggunakan tingkat akses uji coba untuk menyimulasikan penegakan

Tingkat akses uji coba memungkinkan Anda menguji kebijakan akses tanpa benar-benar menerapkannya. Hal ini membantu Anda memahami dampak kebijakan sebelum kebijakan tersebut ditayangkan. Anda dapat melihat log uji coba untuk melihat apa yang akan terjadi jika kebijakan aktif.

Hanya tingkat akses yang dapat digunakan dalam mode uji coba. Kontrol sesi tidak tersedia dalam mode uji coba.

Membuat binding uji coba

Anda dapat menentukan tingkat akses uji coba bersama dengan tingkat akses reguler dalam binding yang sama, atau Anda dapat menggunakan binding terpisah untuk uji coba.

gcloud

  1. Konfigurasi setelan akses.

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            name: CLIENT_NAME
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_A
      dryRunSettings:
        accessLevels:
        - DRY_RUN_ACCESS_LEVEL_1
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID
        dryRunSettings:
          accessLevels:
          - DRY_RUN_ACCESS_LEVEL_2
    

    Ganti kode berikut:

    • CLIENT_NAME: Nama klien. Jika aplikasi berisi sessionSettings, Anda tidak dapat menggunakan nama klien. Sebagai gantinya, gunakan ID klien OAuth.
    • ACCESS_LEVEL_A: Nama tingkat akses dalam format accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • DRY_RUN_ACCESS_LEVEL_1: Nama tingkat akses dalam format accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • CLIENT_ID: ID klien OAuth. Anda harus menggunakan clientId saat aplikasi berisi sessionSettings.
    • DRY_RUN_ACCESS_LEVEL_2: Nama tingkat akses dalam format accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
  2. Buat binding akses.

    gcloud access-context-manager cloud-bindings create
      --organization ORG_ID
      --group-key GROUP_ID
      --binding-file BINDING_FILE_PATH
      --dry-run-level DEFAULT_DRY_RUN_ACCESS_LEVEL
    

    Ganti kode berikut:

    • ORG_ID: ID organisasi Anda.
    • GROUP_ID: ID grup. Jika tidak memiliki ID grup, Anda dapat mengambilnya dengan memanggil metode get di resource grup.
    • BINDING_FILE_PATH: Jalur ke file YAML yang berisi skema binding akses. File pengikatan hanya mendukung scopedAccessSettings.
    • DEFAULT_DRY_RUN_ACCESS_LEVEL_2: Nama tingkat akses opsional dalam bentuk accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.

    Sertakan tanda ini untuk menerapkan tingkat akses uji coba yang ditentukan ke semua aplikasi secara default jika tidak ditentukan dalam YAML.

API

  1. Buat isi JSON:

    {
      "group_key": "GROUP_ID",
       //
       // Optional; if specified, all applications that aren't defined in
       // scopedAccessSettings have these access levels applied.
       //
       // If more than one access level is specified, the user is
       // granted access if any one resolves to TRUE (OR logic, not AND).
       //
       // If you omit this key entirely, then no policy enforcement is
       // be applied by default.
       //
      "access_levels": [
        "DEFAULT_ACCESS_LEVEL"
      ],
       //
       // Optional; if specified, all applications that aren't defined in
       // scopedAccessSettings will have these dry run access levels applied.
       //
      "dry_run_access_levels": [
        "DEFAULT_DRY_RUN_ACCESS_LEVEL"
      ],
      "scoped_access_settings": [
        {
          "scope": {
            "client_scope": {
              "restricted_client_application": {
                "name": "CLIENT_NAME"
              }
            }
          },
          "active_settings": {
            "access_levels": [
              "ACCESS_LEVEL_A"
            ]
          },
          "dry_run_settings": {
            "access_levels": [
              "DRY_RUN_ACCESS_LEVEL_1"
            ]
          }
        },
        {
          "scope": {
            "client_scope": {
              "restricted_client_application": {
                "client_id": "CLIENT_ID"
              }
            }
          },
          "active_settings": {
            "access_levels": [
              "DRY_RUN_ACCESS_LEVEL_2"
            ]
          }
        }
      ]
    }
    

    Ganti kode berikut:

    • GROUP_ID: ID grup. Jika tidak memiliki ID grup, Anda dapat mengambilnya dengan memanggil metode get di resource grup.
    • DEFAULT_ACCESS_LEVEL: Nama tingkat akses opsional, yang berbentuk accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Ganti POLICY_ID dengan ID kebijakan akses, dan ACCESS_LEVEL_NAME dengan nama tingkat akses.
    • DEFAULT_DRY_RUN_ACCESS_LEVEL: Nama tingkat akses opsional dalam bentuk accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • CLIENT_NAME: Nama klien. Jika aplikasi berisi sessionSettings, Anda tidak dapat menggunakan nama klien. Sebagai gantinya, gunakan ID klien OAuth.
    • ACCESS_LEVEL_A: Nama tingkat akses dalam format accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • DRY_RUN_ACCESS_LEVEL_1: Nama tingkat akses dalam bentuk accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • CLIENT_ID: ID klien OAuth. Anda harus menggunakan client_id saat aplikasi berisi sessionSettings.
    • DRY_RUN_ACCESS_LEVEL_2: Nama tingkat akses dalam bentuk accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
  2. Kirim permintaan POST:

    https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
    

    ORG_ID Adalah ID untuk organisasi yang Anda gunakan untuk membuat peran Admin Pengikatan Akses Cloud. Jika properti access-context-manager/organization belum ditetapkan, ganti ORG_ID di flag --organization opsional dengan ID untuk organisasi yang Anda gunakan saat membuat peran Admin Pengikatan Akses Cloud.

    Jika berhasil, Anda akan menerima representasi objek JSON. Jika ada masalah, Anda akan menerima pesan error.

Melihat log uji coba

Setelah menyiapkan uji coba, Anda dapat memeriksa log untuk melihat upaya akses mana yang akan ditolak.

Tabel berikut mencantumkan kolom log yang dapat Anda gunakan untuk membuat dan menjalankan kueri guna mendapatkan log:

Nama kolom Deskripsi
protoPayload.authenticationInfo.principalEmail ID email akun utama yang aksesnya ditolak.
protoPayload.metadata.deniedApplications Nama aplikasi yang aksesnya ditolak.
protoPayload.metadata.evaluationResult Hasil evaluasi kebijakan akses aktif. Nilai yang mungkin: GRANTED atau DENIED.
protoPayload.metadata.appliedAccessLevels Tingkat akses yang diterapkan yang diperlukan oleh kebijakan akses aktif.
protoPayload.metadata.appliedDryRunAccessLevels Tingkat akses yang diterapkan yang diperlukan oleh kebijakan akses uji coba.
protoPayload.metadata.dryRunEvaluationResult Hasil evaluasi kebijakan akses uji coba, yang menunjukkan tindakan yang dimaksud saat kebijakan akses diterapkan. Nilai yang mungkin: GRANTED atau DENIED.

Untuk mengetahui detail tentang cara membuat kueri untuk log, lihat Bahasa kueri logging.