Membuat dan menerapkan tingkat akses ke resource yang diamankan oleh IAP

Halaman ini menjelaskan cara membuat tingkat akses menggunakan Access Context Manager dan menerapkannya pada resource yang diamankan Identity-Aware Proxy (IAP).

Ringkasan

Tingkat akses adalah kumpulan atribut yang ditetapkan ke permintaan berdasarkan asalnya. Dengan menggunakan informasi seperti jenis perangkat, alamat IP, dan identitas pengguna, Anda dapat menentukan tingkat akses yang dapat diberikan. Misalnya, Anda dapat menetapkan tingkat "High_Trust" ke koneksi dari dalam jaringan perusahaan Anda dan kepercayaan "Medium_Trust" ke perangkat eksternal yang menjalankan sistem operasi yang disetujui.

Informasi perangkat dikumpulkan dan dirujuk oleh tingkat akses setelah Anda menyiapkan Endpoint Verification. Verifikasi Endpoint membuat inventaris semua perangkat perusahaan dan pribadi yang mengakses resource perusahaan Anda.

Tingkat akses diterapkan dengan menambahkannya sebagai kondisi Identity and Access Management (IAM) pada resource yang diamankan IAP. IAP memungkinkan Anda menerapkan model kontrol akses tingkat resource yang terperinci, bukan menggunakan firewall tingkat jaringan. Misalnya, Anda dapat menetapkan bahwa meskipun banyak resource tersedia untuk "Medium_Trust", resource tertentu yang lebih sensitif memerlukan tingkat "High_Trust".

Untuk informasi selengkapnya, lihat ringkasan Pengelola Akses Konteks.

Sebelum memulai

Sebelum memulai, Anda perlu melakukan hal berikut:

  • Mengamankan resource dengan IAP.
  • Siapkan Verifikasi Endpoint. Perhatikan bahwa ini hanya diperlukan jika Anda ingin membatasi akses ke resource berdasarkan informasi perangkat pengguna seperti status enkripsi penyimpanan.
  • Pastikan salah satu peran berikut diberikan pada project Anda.

    • Access Context Manager Admin
    • Access Context Manager Editor

Membuat tingkat akses

Proses berikut akan membuat tingkat akses.

Pada contoh ini, misalkan Anda ingin membuat tingkat akses yang mengizinkan grup auditor internal mengakses Kemampuan Observasi Google Cloud untuk sebuah project. Semua perangkat untuk auditor akan diberi IP pada subnet yang berkisar antara 203.0.113.0 dan 203.0.113.127. Anda juga ingin memastikan bahwa perangkat mereka telah dienkripsi. Anda tahu tidak akan ada perangkat yang ditetapkan ke subnet itu selain yang digunakan oleh auditor.

Konsol

  1. Membuka halaman Access Context Manager di Konsol Google Cloud.

    Buka halaman Access Context Manager

  2. Jika diminta, pilih organisasi Anda.

  3. Di bagian atas halaman Access Context Manager, klik New.

  4. Di panel New Access Level, di bagian Conditions, klik Add attribute, lalu klik Device Policy.

  5. Klik drop-down Enkripsi penyimpanan dan pilih Encrypted. Perhatikan bahwa aturan ini hanya berfungsi setelah Anda menyiapkan Verifikasi Endpoint di perangkat karyawan Anda.

  6. Klik kembali Add attribute, lalu pilih IP Subnetworks.

  7. Di kotak Subnetwork IP, masukkan satu atau beberapa rentang IPv4 atau IPv6 yang diformat sebagai blok CIDR.

    Dalam contoh ini, untuk membatasi akses hanya untuk auditor, Anda akan memasukkan 203.0.113.0/25 di kotak Subnetwork IP.

  8. Klik Save.

gcloud

  1. Buat file .yaml untuk level akses yang menyertakan satu atau beberapa rentang IPv4 atau IPv6 yang diformat sebagai blok CIDR.

    Dalam contoh ini, untuk membatasi akses hanya untuk auditor, Anda perlu memasukkan kode berikut ke dalam file .yaml:

    - ipSubnetworks:
        - 203.0.113.0/25
    - devicePolicy:
        allowedEncryptionStatuses
          - ENCRYPTED
    

    Untuk daftar atribut tingkat akses dan format YAMLnya, lihat Atribut tingkat akses. Lihat contoh file YAML tingkat akses ini untuk mengetahui file YAML yang komprehensif dari semua atribut yang mungkin.

    Perhatikan bahwa aturan devicePolicy hanya berfungsi setelah Anda menyiapkan Verifikasi Endpoint di perangkat karyawan.

  2. Simpan file. Dalam contoh ini, file diberi nama CONDITIONS.yaml.

  3. Buat tingkat akses.

    gcloud access-context-manager levels create NAME \
       --title TITLE \
       --basic-level-spec CONDITIONS.yaml \
       --policy=POLICY_NAME
    

    Dengan keterangan:

    • NAME adalah nama unik untuk tingkat akses. Nama ini harus dimulai dengan huruf dan hanya menyertakan huruf, angka, dan garis bawah.

    • TITLE adalah judul yang dapat dibaca manusia. Nama ini harus unik untuk kebijakan tersebut.

    • POLICY_NAME adalah nama kebijakan akses organisasi Anda.

    Anda akan melihat output yang mirip dengan:

    Create request issued for: NAME
    Waiting for operation [accessPolicies/POLICY_NAME/accessLevels/NAME/create/1521594488380943] to complete...done.
    Created level NAME.
    

API

  1. Buat isi permintaan untuk membuat resource AccessLevel yang menyertakan satu atau beberapa rentang IPv4 atau IPv6 yang diformat sebagai blok CIDR dan kebijakan perangkat yang memerlukan penyimpanan terenkripsi.

    Dalam contoh ini, untuk membatasi akses hanya untuk auditor, Anda harus memasukkan kode berikut ke dalam isi permintaan:

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "ipSubnetworks": [
             "203.0.113.0/25"
           ]
         },
         {
         "devicePolicy": [
           "allowedEncryptionStatuses": [
             "ENCRYPTED"
           ]
         ]
         }
       ]
     }
    }
    

    Dengan keterangan:

    • NAME adalah nama unik untuk tingkat akses. Nama ini harus dimulai dengan huruf dan hanya menyertakan huruf, angka, dan garis bawah.

    • TITLE adalah judul yang dapat dibaca manusia. Nama ini harus unik untuk kebijakan tersebut.

  2. Buat tingkat akses dengan memanggil accessLevels.create.

    POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels
    

    Dengan keterangan:

    • POLICY_NAME adalah nama kebijakan akses organisasi Anda.

Menerapkan tingkat akses

Resource yang diamankan oleh IAP memiliki kebijakan IAM yang mengikat peran IAP ke resource tersebut.

Dengan menambahkan binding kondisional IAM ke kebijakan IAM, akses ke resource Anda akan dibatasi lebih lanjut berdasarkan atribut permintaan. Atribut permintaan ini mencakup:

  • Tingkat akses
  • Host/Jalur URL
  • Date/Time

Perhatikan bahwa nilai permintaan yang dibandingkan dengan request.host dan request.path yang ditentukan dalam binding kondisional IAM harus sama persis. Misalnya, jika Anda membatasi akses ke jalur yang dimulai dengan /internal admin, seseorang dapat mengabaikan pembatasan ini dengan membuka /internal%20admin. Lihat Menggunakan kondisi nama host dan jalur untuk mengetahui informasi selengkapnya.

Langkah-langkah berikut menunjukkan cara menambahkan tingkat akses ke resource yang diamankan IAP dengan memperbarui kebijakan IAM-nya.

Konsol

  1. Buka halaman admin IAP.

    Buka halaman admin IAP

  2. Pilih kotak centang di samping resource yang izin IAMnya ingin Anda perbarui.

  3. Di sisi kanan Panel info, klik Tambahkan akun utama.

  4. Di kotak New principal, masukkan akun utama yang ingin Anda tetapkan perannya.

  5. Pada menu drop-down Pilih peran, pilih peran IAP-secured Web App User.

  6. Untuk menentukan tingkat akses yang ada, pilih tingkat akses dari menu drop-down Tingkat akses. Anda harus memilih peran IAP-secured Web App User dan memiliki izin tingkat organisasi untuk melihat tingkat akses yang ada.

    Jika Anda menerapkan beberapa tingkat akses ke resource, pengguna diberi akses ke resource jika mereka memenuhi kondisi yang ditentukan di setidaknya salah satu tingkat akses yang Anda pilih (ini adalah OR logis dari tingkat akses dalam daftar). Jika Anda ingin pengguna memenuhi kondisi di lebih dari satu tingkat akses (AND logis dari tingkat akses), buat tingkat akses yang berisi beberapa tingkat akses.

  7. Jika Anda ingin menambahkan peran lainnya ke akun utama, klik Tambahkan peran lain.

  8. Setelah selesai menambahkan peran, klik Simpan.

gcloud

Saat ini, Anda hanya dapat menggunakan gcloud CLI untuk menetapkan binding kondisional level project.

Untuk menetapkan binding kondisional, edit file policy.yaml project Anda dengan mengikuti proses berikut:

  1. Buka kebijakan IAM untuk aplikasi menggunakan perintah gcloud berikut:

    gcloud projects get-iam-policy PROJECT_ID > policy.yaml
    
  2. Edit file policy.yaml untuk menentukan hal berikut:

    • Pengguna dan grup tempat Anda ingin menerapkan kondisi IAM.
    • Peran iap.httpsResourceAccessor untuk memberinya akses ke resource.
    • Kondisi IAM dengan tingkat akses Anda.

    Kondisi berikut memberikan akses kepada pengguna dan grup jika persyaratan tingkat akses ACCESS_LEVEL_NAME terpenuhi dan jalur URL resource dimulai dengan /.

    ...
    - members:
    - group:EXAMPLE_GROUP@GOOGLE.COM
    - user:EXAMPLE_USER@GOOGLE.COM
    role: roles/iap.httpsResourceAccessor
    condition:
        expression: "accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")
        title: CONDITION_TITLE
    ...
    
  3. Ikat kebijakan ke aplikasi menggunakan perintah set-iam-policy. gcloud projects set-iam-policy PROJECT_ID policy.yaml

API

Untuk mengedit file policy.json aplikasi Anda, ikuti proses di bawah untuk jenis aplikasi Anda. Lihat Mengelola akses ke resource yang diamankan oleh IAP untuk mengetahui informasi selengkapnya tentang penggunaan IAM API untuk mengelola kebijakan akses.

Sebelum menyelesaikan langkah-langkah API khusus aplikasi di bawah ini, ekspor variabel berikut:

 export PROJECT_NUM=PROJECT_NUMBER
 export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web
 # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
 export JSON_NEW_POLICY=POLICY_FILE.JSON
 

App Engine

  1. Ekspor variabel App Engine berikut:

    # The APP_ID is usually the project ID
    export GAE_APP_ID=APP_ID
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}

  2. Dapatkan kebijakan IAM untuk aplikasi App Engine menggunakan metode getIamPolicy. Bit data kosong di bagian akhir mengubah permintaan curl menjadi POST, bukan GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -d '' ${GAE_BASE_URL}/:getIamPolicy
    

  3. Tambahkan binding kondisional IAM Anda ke file JSON kebijakan IAM. Berikut adalah contoh file policy.json yang telah diedit yang mengikat peran iap.httpsResourceAccessor ke dua pengguna, sehingga memberi mereka akses ke resource yang diamankan oleh BeyondCorp Enterprise. Kondisi IAM telah ditambahkan untuk memberi mereka akses ke resource hanya jika persyaratan tingkat akses ACCESS_LEVEL_NAME terpenuhi dan jalur URL resource dimulai dengan /. Hanya boleh ada satu kondisi per binding.

    Contoh file policy.json

    {
    "policy": {
      "bindings": [
            {
              "role": "roles/iap.httpsResourceAccessor",
              "members": [
                  "group:EXAMPLE_GROUP@GOOGLE.COM",
                  "user:EXAMPLE_USER@GOOGLE.COM"
              ],
              "condition": {
                "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
                "title": "CONDITION_NAME"
              }
            }
        ]
      }
    }
    

  4. Tetapkan file policy.json baru menggunakan metode setIamPolicy.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    ${GAE_BASE_URL}:setIamPolicy -d @${JSON_NEW_POLICY}
    

Layanan dan versi App Engine

Anda juga dapat memperbarui kebijakan IAM layanan App Engine, semua versi, atau versi layanan tertentu. Cara melakukannya pada versi layanan tertentu:

  1. Ekspor variabel tambahan berikut.
    export GAE_SERVICE=SERVICE_NAME
    export GAE_VERSION=VERSION_NAME
    
  2. Perbarui variabel GAE_BASE_URL yang diekspor.
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
  3. Dapatkan dan tetapkan kebijakan IAM untuk versi menggunakan perintah getIamPolicy dan setIamPolicy yang ditampilkan di atas.

GKE dan Compute Engine

  1. Ekspor project ID layanan backend Anda.

    export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME

  2. Dapatkan kebijakan IAM untuk aplikasi Compute Engine menggunakan metode getIamPolicy. Bit data kosong di bagian akhir mengubah permintaan curl menjadi POST, bukan GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \
     -d ''
    

  3. Tambahkan binding kondisional IAM Anda ke file JSON kebijakan IAM. Berikut adalah contoh file policy.json yang telah diedit yang mengikat peran iap.httpsResourceAccessor ke dua pengguna, sehingga memberi mereka akses ke resource yang diamankan oleh BeyondCorp Enterprise. Kondisi IAM telah ditambahkan untuk memberi klien akses ke resource hanya jika persyaratan tingkat akses ACCESS_LEVEL_NAME terpenuhi dan jalur URL resource dimulai dengan /. Hanya boleh ada satu kondisi per binding.


    Contoh file policy.json

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/iap.httpsResourceAccessor",
            "members": [
              "group":EXAMPLE_GROUP@GOOGLE.COM,
              "user:EXAMPLE_USER@GOOGLE.COM"
            ],
            "condition": {
              "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
              "title": "CONDITION_NAME"
            }
          }
        ]
      }
    }
    

  4. Tetapkan file policy.json baru menggunakan metode setIamPolicy.

    curl -i -H "Content-Type:application/json" \
         -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \
         -d @${JSON_NEW_POLICY}