Mengonfigurasi Akses Kontekstual untuk akun layanan

Panduan ini menjelaskan cara menyiapkan Akses Kontekstual untuk membantu mengamankan akses akun layanan ke API, berdasarkan tingkat akses yang Anda tentukan. Google Cloud

Batasan

Batasan berikut berlaku untuk kebijakan Akses Kontekstual bagi akun layanan:

  • Atribut berbasis jaringan atau berbasis alamat IP tidak dapat digunakan untuk binding akun layanan jika akun layanan akan digunakan untuk eksekusi alur kerja dan Cloud Scheduler.

  • Koneksi ke cluster GKE pribadi, menggunakan kubectl, dan ke Cloud SQL, menggunakan Proxy Auth, tidak dapat diblokir oleh kebijakan Akses Sesuai Konteks.

  • Jika tingkat akses yang terikat ke akun layanan berisi atribut yang tidak didukung, seperti atribut Device, maka akses API akan ditolak.

  • Tingkat akses yang diberi cakupan tidak didukung untuk akun layanan.

Jika Anda menggunakan Cloud Build dan Cloud Run, sebaiknya Anda menggunakan fitur VPC bawaan berikut:

Sebelum memulai

  1. Pastikan Anda memiliki Google Cloud organisasi dan setidaknya satu Google Cloud project.
  2. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  3. Instal Google Cloud CLI.

  4. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  5. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  6. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  7. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  8. Instal Google Cloud CLI.

  9. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  10. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  11. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  12. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  13. Update komponen Google Cloud CLI:
    gcloud components update --quiet
  14. Buat akun layanan di project Anda jika Anda belum memilikinya. Akun layanan ini adalah target kebijakan akses.

Peran yang diperlukan

Bagian ini menjelaskan peran Identity and Access Management (IAM) yang diperlukan untuk menggunakan Akses Sesuai Konteks.

Peran level project

Untuk mendapatkan izin yang diperlukan di tingkat project, minta administrator untuk memberi Anda peran IAM Service Account Admin (roles/iam.serviceAccountAdmin) di akun pengguna atau akun layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin the required permissions, yang diperlukan untuk di tingkat project.

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Peran tingkat organisasi

Untuk mendapatkan izin yang diperlukan di tingkat organisasi, minta administrator untuk memberi Anda peran IAM berikut pada akun pengguna atau akun layanan:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin the required permissions , yang diperlukan untuk di tingkat organisasi.

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Mengikat kebijakan akses ke tingkat resource yang berbeda

Anda dapat mengikat kebijakan akses dengan mode penerapan yang sama ke resource yang berada di tingkat hierarki resource yang berbeda. Saat resource mencoba mengakses, Akses Kontekstual menggunakan kebijakan yang terikat ke resource tersebut sebelum mencoba menggunakan kebijakan yang terikat ke resource tingkat yang lebih tinggi.

Misalnya, Anda dapat mengikat kebijakan akses mode penerapan langsung ke akun layanan dan kebijakan mode penerapan yang berbeda ke project yang berisi akun layanan. Saat akun layanan mencoba mengakses resource, Akses Kontekstual akan mengevaluasi kebijakan yang terikat ke akun layanan. Untuk akun layanan lain dalam project yang tidak memiliki kebijakan akses yang terikat padanya, Akses Kontekstual mengevaluasi kebijakan mode penerapan yang terikat ke project. Hal yang sama berlaku jika mode penerapan ditetapkan ke uji coba untuk kebijakan tingkat project dan kebijakan tingkat akun layanan.

Anda dapat menggunakan beberapa kebijakan akses untuk men-deploy kebijakan akses secara bertahap dan selektif—misalnya, Anda dapat melakukan hal berikut:

  1. Ikat kebijakan akses dalam mode uji coba di tingkat project dan pastikan kebijakan tersebut berfungsi seperti yang Anda harapkan dengan memeriksa peristiwa akses ditolak di Cloud Audit Logs.
  2. Ikat kebijakan akses dalam mode penerapan hanya ke akun layanan tertentu.
  3. Ikat kebijakan akses dalam mode penerapan di tingkat project, dan ikat kebijakan akses mode penerapan yang kurang ketat ke akun layanan tertentu sesuai kebutuhan.

Atribut tingkat akses untuk akun layanan

Bagian ini mencantumkan tingkat akses yang didukung untuk akun layanan.

Atribut berikut didukung untuk akun layanan:

  • Subjaringan IP, yang didasarkan pada alamat IP publik.
  • Jaringan VPC, yang didasarkan pada alamat IP pribadi.
  • Geolokasi, yang didasarkan pada alamat IP publik.

    Saat akun layanan membuat permintaan ke Google Cloud API, permintaan tersebut dievaluasi oleh Akses Kontekstual, dan alamat IP permintaan dibandingkan dengan alamat IP yang ditentukan dalam kebijakan Akses Kontekstual. Jika alamat IP cocok, panggilan API akan diizinkan. Jika alamat IP tidak cocok, panggilan API akan ditolak.

  • Tingkat akses kustom dengan ekspresi Common Expression Language (CEL). Ekspresi harus bernilai true untuk mengizinkan akses dan false untuk menolak akses.

    Ekspresi CEL berikut berguna untuk membatasi akses berdasarkan akun layanan.

    Ekspresi akan dievaluasi menjadi true jika permintaan berasal dari satu atau beberapa nomor project yang ditentukan:

        expression: "originatesFromProjects(origin, [PROJECT_NUMBER, ...])"
        

    originatesFromProjects memeriksa apakah permintaan berasal dari jaringan yang terkait dengan project yang ditentukan dan apakah permintaan berasal dari alamat IP pribadi.

  • Waktu dalam sehari, yang didasarkan pada waktu dan tanggal permintaan dalam zona waktu yang ditentukan.

    Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi kondisi akses waktu dan hari.

Membuat tingkat akses

Bagian ini menjelaskan cara membuat tingkat akses dalam organisasi Anda. Tingkat akses menentukan kondisi yang harus dipenuhi agar akses diizinkan.

  1. Ikuti petunjuk untuk Membuat tingkat akses dasar atau Membuat tingkat akses kustom.

  2. Catat nama lengkap kebijakan akses, yang memiliki format: accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.

Membuat binding akses

Ikat tingkat akses ke akun layanan yang dipilih. Dengan demikian, kondisi yang ditentukan dalam tingkat akses akan diterapkan. Anda dapat mengikat tingkat akses ke satu akun layanan atau semua akun layanan dalam project.

Mengikat tingkat akses ke akun layanan tertentu

Bagian ini menjelaskan cara mengikat tingkat akses ke akun layanan tertentu.

gcloud

Ikat tingkat akses ke akun layanan menggunakan gcloud CLI.

gcloud access-context-manager cloud-bindings create \
    --organization=ORGANIZATION_ID \
    --service-account=SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
    --level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME

Ganti kode berikut:

  • ORGANIZATION_ID: ID organisasi Google Cloud Anda
  • SERVICE_ACCOUNT_NAME: nama, bukan email, akun layanan target
  • SERVICE_ACCOUNT_PROJECT_ID: ID project yang berisi akun layanan target
  • POLICY_ID: ID kebijakan akses
  • ACCESS_LEVEL_NAME: nama tingkat akses yang Anda buat

    Untuk menggunakan Akses Kontekstual tanpa menerapkan tingkat akses dan melarang akses, Anda dapat mengikat tingkat akses dalam mode uji coba.

REST API

Untuk mengikat tingkat akses ke akun layanan tertentu menggunakan REST API, jalankan perintah berikut:

  1. Buat file request.json dengan konten berikut:

    {
      "principal": {
        "serviceAccount": "SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com"
      },
      "accessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"]
    }
    

    Ganti kode berikut:

    • SERVICE_ACCOUNT_NAME: nama, bukan email, akun layanan target

    • SERVICE_ACCOUNT_PROJECT_ID: ID project yang berisi akun layanan target

    • POLICY_ID: ID kebijakan akses

    • ACCESS_LEVEL_NAME: nama tingkat akses yang Anda buat

  2. Jalankan perintah berikut:

    curl -H "X-Goog-User-Project: PROJECT_ID" -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      "https://accesscontextmanager.googleapis.com/v1/organizations/ORGANIZATION_ID/gcpUserAccessBindings"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project yang Anda gunakan untuk melakukan panggilan API

    • ORGANIZATION_ID: ID organisasi Google Cloud Anda.

Mengikat tingkat akses ke semua akun layanan dalam project

Bagian ini menjelaskan cara mengikat tingkat akses ke semua akun layanan dalam project.

gcloud

Untuk mengikat tingkat akses ke semua akun layanan dalam project menggunakan gcloud CLI, jalankan perintah berikut:

gcloud access-context-manager cloud-bindings create \
  --organization=ORGANIZATION_ID \
  --service-account-project-number=PROJECT_NUMBER \
  --level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME

Ganti kode berikut:

  • ORGANIZATION_ID: ID organisasi Google Cloud Anda
  • PROJECT_NUMBER: nomor project dari project yang berisi semua akun layanan yang aksesnya ingin Anda ikatkan
  • POLICY_ID: ID kebijakan akses
  • ACCESS_LEVEL_NAME: nama tingkat akses yang Anda buat.

REST API

Untuk mengikat tingkat akses ke semua akun layanan dalam project menggunakan REST API, lakukan hal berikut:

  1. Buat file request.json dengan konten berikut:

    {
      "principal": {
        "serviceAccountProjectNumber": "PROJECT_NUMBER"
      },
      "accessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"]
    }
    

    Ganti kode berikut:

    • PROJECT_NUMBER: nomor project dari project yang berisi semua akun layanan yang aksesnya ingin Anda ikatkan
    • POLICY_ID: ID kebijakan akses
    • ACCESS_LEVEL_NAME: nama tingkat akses yang Anda buat.
  2. Jalankan perintah berikut:

    curl -H "X-Goog-User-Project: PROJECT_ID" -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://accesscontextmanager.googleapis.com/v1/organizations/ORGANIZATION_ID/gcpUserAccessBindings"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project yang Anda gunakan untuk melakukan panggilan API
    • ORGANIZATION_ID: ID organisasi Google Cloud Anda

Untuk menggunakan Akses Kontekstual tanpa menerapkan tingkat akses dan menolak akses, Anda dapat mengikat kebijakan akses dalam mode uji coba.

Respons API untuk operasi pembuatan binding mencakup nama binding, yang berisi ID binding unik.

Menggunakan mode uji coba

Anda dapat mengikat kebijakan akses dalam mode uji coba. Saat Anda menggunakan mode uji coba, akun layanan Anda dapat terus mengakses resource tanpa penegakan. Namun, jika akun layanan Anda mencoba akses yang melanggar kebijakan akses, pelanggaran tersebut dicatat ke Cloud Audit Logs.

Mengikat kebijakan akses dalam mode uji coba

gcloud

Untuk mengikat kebijakan akses dalam mode uji coba, ganti parameter --level dengan --dry-run-level, yang diformat sebagai berikut:

--dry-run-level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME

REST API

Untuk mengikat kebijakan akses dalam mode uji coba, buat file request.json dengan konten berikut:

{
"principal": {
  "serviceAccountProjectNumber": "TARGET_PROJECT_NUMBER"
},
"dryRunAccessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"]
}

Ganti kode berikut:

  • TARGET_PROJECT_NUMBER: nomor project target
  • POLICY_ID: ID kebijakan akses
  • ACCESS_LEVEL_NAME: nama tingkat akses

Memeriksa Cloud Audit Logs

Bagian ini menjelaskan cara memeriksa Cloud Audit Logs untuk penolakan akses mode uji coba untuk akun layanan Anda. Untuk mempelajari lebih lanjut cara menelusuri entri mode uji coba di Cloud Audit Logs, lihat Melihat log mode uji coba.

Konsol

Untuk melihat penolakan akses akun layanan mode uji coba Cloud Audit Logs menggunakan konsol Google Cloud , lakukan hal berikut:

Di konsol Google Cloud , buka halaman Logs Explorer:

Buka Logs Explorer

Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.

  1. Di konsol Google Cloud , pilih project atau organisasi Anda.

  2. Di kolom Log query, masukkan kueri berikut:

    protoPayload.serviceName="contextawareaccess.googleapis.com"
    protoPayload.metadata.dryRunEvaluationResult:DENIED
    SEARCH("`SERVICE_ACCOUNT_NAME`")
    
  3. Di pemilih rentang waktu, pilih dari waktu relatif yang telah ditentukan sebelumnya, seperti 30 menit terakhir, 1 jam terakhir, atau 24 jam terakhir, atau tentukan rentang kustom.

gcloud

Untuk melihat penolakan akses akun layanan mode uji coba Cloud Audit Logs dengan menggunakan gcloud CLI, lakukan hal berikut:

gcloud logging read \
'protoPayload.serviceName="contextawareaccess.googleapis.com" AND
 protoPayload.metadata.dryRunEvaluationResult:DENIED AND
 SEARCH("`SERVICE_ACCOUNT_NAME`")' \
  --organization=ORGANIZATION_ID

Ganti kode berikut:

  • ORGANIZATION_ID: ID organisasi
  • SERVICE_ACCOUNT_NAME: nama akun layanan

Perintah gcloud logging read mendukung flag --freshness untuk melihat informasi logging selama jangka waktu relatif. Misalnya, dengan menambahkan --freshness=3h ke perintah, Anda dapat melihat entri log mode uji coba selama 3 jam terakhir.

Pemecahan masalah

Bagian ini menjelaskan cara memecahkan masalah Akses Kontekstual untuk akun layanan.

Pemecahan masalah umum

  1. Tinjau Cloud Audit Logs.

    Gunakan kueri log berikut dan tinjau entri log untuk mengetahui informasi selengkapnya.

    protoPayload.serviceName="contextawareaccess.googleapis.com"
    
  2. Tinjau nama resource tingkat akses yang dilaporkan Akses Kontekstual saat mencatat peristiwa penerapan.

  3. Pastikan tingkat akses adalah resource tingkat organisasi.

  4. Pastikan tingkat akses dalam kebijakan akses Anda didasarkan pada atribut yang didukung untuk akun layanan.

  5. Pastikan kebijakan akses terikat ke akun layanan yang dimaksud.

  6. Pastikan identitas pengguna Anda tidak dibatasi aksesnya oleh kebijakan akses. Hal ini dapat terjadi saat identitas pengguna adalah anggota grup Google yang memiliki kebijakan akses terikat. Kebijakan tersebut dapat membatasi akses pengguna, sehingga mencegah alur panggilan ke akun layanan.

  7. Hubungi administrator keamanan Anda.

Akses ditolak

Akses ditolak karena alasan berikut:

  • Anda mengikat kebijakan akses dalam mode penerapan, bukan mode uji coba.

    Daripada menerapkan, Anda dapat menggunakan mode uji coba untuk mengizinkan akun layanan mengakses resource dan mencatat peristiwa penerapan tanpa benar-benar menolak akses ke resource. Selain itu, Anda dapat mengikuti petunjuk pemecahan masalah umum.

  • Tingkat akses perlu diperbarui untuk menyertakan lebih banyak sumber. Misalnya, alamat IP yang digunakan tidak disertakan dalam tingkat akses saat dibuat.

Langkah berikutnya