Secures Helm Chart deployments by verifying GPG signatures, scanning rendered templates with kubesec/checkov/trivy/kube-linter/helm-lint, and enforcing Pod security contexts/resource limits in Kubernetes.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
Helm(Kubernetes 包管理器)的部署安全需要验证 Chart 来源、扫描模板中的安全错误配置、强制执行 Pod 安全上下文、安全管理 Secret,以及控制 Helm 操作的 RBAC。
Secures Helm chart deployments by validating integrity with GPG, scanning templates via kubesec/checkov/trivy/helm-lint, and enforcing Kubernetes pod security contexts.
Secures Helm chart deployments by validating integrity with GPG signatures, scanning rendered templates using kubesec/checkov/trivy/kube-linter/helm lint, and enforcing pod security contexts in values.yaml.
Validates and audits Helm charts with linting, template rendering, YAML/schema checks, CRD verification, dry-runs, and security best practices.
Share bugs, ideas, or general feedback.
Helm(Kubernetes 包管理器)的部署安全需要验证 Chart 来源、扫描模板中的安全错误配置、强制执行 Pod 安全上下文、安全管理 Secret,以及控制 Helm 操作的 RBAC。
# 生成 GPG 签名密钥
gpg --full-generate-key
# 打包并签署 Chart
helm package ./mychart --sign --key "helm-signing@example.com" --keyring ~/.gnupg/pubring.gpg
# 验证 Chart 签名
helm verify mychart-0.1.0.tgz --keyring ~/.gnupg/pubring.gpg
# 从仓库验证 Chart
helm pull myrepo/mychart --verify --keyring /path/to/keyring.gpg
# 检查 Chart 来源文件
cat mychart-0.1.0.tgz.prov
# 渲染模板而不部署
helm template myrelease ./mychart --values values-prod.yaml > rendered.yaml
# 使用 kubesec 扫描
kubesec scan rendered.yaml
# 使用 checkov 扫描
checkov -f rendered.yaml --framework kubernetes
# 使用 trivy 扫描
trivy config rendered.yaml
# 使用 kube-linter 扫描
kube-linter lint rendered.yaml
# 检查 Chart
helm lint ./mychart --values values-prod.yaml --strict
# 带调试输出的检查
helm lint ./mychart --debug
# values.yaml - 安全加固默认值
securityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
podSecurityContext:
seccompProfile:
type: RuntimeDefault
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
networkPolicy:
enabled: true
serviceAccount:
create: true
automountServiceAccountToken: false
image:
pullPolicy: Always
# 使用摘要(digest)代替标签(tag)以确保不可变性
# tag: "1.0.0"
# digest: "sha256:abc123..."
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "mychart.fullname" . }}
spec:
template:
spec:
automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources:
{{- toYaml .Values.resources | nindent 12 }}
# templates/external-secret.yaml
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: {{ include "mychart.fullname" . }}-secrets
spec:
refreshInterval: 1h
secretStoreRef:
name: aws-secretsmanager
kind: ClusterSecretStore
target:
name: {{ include "mychart.fullname" . }}-secrets
data:
- secretKey: db-password
remoteRef:
key: production/database
property: password
# 安装 helm-secrets 插件
helm plugin install https://github.com/jkroepke/helm-secrets
# 加密 values 文件
helm secrets encrypt values-secrets.yaml
# 使用加密 Secret 部署
helm secrets install myrelease ./mychart -f values.yaml -f values-secrets.yaml
# 解密以进行编辑
helm secrets edit values-secrets.yaml
# helm-deployer-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: helm-deployer
namespace: production
rules:
- apiGroups: ["", "apps", "batch", "networking.k8s.io"]
resources: ["deployments", "services", "configmaps", "secrets", "ingresses", "jobs"]
verbs: ["get", "list", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: helm-deployer-binding
namespace: production
subjects:
- kind: ServiceAccount
name: helm-deployer
namespace: production
roleRef:
kind: Role
name: helm-deployer
apiGroup: rbac.authorization.k8s.io
# .github/workflows/helm-security.yaml
name: Helm Chart 安全
on:
pull_request:
paths: ['charts/**']
jobs:
lint-and-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Helm 检查
run: helm lint ./charts/mychart --strict
- name: 渲染模板
run: helm template test ./charts/mychart -f charts/mychart/values.yaml > rendered.yaml
- name: 使用 kube-linter 扫描
uses: stackrox/kube-linter-action@v1
with:
directory: rendered.yaml
- name: 使用 trivy 扫描
uses: aquasecurity/trivy-action@master
with:
scan-type: config
scan-ref: rendered.yaml
- name: 使用 checkov 扫描
uses: bridgecrewio/checkov-action@master
with:
file: rendered.yaml
framework: kubernetes
latest--strict 标志