Autopilot Security Hardening
Tại sao Autopilot có security posture mạnh hơn Standard
Trong Standard clusters, security là trách nhiệm của bạn: bạn phải enable Workload Identity, cấu hình PodSecurityStandards, drop Linux capabilities, và đảm bảo container không chạy với root privileges không cần thiết.
Autopilot approach khác: Google enforce một baseline security profile trên mọi workload, bởi vì Google đang quản lý node infrastructure. Nếu một workload compromise node, nó ảnh hưởng đến tất cả workloads khác trên node đó — và Google chịu trách nhiệm về điều này.
Điều này tạo ra một tension thú vị: security mạnh mẽ hơn, nhưng một số workloads hợp lệ (CNI plugins, monitoring agents, storage drivers) có thể bị block.
Pod Security Standards trong Autopilot
Autopilot enforce Pod Security Standards (PSS) ở tầng Baseline với một số restrictions bổ sung từ tầng Restricted:
Các restrictions mặc định
| Restriction | Trạng thái | Ghi chú |
|---|---|---|
hostNetwork: true | ❌ Blocked | Không thể dùng host network namespace |
hostPID: true | ❌ Blocked | Không thể dùng host PID namespace |
hostIPC: true | ❌ Blocked | Không thể dùng host IPC namespace |
privileged: true | ❌ Blocked (trừ allowlist) | Privileged containers bị reject |
allowPrivilegeEscalation: true | ❌ Blocked (mặc định) | Ngăn privilege escalation |
| HostPath volumes | Giới hạn | Chỉ read-only /var/log |
seccompProfile | ✅ RuntimeDefault bắt buộc | Google apply tự động |
Seccomp và AppArmor
Seccomp: Autopilot tự động áp dụng RuntimeDefault seccomp profile cho mọi workload, ngay cả khi bạn không khai báo:
# Bạn không cần khai báo điều này — Autopilot tự apply
securityContext:
seccompProfile:
type: RuntimeDefaultRuntimeDefault profile block các syscalls nguy hiểm như ptrace, keyctl, add_key trong khi cho phép các syscalls bình thường mà container apps cần.
AppArmor: Container-Optimized OS tự động áp dụng AppArmor profiles cho containers trong Autopilot.
Running as root
Autopilot cho phép container chạy với user root (UID 0), không như Restricted PSS profile. Lý do: phần lớn Docker images được build mặc định với root user, và forcing non-root sẽ break quá nhiều workloads.
Tuy nhiên, Autopilot vẫn giới hạn những gì root có thể làm thông qua Linux capabilities restrictions.
Linux Capabilities
Đây là phần quan trọng nhất trong Autopilot security model.
Capabilities bị drop theo mặc định
Autopilot drop CAP_NET_RAW và CAP_NET_ADMIN khỏi tất cả containers:
CAP_NET_RAW: Cho phép tạo raw IP packets, thực hiện ARP spoofing, IP spoofing. Đây là capability nguy hiểm và ít workloads thực sự cần. Nó được drop để ngăn containers tấn công network của các Pods khác trên cùng node.
CAP_NET_ADMIN: Cho phép cấu hình network interfaces, iptables rules, routing tables. Cần thiết cho CNI plugins và một số network tools, nhưng nguy hiểm trong môi trường multi-tenant.
Re-enable capabilities có chọn lọc
CAP_NET_RAW: Có thể re-enable nếu workload thực sự cần (ví dụ: ping, raw socket apps):
spec:
containers:
- name: app
securityContext:
capabilities:
add:
- NET_RAWCAP_NET_ADMIN: Chỉ available nếu cluster được tạo với flag đặc biệt:
gcloud container clusters create CLUSTER_NAME \
--enable-autopilot \
--workload-policies=allow-net-admin \
--region REGIONSau khi cluster được tạo với flag này, workloads có thể request NET_ADMIN:
spec:
containers:
- name: app
securityContext:
capabilities:
add:
- NET_ADMINLưu ý: Flag --workload-policies=allow-net-admin không thể thêm vào cluster đã tạo. Bạn phải quyết định khi tạo cluster.
Capabilities được phép
Các capabilities sau được phép trong Autopilot và không cần khai báo thêm:
SETPCAP,CHOWN,SETUID,SETGIDNET_BIND_SERVICE(bind ports < 1024)DAC_OVERRIDE(bypass file permission checks)FOWNER,FSETIDKILL,MKNOD
Privileged containers và allowlist
Privileged containers (privileged: true) bị block theo mặc định vì chúng có access toàn bộ kernel capability và có thể escape container boundaries.
Partner workloads được phép
Google duy trì một allowlist cho các workloads từ partner vendors được phép chạy với elevated privileges trong Autopilot. Các workload trong allowlist thường là:
- Security agents (Falco, Sysdig, Aqua Security)
- CNI plugins được Google verified
- Storage drivers (Portworx, StorageOS với configurations cụ thể)
- Logging agents từ một số vendors
Để kiểm tra workload của mình có được phép không:
# Thử apply manifest và xem error message
kubectl apply -f your-privileged-workload.yaml
# Error sẽ chỉ rõ nếu workload bị block hoặc được permitNếu bạn cần chạy workload privileged không có trong allowlist, phải dùng Standard cluster thay vì Autopilot.
Xem danh sách workload được phép
Google không publish danh sách đầy đủ các allowed privileged workloads, nhưng bạn có thể kiểm tra:
kubectl get configmap gke-autopilot-privileged-workloads -n kube-system -o yamlOrg Policy constraints cho Autopilot
Organization Policy cho phép bạn kiểm soát behavior Autopilot ở cấp tổ chức hoặc project, không chỉ ở cấp cluster.
Restrict privileged workloads
Mặc dù Autopilot đã giới hạn privileged containers, bạn có thể thêm lớp protection thông qua Org Policy để prevent users từ việc cố tình bypass:
# Enforce constraint: không cho phép cluster Autopilot với NET_ADMIN policy
gcloud resource-manager org-policies set-policy \
--organization=ORG_ID \
policy.yaml# policy.yaml
name: organizations/ORG_ID/policies/container.restrictAutopilotWorkloadPolicies
spec:
rules:
- denyAll: trueConstraint container.restrictAutopilotWorkloadPolicies ngăn tạo Autopilot clusters với --workload-policies=allow-net-admin.
Enforce Autopilot over Standard
Nếu muốn buộc mọi GKE cluster trong org phải dùng Autopilot (vì security baseline tốt hơn):
name: organizations/ORG_ID/policies/container.restrictClusterCreation
spec:
rules:
- condition:
expression: "resource.type == 'container.googleapis.com/Cluster' && !resource.data.autopilot.enabled"
deny: {}Network security thêm
Autopilot cũng tự động áp dụng một số network security restrictions:
- External IPs on Services bị giới hạn: Autopilot thực hiện workaround cho CVE-2020-8554 (External IPs Service attack) bằng cách validate Service configurations
- Mutating webhooks trong managed namespaces: Không được phép modify Pods trong
kube-systemvà các managed namespaces khác
Tác động đến các tools phổ biến
Istio / Anthos Service Mesh
Istio sidecar injection yêu cầu NET_ADMIN để cấu hình iptables rules cho traffic interception. Trong Autopilot:
- Anthos Service Mesh (managed Istio) hoạt động — Google verified
- Self-managed Istio cần cluster được tạo với
--workload-policies=allow-net-admin - Sidecar injection method thay đổi trong Autopilot để không dùng iptables
Falco (security monitoring)
Falco cần kernel module hoặc eBPF probe để monitor syscalls. Trong Autopilot:
- Falco Helm chart chuẩn không hoạt động (cần privileged container)
- Falco provider hoặc Google Cloud's Threat Detection là alternative
- Một số security vendors có verified versions cho Autopilot
Datadog / Dynatrace / New Relic agents
Monitoring agents thường cần:
- HostPath access để đọc container metrics
procfsaccess cho process monitoring- Network traffic inspection
Trong Autopilot, nhiều agent cần configuration đặc biệt. Check với vendor để biết Autopilot-specific deployment guide.
Logging agents tùy chỉnh
Nếu bạn cần deploy Fluentd hoặc logging agent tùy chỉnh thay vì Google's built-in logging:
# DaemonSet cho custom logging agent
spec:
containers:
- name: fluentd
securityContext:
# Chỉ cần read access đến /var/log
readOnlyRootFilesystem: true
volumeMounts:
- name: varlog
mountPath: /var/log
readOnly: true
volumes:
- name: varlog
hostPath:
path: /var/log
type: DirectoryHostPath read-only /var/log được phép trong Autopilot cho trường hợp này.
SSH access và node debugging
Autopilot block SSH access vào nodes theo thiết kế. Điều này là tốt cho security nhưng tạo ra challenge khi debug:
# Không thể: gcloud compute ssh node-name
# Có thể: debug thông qua ephemeral container
kubectl debug -it pod/POD_NAME --image=busybox --target=my-container
# Debug node (nếu được phép bởi policy):
kubectl debug node/NODE_NAME -it --image=ubuntuDebug ephemeral containers trong Autopilot vẫn bị giới hạn bởi security restrictions — bạn không thể chạy container với elevated privileges trong namespace của Pod đang debug.
Security comparison với Standard
| Security feature | Autopilot | Standard (không hardened) | Standard (hardened) |
|---|---|---|---|
| Seccomp RuntimeDefault | ✅ Tự động | ❌ Manual | ✅ Nếu cấu hình |
| CAP_NET_RAW dropped | ✅ Mặc định | ❌ | ✅ Nếu cấu hình |
| SSH disabled | ✅ Không thể | ❌ | ❌ (SSH allowed) |
| Node auto-patching | ✅ Managed | ❌ Manual | ✅ Nếu bật |
| HostPath restricted | ✅ Read-only /var/log | ❌ Bất kỳ path | ✅ Nếu cấu hình PSS |
| Privileged containers | ❌ Chỉ allowlist | ✅ Full access | ❌ Nếu PSS Baseline |
| Workload Identity | ✅ Mặc định bật | ❌ Manual | ✅ Nếu bật |