Panduan ini menjelaskan cara menyiapkan Akses Kontekstual untuk membantu mengamankan akses akun layanan ke API Google Cloud , berdasarkan tingkat akses yang Anda tentukan.
Batasan
Batasan berikut berlaku untuk kebijakan Akses Kontekstual untuk akun layanan:
Anda tidak dapat menggunakan atribut berbasis jaringan atau berbasis alamat IP untuk binding akun layanan jika akun layanan tersebut digunakan untuk eksekusi alur kerja dan Cloud Scheduler.
Kebijakan Akses Kontekstual tidak dapat memblokir koneksi ke cluster Google Kubernetes Engine (GKE) pribadi menggunakan
kubectl, atau ke Cloud SQL menggunakan Proxy Auth.Jika tingkat akses yang Anda ikat ke akun layanan berisi atribut yang tidak didukung, seperti atribut
Device, Akses Kontekstual akan menolak akses API.Tingkat akses tercakup tidak didukung untuk akun layanan.
Jika Anda menggunakan Cloud Build dan Cloud Run, sebaiknya gunakan fitur Virtual Private Cloud (VPC) bawaan berikut:
Untuk Cloud Run, gunakan Akses VPC Serverless.
Untuk Cloud Build, gunakan pool pribadi.
Sebelum memulai
- Pastikan Anda memiliki organisasiGoogle Cloud dan setidaknya satu projectGoogle Cloud .
- 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 project Google Cloud .
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project apa pun yang perannya telah diberikan kepada Anda.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat project Google Cloud :
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.
-
Pastikan penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan IAM, Access Context Manager, dan Resource Manager API, jika belum diaktifkan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.gcloud services enable accesscontextmanager.googleapis.com
cloudresourcemanager.googleapis.com iam.googleapis.com -
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 project Google Cloud .
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project apa pun yang perannya telah diberikan kepada Anda.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat project Google Cloud :
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.
-
Pastikan penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan IAM, Access Context Manager, dan Resource Manager API, jika belum diaktifkan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.gcloud services enable accesscontextmanager.googleapis.com
cloudresourcemanager.googleapis.com iam.googleapis.com - 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 Kontekstual.
Peran yang diperlukan
Bagian ini menjelaskan peran Identity and Access Management (IAM) yang diperlukan untuk menggunakan Akses Kontekstual.
Peran level project
Untuk mendapatkan izin yang
Anda perlukan di level 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 Anda perlukan di level organisasi, minta administrator untuk memberi Anda peran IAM berikut di akun pengguna atau akun layanan:
- Cloud Access Binding Admin (
roles/accesscontextmanager.gcpAccessAdmin) - Access Context Manager Admin (
roles/accesscontextmanager.policyAdmin)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran yang telah ditetapkan ini berisi izin the required permissions, yang diperlukan di level organisasi.
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Mengikat kebijakan Akses Kontekstual ke berbagai level resource
Anda dapat mengikat kebijakan Akses Kontekstual dengan mode penerapan yang sama ke resource yang berada di berbagai tingkat hierarki resource. 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 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 yang terikat, Akses Kontekstual akan mengevaluasi kebijakan mode penerapan yang terikat ke project. Hal yang sama berlaku jika mode penerapan ditetapkan ke uji coba untuk kebijakan level project dan kebijakan level akun layanan.
Anda dapat menggunakan beberapa kebijakan untuk men-deploy kebijakan secara bertahap dan selektif—misalnya, Anda dapat melakukan hal berikut:
- Ikat kebijakan dalam mode uji coba di level project dan pastikan kebijakan tersebut berfungsi seperti yang Anda harapkan dengan memeriksa peristiwa akses ditolak di Cloud Audit Logs.
- Ikat kebijakan dalam mode penerapan hanya ke akun layanan tertentu.
- Ikat kebijakan dalam mode penerapan di level project, dan ikat kebijakan mode penerapan yang tidak terlalu ketat ke akun layanan tertentu sesuai kebutuhan.
Atribut tingkat akses untuk akun layanan
Bagian ini mencantumkan atribut tingkat akses yang didukung untuk akun layanan.
Atribut berikut didukung untuk akun layanan:
- Subnetwork 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 apa pun ke API Google Cloud, Akses Kontekstual akan mengevaluasi permintaan tersebut dan membandingkan alamat IP permintaan dengan alamat IP yang ditentukan dalam kebijakan Akses Kontekstual. Jika alamat IP cocok, Akses Kontekstual akan mengizinkan panggilan API. Jika alamat IP tidak cocok, Akses Kontekstual akan menolak panggilan API.
-
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 oleh akun layanan.
Ekspresi akan bernilai
truejika permintaan berasal dari satu atau beberapa nomor project yang ditentukan:expression: "originatesFromProjects(origin, ['projects/PROJECT_NUMBER'])"originatesFromProjectsmemeriksa apakah permintaan berasal dari jaringan yang terkait dengan project yang ditentukan dan apakah permintaan berasal dari alamat IP pribadi. -
Waktu, yang didasarkan pada waktu dan tanggal permintaan di 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 mengizinkan akses.
Ikuti petunjuk untuk Membuat tingkat akses dasar atau Membuat tingkat akses kustom.
Catat nama lengkap tingkat akses, yang memiliki format:
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
Membuat binding akses
Ikat tingkat akses ke akun layanan yang dipilih. Tindakan ini akan menerapkan kondisi yang ditentukan dalam tingkat akses. Anda dapat mengikat tingkat akses ke satu akun layanan atau semua akun layanan dalam sebuah project.
Mengikat tingkat akses ke akun layanan tertentu
Bagian ini menjelaskan cara mengikat tingkat akses ke akun layanan tertentu.
gcloud
Mengikat 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: ID akun layanan target (bagian alamat email sebelum simbol@).SERVICE_ACCOUNT_PROJECT_ID: ID project yang berisi akun layanan target.POLICY_ID: ID kebijakan akses Access Context Manager.ACCESS_LEVEL_NAME: nama tingkat akses yang Anda buat.Untuk menggunakan Akses Kontekstual tanpa menerapkan tingkat akses dan tidak mengizinkan 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: ID akun layanan target (bagian alamat email sebelum simbol@).SERVICE_ACCOUNT_PROJECT_ID: ID project yang berisi akun layanan target.POLICY_ID: ID kebijakan akses Access Context Manager.ACCESS_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 API.ORGANIZATION_ID: ID organisasi Google Cloud Anda.
Mengikat tingkat akses ke semua akun layanan dalam sebuah project
Bagian ini menjelaskan cara mengikat tingkat akses ke semua akun layanan dalam sebuah 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 ingin Anda ikat aksesnya.POLICY_ID: ID kebijakan akses Access Context Manager.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:
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 ingin Anda ikat aksesnya.POLICY_ID: ID kebijakan akses Access Context Manager.ACCESS_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 API.ORGANIZATION_ID: ID organisasi Google Cloud Anda.
Untuk menggunakan Akses Kontekstual tanpa menerapkan tingkat akses dan menolak akses, Anda dapat mengikat tingkat 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 tingkat akses dalam mode uji coba. Saat Anda menggunakan mode uji coba, akun layanan Anda dapat terus mengakses resource tanpa penerapan. Namun, jika akun layanan Anda mencoba akses yang melanggar tingkat akses, Akses Kontekstual akan mencatat pelanggaran tersebut ke Cloud Audit Logs.
Mengikat tingkat akses dalam mode uji coba
gcloud
Untuk mengikat tingkat 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 tingkat 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 dari project target.POLICY_ID: ID kebijakan akses Access Context Manager.ACCESS_LEVEL_NAME: nama tingkat akses.
Memeriksa Cloud Audit Logs
Bagian ini menjelaskan cara memeriksa Cloud Audit Logs untuk penolakan akses mode uji coba bagi 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, seperti Last 30 minutes, Last 1 hour, atau Last 24 hours, atau tentukan rentang kustom.
gcloud
Untuk melihat penolakan akses akun layanan mode uji coba Cloud Audit Logs 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: ID akun layanan (bagian alamat email sebelum simbol@).
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.