使用 Breakglass(GKE、GKE 集群)

本页面介绍了如何使用 Binary Authorization 中的紧急访问权限功能。

准备工作

本指南假定您已设置 Binary Authorization

概览

您可以使用 Breakglass 来部署 Binary Authorization 阻止的容器映像。

Breakglass 提供了一个“紧急安全舱口”,使您能够覆盖 Binary Authorization 的强制执行政策行为,以允许部署映像,甚至包括原本要被政策禁止的映像。

此功能的实现与 Kubernetes 准入控制器规范中的建议一致。

使用 Breakglass 部署映像时,Breakglass 事件会自动记录到 Cloud Audit Logs 中,无论部署是满足还是违反政策。在 Cloud Audit Logs 中,您可以手动审核或自动触发提醒或其他下游事件。

如需启用 Breakglass,请使用 break-glass 政策标志向 Pod 规范添加 label 字段。

演示紧急访问权限事件

本部分介绍如何使用 Breakglass 来部署映像,包括部署那些违反了 Binary Authorization 政策的映像。

更新 Binary Authorization 政策以拒绝所有部署请求

如需更新政策以禁止部署所有映像,请执行以下步骤:

Google Cloud 控制台

  1. 转到 Google Cloud 控制台中的 Binary Authorization 页面。

    转到 Binary Authorization

  2. 点击修改政策

  3. 修改政策页面的项目默认规则中,记下原始评估模式,然后点击禁止所有映像

  4. 点击保存政策

gcloud

  1. 如需保存当前项目中的现有政策,请执行以下命令:

    gcloud container binauthz policy export > SAVE_POLICY_YAML
    

    SAVE_POLICY_YAML 替换为导出文件的路径,例如 /tmp/save_policy.yaml

  2. 创建政策文件:

    cat > TEST_POLICY_YAML << EOM
    admissionWhitelistPatterns:
    defaultAdmissionRule:
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      evaluationMode: ALWAYS_DENY
    globalPolicyEvaluationMode: DISABLE
    EOM
    

    TEST_POLICY_YAML 替换为文件路径,例如 /tmp/policy.yaml

  3. 导入政策:

    gcloud container binauthz policy import TEST_POLICY_YAML
    

    TEST_POLICY_YAML 替换为文件路径,例如 /tmp/policy.yaml

默认情况下,所有映像现在都会被禁止部署。

尝试部署映像

在本部分中,您将尝试部署映像。政策的默认规则配置为禁止部署所有映像,因此部署请求将失败。

  1. 创建 YAML 格式的配置文件。此文件包含创建 pod 所需的基本信息:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: breakglass-pod
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. 使用 kubectl 创建 Pod:

    kubectl create -f /tmp/create_pod.yaml
    

    您会看到一条错误消息,表明该映像已被您的政策阻止。这条错误消息类似以下内容:

    Error from server (Forbidden): error when creating "/tmp/create_pod.yaml": pods "breakglass-pod" is forbidden: image policy webhook backend denied one or more images: Image gcr.io/google-samples/hello-app denied by Binary Authorization default
    admission rule. Denied by always_deny admission rule`.

启用紧急访问权限并重新部署

在本部分中,您将启用 Breakglass。虽然 Breakglass 是 Binary Authorization 中特有的功能,但您必须在 Pod 规范中更新 label 字段才能启用该功能。

如需启用 Breakglass,请执行以下命令:

  1. 创建 YAML 格式的配置文件。

    以下命令将创建包含 break-glass 标签的文件以及创建 Pod 所需的其他信息:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      labels:
        image-policy.k8s.io/break-glass: "true"
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    

    对于所有早期 Kubernetes 主实例,您可以通过将 alpha.image-policy.k8s.io/break-glass 添加到 annotations 节点来启用 Breakglass,如下所示:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      annotations:
         alpha.image-policy.k8s.io/break-glass: "true"
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. 使用 kubectl 创建 pod:

    kubectl create -f /tmp/create_pod.yaml
    

    请注意输出:pod/pod-name created

在 Cloud Audit Logs 中查找 Breakglass 日志条目

Cloud Audit Logs 中查看 Breakglass 事件。

清理

如需删除 Pod 并停用 Breakglass,请执行以下操作:

  1. 删除 Pod:

      kubectl delete -f /tmp/create_pod.yaml
      

    验证您是否收到了 pod <var>pod-name</var> deleted 之类的输出。

  2. 从 Pod 规范中移除 labelannotations 块。

  3. 重置政策:

    Google Cloud 控制台

    1. 转到 Google Cloud 控制台中的 Binary Authorization 页面。

      转到 Binary Authorization

    2. 点击修改政策

    3. 修改政策页面的项目默认规则中,将评估模式重置为先前设置。

    4. 点击保存政策

    gcloud

    1. 重新导入原始政策。

        gcloud container binauthz policy import SAVE_POLICY_YAML
      

      SAVE_POLICY_YAML 替换为您在本指南前面部分创建的文件的路径。

    您的政策即被重置。

后续步骤