Tutorial ini menunjukkan kepada administrator keamanan platform cara melihat dan mengelola pelanggaran kebijakan untuk resource Kubernetes, serta temuan kerentanan dan keamanan lainnya di Security Command Center. Dalam tutorial ini, Anda dapat menggunakan Pengontrol Kebijakan atau Pemilah Komunikasi Agen Kebijakan Terbuka (OPA).
Arsitektur
Pengontrol Kebijakan memeriksa, mengaudit, dan menerapkan kepatuhan resource cluster Kubernetes Anda terhadap kebijakan yang terkait dengan keamanan, peraturan, atau aturan bisnis. Pengontrol Kebijakan dibuat dari project open source Pemilah Komunikasi OPA.
Fungsi audit
di Pengontrol Kebijakan dan Pemilah Komunikasi OPA memungkinkan Anda menerapkan kontrol detektif
yang secara berkala mengevaluasi resource berdasarkan kebijakan. Jika masalah terdeteksi,
kontrol akan membuat pelanggaran untuk resource yang tidak sesuai dengan kebijakan.
Pelanggaran ini disimpan dalam cluster, dan Anda dapat membuat kuerinya menggunakan
alat Kubernetes seperti kubectl
.
Untuk membuat pelanggaran ini terlihat dan membantu Anda mengambil tindakan, Anda dapat menggunakan Security Command Center. Security Command Center menyediakan dasbor dan API untuk menampilkan, memahami, serta memperbaiki risiko keamanan dan data di seluruh organisasi untuk resource Google Cloud, resource Kubernetes, dan resource hybrid atau multi-cloud.
Security Command Center menampilkan kemungkinan risiko keamanan dan pelanggaran kebijakan, yang disebut temuan. Temuan berasal dari sumber, yang merupakan mekanisme yang dapat mendeteksi dan melaporkan risiko dan pelanggaran. Security Command Center mencakup layanan bawaan, dan Anda dapat menambahkan sumber pihak ketiga dan sumber Anda sendiri.
Tutorial dan kode sumber terkait ini menunjukkan cara membuat sumber dan temuan di Security Command Center untuk pelanggaran kebijakan Pengontrol Kebijakan dan Pemilah Komunikasi OPA.
Diagram berikut menunjukkan arsitektur yang diimplementasikan dalam tutorial ini:
Seperti yang ditunjukkan diagram sebelumnya, dalam tutorial ini, Anda akan membuat sumber di Security Command Center menggunakan alat command line. Anda men-deploy pengontrol ke cluster Google Kubernetes Engine (GKE) untuk menyinkronkan Pengontrol Kebijakan dan Pemilah Komunikasi OPA membatasi pelanggaran ke temuan di Security Command Center.
Jika Anda ingin melihat cara menyinkronkan pelanggaran kebijakan untuk resource Google Cloud, lihat tutorial kami tentang cara membuat resource Google Cloud yang mematuhi kebijakan menggunakan Config Connector dan Pengontrol Kebijakan.
Tujuan
- Buat kebijakan dan resource yang melanggar kebijakan.
- Buat sumber di Security Command Center.
- Buat temuan di Security Command Center dari pelanggaran kebijakan Pemilah komunikasi OPA menggunakan alat command line.
- Deploy pengontrol ke cluster GKE untuk menyinkronkan temuan secara berkala di Security Command Center dari pelanggaran kebijakan Pemilah Komunikasi OPA.
- Lihat temuan di terminal Anda dan di Konsol Google Cloud.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
- Untuk menyelesaikan tutorial ini, Anda harus memiliki peran editor yang sesuai untuk Security Command Center di level organisasi, seperti Editor Admin Pusat Keamanan. Administrator organisasi Anda dapat memberi Anda peran ini.
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Mempersiapkan lingkungan
Di Cloud Shell, tetapkan project Google Cloud yang ingin Anda gunakan untuk tutorial ini:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan ID project Google Cloud Anda. Saat Anda menjalankan perintah ini, Cloud Shell akan membuat variabel lingkungan yang diekspor bernamaGOOGLE_CLOUD_PROJECT
, yang berisi project ID Anda.Aktifkan Resource Manager, GKE, Security Command Center, dan Service Usage API:
gcloud services enable \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ securitycenter.googleapis.com \ serviceusage.googleapis.com
Membuat cluster GKE
Di Cloud Shell, buat cluster GKE dengan mengaktifkan Workload Identity:
gcloud container clusters create gatekeeper-securitycenter-tutorial \ --enable-ip-alias \ --release-channel regular \ --workload-pool $GOOGLE_CLOUD_PROJECT.svc.id.goog \ --zone us-central1-f
Perintah ini akan membuat cluster di zona
us-central1-f
. Anda dapat menggunakan zona atau region yang berbeda.Beri diri Anda sendiri peran cluster
cluster-admin
:kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole cluster-admin \ --user $(gcloud config get-value core/account)
Anda memerlukan peran ini nanti untuk membuat beberapa resource Kubernetes yang digunakan oleh pengontrol. Anda juga akan membutuhkannya jika menginstal distribusi Pemilah Komunikasi OPA open source.
Menginstal alat kebijakan
Jika Anda memiliki cluster GKE terkelola, ikuti petunjuk untuk menginstal Pengontrol Kebijakan. Jika tidak, instal distribusi Gatekeeper OPA.
Pengontrol Kebijakan
Instal Pengontrol Kebijakan dengan mengikuti petunjuk penginstalan.
Gunakan interval audit 60
detik.
Pemilah Komunikasi OPA
Di Cloud Shell, tentukan versi Pemilah komunikasi OPA yang ingin Anda instal:
GATEKEEPER_VERSION=v3.10.0
Instal Pemilah Komunikasi OPA:
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/$GATEKEEPER_VERSION/deploy/gatekeeper.yaml
Pastikan Pemilah komunikasi OPA telah diinstal:
kubectl rollout status deploy gatekeeper-controller-manager \ -n gatekeeper-system
Setelah penginstalan selesai, output akan menampilkan
deployment "gatekeeper-controller-manager" successfully rolled out
.
Membuat kebijakan
Kebijakan di Pengontrol Kebijakan dan Pemilah Komunikasi OPA terdiri dari template batasan dan batasan. Template batasan berisi logika kebijakan. Batasan menentukan tempat kebijakan diterapkan dan menentukan parameter input untuk logika kebijakan.
Di bagian ini, Anda akan membuat kebijakan untuk Pod Kubernetes dan Pod yang melanggar kebijakan.
Di Cloud Shell, clone repositori library Pemilah Komunikasi OPA, buka direktori repositori, dan lihat commit yang diketahui:
git clone https://github.com/open-policy-agent/gatekeeper-library.git \ ~/gatekeeper-library cd ~/gatekeeper-library git checkout 1da0facae99658accb73c291cb79f497fcddf641
Buat Pod bernama
nginx-disallowed
dalam namespacedefault
:kubectl apply -f library/general/allowedrepos/samples/repo-must-be-openpolicyagent/example_disallowed.yaml
Berikut adalah manifes yang Anda terapkan untuk membuat Pod:
Pod ini menggunakan image container dari repositori yang tidak disetujui oleh kebijakan.
Buat template batasan yang disebut
k8sallowedrepos
:kubectl apply -f library/general/allowedrepos/template.yaml
Berikut adalah manifes template batasan:
Buat batasan yang disebut
repo-is-openpolicyagent
:kubectl apply -f library/general/allowedrepos/samples/repo-must-be-openpolicyagent/constraint.yaml
Berikut ini adalah manifes batasan:
Batasan pengauditan
Pengontrol audit di Pengontrol Kebijakan dan Pemilah komunikasi OPA secara berkala mengevaluasi resource terhadap berbagai batasan. Audit ini memungkinkan Anda mendeteksi resource yang melanggar kebijakan yang dibuat sebelum membuat batasan.
Di Cloud Shell, lihat pelanggaran untuk semua batasan dengan membuat kueri menggunakan kategori
constraint
:kubectl get constraint -o json | jq '.items[].status.violations'
Outputnya adalah sebagai berikut:
[ { "enforcementAction": "deny", "kind": "Pod", "message": "container <nginx> has an invalid image repo <nginx>, allowed repos are [\"openpolicyagent\"]", "name": "nginx-disallowed", "namespace": "default" } ]
Terdapat pelanggaran untuk Pod yang Anda buat sebelum membuat batasan. Jika Anda melihat
null
, bukan output sebelumnya, berarti audit Pengontrol Kebijakan atau Pemilah Komunikasi OPA belum berjalan sejak Anda membuat batasan. Secara default, audit dilakukan setiap menit. Tunggu sebentar dan coba lagi.
Membuat sumber Security Command Center
Security Command Center mencatat temuan terhadap sumber. Ikuti langkah-langkah berikut untuk membuat sumber temuan dari Pengontrol Kebijakan dan Pemilah Komunikasi OPA:
Di Cloud Shell, buat akun layanan Google dan simpan nama akun layanan tersebut dalam variabel lingkungan:
SOURCES_ADMIN_SA=$(gcloud iam service-accounts create \ securitycenter-sources-admin \ --display-name "Security Command Center sources admin" \ --format 'value(email)')
Anda menggunakan akun layanan Google ini untuk mengelola sumber Security Command Center.
Tentukan variabel lingkungan yang berisi ID organisasi Google Cloud Anda:
ORGANIZATION_ID=$(gcloud projects get-ancestors $GOOGLE_CLOUD_PROJECT \ --format json | jq -r '.[] | select (.type=="organization") | .id')
Berikan peran Admin Sumber Pusat Keamanan ke akun layanan Google admin sumber di tingkat organisasi:
gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \ --member "serviceAccount:$SOURCES_ADMIN_SA" \ --role roles/securitycenter.sourcesAdmin
Peran ini memberikan izin
securitycenter.sources.*
yang diperlukan untuk mengelola sumber.Berikan peran Konsumen Penggunaan Layanan ke akun layanan Google admin sumber di tingkat organisasi:
gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \ --member "serviceAccount:$SOURCES_ADMIN_SA" \ --role roles/serviceusage.serviceUsageConsumer
Peran ini memberikan izin
serviceusage.services.use
untuk menggunakan project dalam organisasi untuk tujuan kuota dan penagihan.Beri diri Anda peran Service Account Token Creator untuk akun layanan Google admin sumber:
gcloud iam service-accounts add-iam-policy-binding \ $SOURCES_ADMIN_SA \ --member "user:$(gcloud config get-value account)" \ --role roles/iam.serviceAccountTokenCreator
Peran ini memungkinkan identitas pengguna Anda meniru identitas, atau bertindak sebagai akun layanan Google.
Download versi terbaru alat command line
gatekeeper-securitycenter
untuk platform Anda dan setel agar dapat dijalankan:VERSION=v0.4.0 curl -Lo gatekeeper-securitycenter "https://github.com/GoogleCloudPlatform/gatekeeper-securitycenter/releases/download/${VERSION}/gatekeeper-securitycenter_$(uname -s)_$(uname -m)" chmod +x gatekeeper-securitycenter
Gunakan alat
gatekeeper-securitycenter
untuk membuat sumber Security Command Center untuk organisasi Anda. Ambil nama sumber lengkap dalam variabel lingkungan.export SOURCE_NAME=$(./gatekeeper-securitycenter sources create \ --organization $ORGANIZATION_ID \ --display-name "Gatekeeper" \ --description "Reports violations from Policy Controller audits" \ --impersonate-service-account $SOURCES_ADMIN_SA | jq -r '.name')
Perintah ini akan membuat sumber dengan nama tampilan
Gatekeeper
. Nama tampilan ini dapat dilihat di Security Command Center. Anda dapat menggunakan nama tampilan dan deskripsi yang berbeda.Jika Anda menerima respons dengan pesan error,
The caller does not have permission
, tunggu sebentar, lalu coba lagi. Error ini dapat terjadi jika binding Identity and Access Management (IAM) belum diterapkan.
Membuat temuan menggunakan command line
Anda dapat membuat temuan Security Command Center dari pelanggaran batasan Pengontrol Kebijakan
dan Pemilah Komunikasi OPA menggunakan alat gatekeeper-securitycenter
sebagai bagian dari
pipeline build atau tugas terjadwal.
Di Cloud Shell, buat akun layanan Google dan simpan nama akun layanan tersebut dalam variabel lingkungan:
FINDINGS_EDITOR_SA=$(gcloud iam service-accounts create \ gatekeeper-securitycenter \ --display-name "Security Command Center Gatekeeper findings editor" \ --format 'value(email)')
Anda menggunakan akun layanan Google ini untuk membuat temuan bagi sumber Security Command Center.
Berikan peran Security Center Findings Editor ke akun layanan Google untuk sumber:
./gatekeeper-securitycenter sources add-iam-policy-binding \ --source $SOURCE_NAME \ --member "serviceAccount:$FINDINGS_EDITOR_SA" \ --role roles/securitycenter.findingsEditor \ --impersonate-service-account $SOURCES_ADMIN_SA
Peran ini memberikan izin
securitycenter.findings.*
yang diperlukan untuk membuat dan mengedit temuan. Saat menjalankan perintah ini, Anda akan meniru identitas akun layanan Google admin sumber.Berikan peran Konsumen Penggunaan Layanan ke akun layanan Google editor temuan di tingkat organisasi:
gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \ --member "serviceAccount:$FINDINGS_EDITOR_SA" \ --role roles/serviceusage.serviceUsageConsumer
Berikan identitas kepada pengguna peran Service Account Token Creator untuk akun layanan Google editor temuan:
gcloud iam service-accounts add-iam-policy-binding \ $FINDINGS_EDITOR_SA \ --member "user:$(gcloud config get-value account)" \ --role roles/iam.serviceAccountTokenCreator
Cetak temuan ke terminal, bukan membuatnya di Security Command Center:
./gatekeeper-securitycenter findings sync --dry-run=true
Perintah ini menggunakan konteks kubeconfig Anda saat ini secara default. Jika ingin menggunakan file kubeconfig lain, gunakan flag
--kubeconfig
.Outputnya terlihat mirip dengan yang berikut ini:
[ { "finding_id": "0be44bcf181ef03162eed40126a500a0", "finding": { "resource_name": "https://API_SERVER/api/v1/namespaces/default/pods/nginx-disallowed", "state": 1, "category": "K8sAllowedRepos", "external_uri": "https://API_SERVER/apis/constraints.gatekeeper.sh/v1beta1/k8sallowedrepos/repo-is-openpolicyagent", "source_properties": { "Cluster": "", "ConstraintName": "repo-is-openpolicyagent", "ConstraintSelfLink": "https://API_SERVER/apis/constraints.gatekeeper.sh/v1beta1/k8sallowedrepos/repo-is-openpolicyagent", "ConstraintTemplateSelfLink": "https://API_SERVER/apis/templates.gatekeeper.sh/v1beta1/constrainttemplates/k8sallowedrepos", "ConstraintTemplateUID": "e35b1c39-15f7-4a7a-afae-1637b44e81b2", "ConstraintUID": "b904dddb-0a23-4f4f-81bb-0103de838d3e", "Explanation": "container \u003cnginx\u003e has an invalid image repo \u003cnginx\u003e, allowed repos are [\"openpolicyagent\"]", "ProjectId": "", "ResourceAPIGroup": "", "ResourceAPIVersion": "v1", "ResourceKind": "Pod", "ResourceName": "nginx-disallowed", "ResourceNamespace": "default", "ResourceSelfLink": "https://API_SERVER/api/v1/namespaces/default/pods/nginx-disallowed", "ResourceStatusSelfLink": "", "ResourceUID": "8ddd752f-e620-43ea-b966-4ae2ae507c67", "ScannerName": "GATEKEEPER" }, "event_time": { "seconds": 1606287680 } } } ]
Dalam output sebelumnya,
API_SERVER
adalah alamat IP atau nama host server API cluster GKE Anda.Untuk mempelajari arti kolom, lihat halaman Menemukan resource API Security Command Center.
Buat temuan di Security Command Center.
./gatekeeper-securitycenter findings sync \ --source $SOURCE_NAME \ --impersonate-service-account $FINDINGS_EDITOR_SA
Saat menjalankan perintah ini, Anda akan meniru identitas akun layanan Google editor temuan.
Output-nya mencakup
create finding
, yang berarti alat command linegatekeeper-securitycenter
membuat temuan. AtributfindingID
dari output tersebut berisi nama lengkap temuan dalam format:organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID
Dalam output ini:
ORGANIZATION_ID
adalah ID organisasi Google Cloud AndaSOURCE_ID
adalah ID sumber Security Command Center AndaFINDING_ID
adalah ID temuan
Untuk melihat temuan, lihat bagian Melihat temuan.
Jika Anda menerima respons dengan pesan error,
The caller does not have permission
, tunggu sebentar, lalu coba lagi. Error ini dapat terjadi jika binding Identity and Access Management (IAM) belum diterapkan.
Membuat temuan menggunakan pengontrol Kubernetes
Anda dapat men-deploy gatekeeper-securitycenter
sebagai
pengontrol
di cluster GKE. Pengontrol ini secara berkala memeriksa
pelanggaran batasan dan membuat temuan di Security Command Center untuk setiap
pelanggaran.
Jika resource sesuai, pengontrol akan menetapkan status temuan
yang ada ke
INACTIVE
.
Di Cloud Shell, buat binding kebijakan IAM Workload Identity agar
gatekeeper-securitycenter-controller
akun layanan Kubernetes digatekeeper-securitycenter
namespace dapat meniru identitasnya editor temuan akun layanan Google:gcloud iam service-accounts add-iam-policy-binding \ $FINDINGS_EDITOR_SA \ --member "serviceAccount:$GOOGLE_CLOUD_PROJECT.svc.id.goog[gatekeeper-securitycenter/gatekeeper-securitycenter-controller]" \ --role roles/iam.workloadIdentityUser
Anda membuat akun layanan dan namespace Kubernetes saat men-deploy pengontrol.
Ambil paket kpt untuk pengontrol
gatekeeper-securitycenter
:VERSION=v0.4.0 kpt pkg get https://github.com/GoogleCloudPlatform/gatekeeper-securitycenter.git/manifests@$VERSION manifests
Perintah ini membuat direktori bernama
manifests
yang berisi file manifes resource untuk pengontrol.kpt adalah alat command line yang dapat digunakan untuk mengelola, memanipulasi, menyesuaikan, dan menerapkan resource Kubernetes. Dalam tutorial ini, Anda akan menggunakan kpt untuk menyesuaikan manifes resource untuk lingkungan Anda.
Setel nama sumber Security Command Center:
kpt fn eval manifests \ --image gcr.io/kpt-fn/apply-setters:v0.2 -- \ "source=$SOURCE_NAME"
Tetapkan nama cluster:
kpt fn eval manifests \ --image gcr.io/kpt-fn/apply-setters:v0.2 -- \ "cluster=$(kubectl config current-context)"
Pengontrol menambahkan nama cluster sebagai properti sumber ke temuan yang dibuatnya di Security Command Center. Jika Anda memiliki beberapa cluster, nama ini akan membantu Anda menemukan cluster mana yang berisi temuan.
Untuk mengikat akun layanan Kubernetes pengontrol ke akun layanan Google editor temuan, tambahkan anotasi Workload Identity:
kpt fn eval manifests \ --image gcr.io/kpt-fn/set-annotations:v0.1.4 \ --match-kind ServiceAccount \ --match-name gatekeeper-securitycenter-controller \ --match-namespace gatekeeper-securitycenter -- \ "iam.gke.io/gcp-service-account=$FINDINGS_EDITOR_SA"
Lakukan inisialisasi paket pengontrol:
kpt live init manifests
Terapkan resource pengontrol ke cluster Anda:
kpt live apply manifests --reconcile-timeout 3m --output table
Perintah ini akan membuat resource berikut di cluster Anda:
- Namespace bernama
gatekeeper-securitycenter
. - Akun layanan bernama
gatekeeper-securitycenter-controller
. - Peran cluster yang memberikan
akses
get
danlist
ke semua resource di semua grup API. Peran ini diperlukan karena pengontrol mengambil resource yang menyebabkan pelanggaran kebijakan. - Binding peran cluster yang memberikan peran cluster ke akun layanan.
- Deployment yang disebut
gatekeeper-securitycenter-controller-manager
. - Peta konfigurasi bernama
gatekeeper-securitycenter-config
yang berisi nilai konfigurasi untuk deployment.
Perintah ini juga menunggu hingga resource siap.
- Namespace bernama
Pastikan pengontrol dapat membaca pelanggaran batasan dan berkomunikasi dengan API Security Command Center dengan mengikuti log pengontrol:
kubectl logs deployment/gatekeeper-securitycenter-controller-manager \ --namespace gatekeeper-securitycenter --follow --all-containers
Anda melihat entri log dengan pesan
syncing findings
.Untuk berhenti mengikuti log, tekan
Ctrl+C
.Untuk memverifikasi bahwa pengontrol dapat membuat temuan baru, buat kebijakan dan resource yang melanggar kebijakan. Pod ini menggunakan ringkasan image untuk merujuk ke image container.
Buka direktori repositori library Pemilah Komunikasi OPA:
cd ~/gatekeeper-library
Buat Pod bernama
opa-disallowed
dalam namespacedefault
:kubectl apply --namespace default -f \ library/general/imagedigests/samples/container-image-must-have-digest/example_disallowed.yaml
Berikut adalah manifes yang Anda terapkan untuk membuat Pod:
Spesifikasi Pod ini merujuk pada image container dengan tag, bukan menurut ringkasan.
Buat template batasan yang disebut
k8simagedigests
:kubectl apply -f library/general/imagedigests/template.yaml
Berikut adalah manifes template batasan:
Buat batasan yang disebut
container-image-must-have-digest
:kubectl apply -f library/general/imagedigests/samples/container-image-must-have-digest/constraint.yaml
Berikut ini adalah manifes batasan:
Batasan ini hanya berlaku untuk namespace
default
.Ikuti log pengontrol:
kubectl logs deployment/gatekeeper-securitycenter-controller-manager \ --namespace gatekeeper-securitycenter --follow --all-containers
Setelah beberapa menit, Anda akan melihat entri log yang berisi pesan
create finding
. Pesan ini berarti bahwa pengontrolgatekeeper-securitycenter
membuat temuan.Untuk berhenti mengikuti log, tekan
Ctrl+C
.Untuk memverifikasi bahwa pengontrol dapat menyetel status temuan ke
INACTIVE
saat pelanggaran tidak lagi dilaporkan oleh Pengontrol Kebijakan atau Pemilah Komunikasi OPA, hapus Pod bernamaopa-disallowed
di namespacedefault
:kubectl delete pod opa-disallowed --namespace default
Ikuti log pengontrol:
kubectl logs deployment/gatekeeper-securitycenter-controller-manager \ --namespace gatekeeper-securitycenter --follow --all-containers
Setelah beberapa menit, Anda akan melihat entri log dengan pesan
updating finding state
dan atribut"state":"INACTIVE"
. Pesan ini berarti pengontrol menyetel status temuan ke tidak aktif.Untuk berhenti mengikuti log, tekan
Ctrl+C
.
Melihat temuan
Anda dapat melihat temuan Security Command Center di terminal dan di Konsol Google Cloud.
Di Cloud Shell, gunakan gcloud CLI untuk mencantumkan temuan untuk organisasi dan sumber Anda:
gcloud scc findings list $ORGANIZATION_ID \ --source $(basename $SOURCE_NAME) \ --format json
Anda menggunakan perintah
basename
untuk mendapatkan ID sumber numerik dari nama sumber lengkap.Outputnya terlihat mirip dengan yang berikut ini:
[ { "finding": { "category": "K8sAllowedRepos", "createTime": "2020-11-25T06:58:47.213Z", "eventTime": "2020-11-25T06:58:20Z", "externalUri": "https://API_SERVER/apis/constraints.gatekeeper.sh/v1beta1/k8sallowedrepos/repo-is-openpolicyagent", "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID", "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID", "resourceName": "https://API_SERVER/api/v1/namespaces/default/pods/nginx-disallowed", "securityMarks": { "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks" }, "sourceProperties": { "Cluster": "cluster-name", "ConstraintName": "repo-is-openpolicyagent", "ConstraintSelfLink": "https://API_SERVER/apis/constraints.gatekeeper.sh/v1beta1/k8sallowedrepos/repo-is-openpolicyagent", "ConstraintTemplateSelfLink": "https://API_SERVER/apis/templates.gatekeeper.sh/v1beta1/constrainttemplates/k8sallowedrepos", "ConstraintTemplateUID": "e35b1c39-15f7-4a7a-afae-1637b44e81b2", "ConstraintUID": "b904dddb-0a23-4f4f-81bb-0103de838d3e", "Explanation": "container <nginx> has an invalid image repo <nginx>, allowed repos are [\"openpolicyagent\"]", "ProjectId": "", "ResourceAPIGroup": "", "ResourceAPIVersion": "v1", "ResourceKind": "Pod", "ResourceName": "nginx-disallowed", "ResourceNamespace": "default", "ResourceSelfLink": "https://API_SERVER/api/v1/namespaces/default/pods/nginx-disallowed", "ResourceStatusSelfLink": "", "ResourceUID": "8ddd752f-e620-43ea-b966-4ae2ae507c67", "ScannerName": "GATEKEEPER" }, "state": "ACTIVE" }, "resource": { "name": "https://API_SERVER/api/v1/namespaces/default/pods/nginx-disallowed" } }, { "finding": { "category": "K8sImageDigests", [...] } ]
Dalam output ini:
API_SERVER
adalah alamat IP atau nama host server API cluster GKE AndaORGANIZATION_ID
adalah ID organisasi Google Cloud AndaSOURCE_ID
adalah ID sumber Security Command Center AndaFINDING_ID
adalah ID temuan
Untuk mempelajari arti atribut temuan, lihat Resource temuan di API Security Command Center.
Untuk melihat temuan di Google Cloud Console, buka tab Temuan di Security Command Center.
Pilih organisasi Anda, lalu klik Pilih.
Klik Lihat menurut Jenis sumber.
Dalam daftar Jenis sumber, klik Pemilah Komunikasi. Jika Pemilah Komunikasi tidak ada dalam daftar Jenis sumber, hapus semua filter dalam daftar temuan.
Dalam daftar temuan, klik temuan untuk melihat atribut temuan dan properti sumber.
Jika resource tidak lagi menyebabkan pelanggaran karena perubahan pada resource atau kebijakan, pengontrol akan menetapkan status temuan ke tidak aktif. Diperlukan waktu beberapa menit agar perubahan ini terlihat di Security Command Center.
Secara default, Security Command Center menampilkan temuan aktif. Untuk melihat temuan tidak aktif, klik Opsi lainnya, pilih Sertakan temuan tidak aktif, lalu klik Oke.
Pemecahan masalah
Jika Pengontrol Kebijakan atau Pemilah Komunikasi OPA tidak melaporkan pelanggaran di kolom
status
pada objek batasan, gunakan Cloud Shell untuk melihat log pengontrol audit:kubectl logs deployment/gatekeeper-audit --namespace gatekeeper-system \ --all-containers
Jika pengontrol
gatekeeper-securitycenter
tidak membuat temuan di Security Command Center, Anda dapat melihat log pengelola pengontrol:kubectl logs deployment/gatekeeper-securitycenter-controller-manager \ --namespace gatekeeper-securitycenter --all-containers
Jika alat command line
gatekeeper-securitycenter
melaporkan error, Anda dapat menambah banyaknya pembacaan output log dengan menetapkan variabel lingkunganDEBUG
ketrue
sebelum menjalankan perintahgatekeeper-securitycenter
:export DEBUG=true
Saat menggunakan alat command line
gatekeeper-securitycenter
untuk membuat sumber di Security Command Center, Anda mungkin mendapatkan pesan error yang diakhiri dengan teks berikut:oauth2: cannot fetch token: 400 Bad Request Response: { "error": "invalid_grant", "error_description": "Bad Request" }
Dalam hal ini, dapatkan kredensial baru untuk digunakan dengan Kredensial Default Aplikasi:
gcloud auth application-default login
Gunakan kredensial baru untuk mencoba membuat sumber lagi.
Jika Anda mengalami masalah lain dengan tutorial ini, sebaiknya tinjau dokumen berikut:
Mengotomatiskan penyiapan
Untuk deployment selanjutnya, Anda dapat mengotomatiskan langkah-langkah dalam tutorial ini dengan
mengikuti petunjuk di
repositori GitHub gatekeeper-securitycenter
.
Pembersihan
Agar tidak menimbulkan biaya lebih lanjut pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus resource individual.
Menghapus resource individual
Di Cloud Shell, hapus cluster GKE:
gcloud container clusters delete gatekeeper-securitycenter-tutorial \ --zone us-central1-f --async --quiet
Hapus file
gatekeeper-library
:rm -rf ~/gatekeeper-library
Hapus binding kebijakan IAM:
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project) ORGANIZATION_ID=$(gcloud projects get-ancestors $GOOGLE_CLOUD_PROJECT \ --format json | jq -r '.[] | select (.type=="organization") | .id') SOURCE_NAME=$(./gatekeeper-securitycenter sources list \ --organization "$ORGANIZATION_ID" \ --impersonate-service-account "securitycenter-sources-admin@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com" \ | jq -r ".[] | select (.display_name==\"Gatekeeper\") | .name") ./gatekeeper-securitycenter sources remove-iam-policy-binding \ --source $SOURCE_NAME \ --member "serviceAccount:gatekeeper-securitycenter@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com" \ --role roles/securitycenter.findingsEditor \ --impersonate-service-account securitycenter-sources-admin@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com gcloud iam service-accounts remove-iam-policy-binding \ gatekeeper-securitycenter@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --member "serviceAccount:$GOOGLE_CLOUD_PROJECT.svc.id.goog[gatekeeper-securitycenter/gatekeeper-securitycenter-controller]" \ --role roles/iam.workloadIdentityUser gcloud iam service-accounts remove-iam-policy-binding \ gatekeeper-securitycenter@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --member "user:$(gcloud config get-value account)" \ --role roles/iam.serviceAccountTokenCreator gcloud organizations remove-iam-policy-binding $ORGANIZATION_ID \ --member "serviceAccount:gatekeeper-securitycenter@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com" \ --role roles/serviceusage.serviceUsageConsumer gcloud iam service-accounts remove-iam-policy-binding \ securitycenter-sources-admin@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --member "user:$(gcloud config get-value account)" \ --role roles/iam.serviceAccountTokenCreator gcloud organizations remove-iam-policy-binding $ORGANIZATION_ID \ --member "serviceAccount:securitycenter-sources-admin@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com" \ --role roles/serviceusage.serviceUsageConsumer gcloud organizations remove-iam-policy-binding $ORGANIZATION_ID \ --member "serviceAccount:securitycenter-sources-admin@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com" \ --role roles/securitycenter.sourcesAdmin
Hapus akun layanan Google:
gcloud iam service-accounts delete --quiet \ gatekeeper-securitycenter@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com gcloud iam service-accounts delete --quiet \ securitycenter-sources-admin@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com
Langkah selanjutnya
- Pelajari cara membuat resource Google Cloud yang mematuhi kebijakan menggunakan Config Connector dan Pengontrol Kebijakan atau Pemilah Komunikasi OPA.
- Cari tahu cara menjalankan validasi Pengontrol Kebijakan sebagai bagian dari pipeline continuous integration di Cloud Build.
- Pelajari cara menyiapkan notifikasi untuk temuan Security Command Center.
- Pelajari lebih lanjut cara mengakses Security Command Center menggunakan SDK.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.