Menerapkan kebijakan ke grup pengguna menggunakan binding akses

Anda dapat menggunakan binding akses untuk mengontrol aplikasi dan resource 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 menentukan perilaku tertentu untuk setiap aplikasi.

Untuk memastikan bahwa Anda telah 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 kebijakan apa pun mengizinkannya (OR, bukan AND).
  • Untuk kontrol sesi, hanya binding akses yang baru 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 selama 30 menit, atau 2h selama dua jam.
  • DEFAULT_SESSION_REAUTH_METHOD: Metode opsional untuk meminta pengguna memverifikasi ulang identitas mereka, yang harus berupa salah satu dari hal berikut:
    • LOGIN: Terapkan login standar, yang dapat mencakup MFA atau faktor lain yang ditentukan Workspace.
    • PASSWORD: Hanya mewajibkan 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: Mewajibkan 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 selama 30 menit, atau 2h selama dua jam.
    • DEFAULT_SESSION_REAUTH_METHOD: Metode opsional untuk meminta pengguna memverifikasi ulang identitas mereka, yang harus berupa salah satu dari hal berikut:
      • LOGIN: Terapkan login standar, yang dapat mencakup MFA atau faktor lain yang ditentukan Workspace.
      • PASSWORD: Hanya mewajibkan 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: Mewajibkan 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 Cloud Access Binding Admin. Jika properti access-context-manager/organization belum ditetapkan, ganti ORG_ID dalam flag --organization opsional dengan ID untuk organisasi yang Anda gunakan saat membuat peran Admin Cloud Access Binding.

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

Menentukan konfigurasi untuk aplikasi tertentu

Metode ini memungkinkan Anda menerapkan berbagai tingkat akses dan kontrol sesi ke berbagai aplikasi. Anda juga dapat menetapkan aturan default untuk aplikasi yang tidak memiliki konfigurasi tertentu. Metode ini berguna saat Anda ingin melakukan hal berikut:

  • Terapkan kebijakan hanya ke aplikasi tertentu.
  • Buat kebijakan umum, tetapi kecualikan beberapa aplikasi dari kebijakan tersebut.

gcloud

  1. Buat file binding 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: Client ID 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 selama 30 menit, atau 2h selama dua jam.
    • SESSION_REAUTH_METHOD: Metode opsional untuk meminta pengguna memverifikasi ulang identitas mereka, yang harus berupa salah satu dari hal berikut:

      • LOGIN: Terapkan login standar, yang dapat mencakup MFA atau faktor lain yang ditentukan Workspace.
      • PASSWORD: Hanya mewajibkan 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: Mewajibkan 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.

    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 binding 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 selama 30 menit, atau 2h selama dua jam.
    • DEFAULT_SESSION_REAUTH_METHOD: Metode opsional untuk meminta pengguna memverifikasi ulang identitas mereka, yang harus berupa salah satu dari hal berikut:
      • LOGIN: Terapkan login standar, yang dapat mencakup MFA atau faktor lain yang ditentukan Workspace.
      • PASSWORD: Hanya mewajibkan 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: Mewajibkan 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 akan berlaku untuk semua aplikasi.
  • Jika Anda menggunakan keduanya, aturan dalam file YAML akan diprioritaskan. Nilai --level berlaku untuk aplikasi apa pun yang tidak tercantum dalam file.

Menggunakan kontrol sesi

  • Untuk menetapkan 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 mengganti 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: Client ID 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 selama 30 menit, atau 2h selama dua jam.
  • SESSION_REAUTH_METHOD: Metode opsional untuk meminta pengguna memverifikasi ulang identitas mereka, yang harus berupa salah satu dari hal berikut:

    • LOGIN: Terapkan login standar, yang dapat mencakup MFA atau faktor lain yang ditentukan Workspace.
    • PASSWORD: Hanya mewajibkan 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: Mewajibkan 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 untuk organisasi yang Anda gunakan untuk membuat peran Cloud Access Binding Admin. Jika properti access-context-manager/organization belum ditetapkan, ganti ORG_ID dalam flag --organization opsional dengan ID untuk organisasi yang Anda gunakan saat membuat peran Admin Cloud Access Binding.

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

Menggunakan tingkat akses uji coba untuk menyimulasikan penerapan

Tingkat akses uji coba memungkinkan Anda menguji kebijakan akses tanpa benar-benar menerapkannya. Hal ini membantu Anda memahami dampak kebijakan sebelum diaktifkan. Anda dapat melihat log uji coba untuk melihat hal 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 client ID 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: Client ID 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 binding 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 client ID 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: Client ID 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 Cloud Access Binding Admin. Jika properti access-context-manager/organization belum ditetapkan, ganti ORG_ID dalam flag --organization opsional dengan ID untuk organisasi yang Anda gunakan saat membuat peran Admin Cloud Access Binding.

    Jika berhasil, Anda akan menerima representasi objek JSON. Jika terjadi 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. Kemungkinan nilainya adalah: 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 diinginkan saat kebijakan akses diterapkan. Kemungkinan nilainya adalah: GRANTED atau DENIED.

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