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:
Untuk Cloud Run, gunakan akses VPC serverless.
Untuk Cloud Build, gunakan pool pribadi.
Sebelum memulai
- Pastikan Anda memiliki Google Cloud organisasi dan setidaknya satu Google Cloud project.
- 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.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
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 izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
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 izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
- Update komponen Google Cloud CLI:
gcloud components update --quiet
- 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:
- Cloud Access Binding Admin (
roles/accesscontextmanager.gcpAccessAdmin) - Admin Access Context Manager (
roles/accesscontextmanager.policyAdmin)
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:
- 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.
- Ikat kebijakan akses dalam mode penerapan hanya ke akun layanan tertentu.
- 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
trueuntuk mengizinkan akses danfalseuntuk menolak akses.Ekspresi CEL berikut berguna untuk membatasi akses berdasarkan akun layanan.
Ekspresi akan dievaluasi menjadi
truejika permintaan berasal dari satu atau beberapa nomor project yang ditentukan:expression: "originatesFromProjects(origin, [PROJECT_NUMBER, ...])"originatesFromProjectsmemeriksa 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.
Ikuti petunjuk untuk Membuat tingkat akses dasar atau Membuat tingkat akses kustom.
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 AndaSERVICE_ACCOUNT_NAME: nama, bukan email, akun layanan targetSERVICE_ACCOUNT_PROJECT_ID: ID project yang berisi akun layanan targetPOLICY_ID: ID kebijakan aksesACCESS_LEVEL_NAME: nama tingkat akses yang Anda buatUntuk 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:
Buat file
request.jsondengan 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 targetSERVICE_ACCOUNT_PROJECT_ID: ID project yang berisi akun layanan targetPOLICY_ID: ID kebijakan aksesACCESS_LEVEL_NAME: nama tingkat akses yang Anda buat
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 APIORGANIZATION_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 AndaPROJECT_NUMBER: nomor project dari project yang berisi semua akun layanan yang aksesnya ingin Anda ikatkanPOLICY_ID: ID kebijakan aksesACCESS_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:
Buat file
request.jsondengan 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 ikatkanPOLICY_ID: ID kebijakan aksesACCESS_LEVEL_NAME: nama tingkat akses yang Anda buat.
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 APIORGANIZATION_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 targetPOLICY_ID: ID kebijakan aksesACCESS_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:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.
Di konsol Google Cloud , pilih project atau organisasi Anda.
Di kolom Log query, masukkan kueri berikut:
protoPayload.serviceName="contextawareaccess.googleapis.com" protoPayload.metadata.dryRunEvaluationResult:DENIED SEARCH("`SERVICE_ACCOUNT_NAME`")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 organisasiSERVICE_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
Tinjau Cloud Audit Logs.
Gunakan kueri log berikut dan tinjau entri log untuk mengetahui informasi selengkapnya.
protoPayload.serviceName="contextawareaccess.googleapis.com"
Tinjau nama resource tingkat akses yang dilaporkan Akses Kontekstual saat mencatat peristiwa penerapan.
Pastikan tingkat akses adalah resource tingkat organisasi.
Pastikan tingkat akses dalam kebijakan akses Anda didasarkan pada atribut yang didukung untuk akun layanan.
Pastikan kebijakan akses terikat ke akun layanan yang dimaksud.
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.
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
- Pelajari cara mengelola binding akses.