在 Azure Kubernetes Service (AKS) 中使用 Pod 安全性許可
Pod 安全性許可 (PSA) 使用標籤以在命名空間中所執行的 Pod 上強制執行 Pod 安全性標準原則。 在 AKS 中,預設會啟用 Pod 安全性許可。 如需 Pod 安全性許可和 Pod 安全性標準的詳細資訊,請參閱使用命名空間標籤強制執行 Pod 安全性標準和 Pod 安全性標準。
Pod 安全性許可為適用於單一叢集實作之內建原則解決方案。 如果您想要使用企業級原則,則建議您使用 Azure 原則。
開始之前
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,您可以建立免費帳戶。
- Azure CLI 已安裝。
- 執行 Kubernetes 1.23 版或更高版本的現有 AKS 叢集。
為叢集中的命名空間啟用 Pod 安全性許可
啟用單一命名空間的 PSA
使用
kubectl label
命令以啟用叢集中單一命名空間的 PSA,並使用您想要強制執行的原則值來設定pod-security.kubernetes.io/enforce
標籤。 下列範例會啟用 NAMESPACE 命名空間的restricted
原則。kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=restricted
啟用所有命名空間的 PSA
使用
kubectl label
命令以啟用叢集中所有命名空間的 PSA,並使用您想要強制執行的原則值來設定pod-security.kubernetes.io/warn
標籤。 下列範例會啟用叢集中所有命名空間的baseline
原則。 如果將任何 Pod 部署至不符合基準原則的命名空間,則此原則會產生使用者面向警告。kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=baseline
使用部署來強制執行 Pod 安全性許可原則
使用
kubectl create namespace
命令來建立兩個命名空間。kubectl create namespace test-restricted kubectl create namespace test-privileged
使用
kubectl label
命令,以啟用每個命名空間的 PSA原則:一個具有restricted
原則,另一個則具有baseline
原則。kubectl label --overwrite ns test-restricted pod-security.kubernetes.io/enforce=restricted pod-security.kubernetes.io/warn=restricted kubectl label --overwrite ns test-privileged pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/warn=privileged
這會設定
test-restricted
和test-privileged
命名空間來封鎖執行中 Pod,並在嘗試執行任何不符合所設定原則的 Pod 時,產生使用者面向的警告。使用
kubectl apply
命令,以嘗試將 Pod 部署至test-restricted
命名空間。 此命令會導致錯誤,因為test-restricted
命名空間設定為封鎖不符合restricted
原則的 Pod。kubectl apply --namespace test-restricted -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
下列範例輸出會顯示一則警告,指出 Pod 違反所設定的原則:
... Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "azure-vote-back" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "azure-vote-back" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "azure-vote-back" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "azure-vote-back" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost") deployment.apps/azure-vote-back created service/azure-vote-back created Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "azure-vote-front" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "azure-vote-front" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "azure-vote-front" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "azure-vote-front" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost") deployment.apps/azure-vote-front created service/azure-vote-front created
使用
kubectl get pods
命令,以確認test-restricted
命名空間中未執行任何 Pod。kubectl get pods --namespace test-restricted
下列範例輸出會顯示
test-restricted
命名空間中未執行任何 Pod:No resources found in test-restricted namespace.
使用
kubectl apply
命令,以嘗試將 Pod 部署至test-privileged
命名空間。 目前,應該會成功部署 Pod,因為test-privileged
命名空間設定為允許可違反privileged
原則的 Pod。kubectl apply --namespace test-privileged -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
下列範例輸出會顯示已成功部署 Pod:
deployment.apps/azure-vote-back created service/azure-vote-back created deployment.apps/azure-vote-front created service/azure-vote-front created
使用
kubectl get pods
命令,以確認test-privileged
命名空間正在執行 Pod。kubectl get pods --namespace test-privileged
下列範例輸出會顯示
test-privileged
命名空間中正在執行兩個 Pod:NAME READY STATUS RESTARTS AGE azure-vote-back-6fcdc5cbd5-svbdf 1/1 Running 0 2m29s azure-vote-front-5f4b8d498-tqzwv 1/1 Running 0 2m28s
使用
kubectl delete
命令來移除test-restricted
和test-privileged
命名空間。kubectl delete namespace test-restricted test-privileged
下一步
在本文中,您已了解如何在 AKS 叢集中啟用 Pod 安全性許可。 如需 Pod 安全性許可的詳細資訊,請參閱使用命名空間標籤強制執行 Pod 安全性標準。 若要深入了解 Pod 安全性許可所使用的 Pod 安全性標準,請參閱 Pod 安全性標準。