使用紧急访问权限

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

概览

Binary Authorization 通过管理 GKE 是否可以部署容器映像来提供软件供应链安全性。您偶尔需要强制部署 Binary Authorization Enforcer 通常会阻止的容器映像。在这些情况下,Binary Authorization 提供了一项称为紧急访问权限 的功能。如需绕过政策限制条件并允许部署映像,可以使用 break-glass 政策标志为 pod 定义添加注释。

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

最后,紧急访问权限会自动将紧急访问权限事件记录到 Cloud Logging。在 Cloud Logging 中,您可以手动审核或自动触发提醒或其他下游事件。

演示紧急访问权限事件

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

虽然紧急访问权限是 Binary Authorization 中特有的功能,但它需要更新 pod 规范中的注释。

如需更新政策以拒绝所有部署容器映像的请求,请执行以下步骤:

  1. 转到 Google Cloud Console 中的“Binary Authorization”页面。

    转到“Binary Authorization”页面

  2. 点击修改政策

  3. 将项目默认规则设置为 Deny All

修改政策页面的项目默认规则中,点击禁止所有映像

  1. 点击保存政策

尝试部署容器映像

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

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
    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 "pod-name" is forbidden: image policy webhook backend denied one or more images: Denied by default admission rule. Overridden by evaluation mode

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

  1. 创建 YAML 格式的配置文件。此文件现在包含紧急访问权限注释以及创建 pod 所需的其他信息:

    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 Logging 中查找紧急访问权限日志条目

  1. 转到 Cloud Logging“日志查看器”页面:

    转到“日志查看器”页面

  2. 资源列表中选择 Kubernetes 集群

  3. 时间范围选择器中选择时间范围。

  4. 复制以下内容,然后将其粘贴并输入到搜索查询框中:

    imagepolicywebhook.image-policy.k8s.io/break-glass
    

    系统可能会扩大返回的记录范围,以显示关于紧急访问权限部署事件的信息。

通过删除 pod 进行清理:

kubectl delete -f /tmp/create_pod.yaml

并验证您是否收到了如下所示的输出:pod "pod-name" deleted