日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

kritis-validation-hook組件介紹

kritis-validation-hook組件是部署可信容器環節中進行容器鏡像簽名驗證的關鍵組件。在部署前對容器鏡像進行簽名驗證,以確保集群中僅部署經過可信授權方進行過簽名的容器鏡像,降低在您的環境中運行意外或惡意代碼的風險。本文通過示例介紹kritis-validation-hook組件的工作效果。

前提條件

已創建托管版或專有版集群。具體操作,請參見創建ACK托管集群創建ACK專有集群

背景信息

kritis-validation-hook組件在開源的kritis軟件的基礎上增加了對阿里云容器鏡像服務ACR的深度集成,支持驗證通過阿里云密鑰管理服務KMS簽名的容器鏡像。kritis-validation-hook組件通過與云安全中心、KMS和ACR的深度合作,實現了全自動化的對容器鏡像進行加簽和驗簽,協助您構建更安全的集群運行環境。實現自動驗證容器鏡像簽名,請參見使用kritis-validation-hook組件實現自動驗證容器鏡像簽名

配置資源訪問權限

為了正常運行kritis-validation-hook組件,需要確保集群使用的RAM角色擁有以下資源訪問權限:

重要
  • 若您使用的是托管版集群,需要確保集群使用的Worker RAM角色擁有以下資源訪問權限。

  • 若您使用的是專有版集群,需要確保集群使用的Master RAM角色和Worker RAM角色擁有以下資源訪問權限。

"cr:ListInstance",
"cr:ListMetadataOccurrences"

如果您的集群使用的RAM角色沒有上述訪問權限,您可以通過以下方法添加組件所需的資源訪問權限。

  1. 創建自定義權限策略,策略內容如下。具體操作,請參見步驟一:創建自定義權限策略

    {
        "Statement": [
            {
                "Action": [
                    "cr:ListInstance",
                    "cr:ListMetadataOccurrences"
                ],
                "Effect": "Allow",
                "Resource": "*"
            }
        ],
        "Version": "1"
    }
  2. 為集群的Worker RAM角色授權。具體操作,請參見步驟二:為集群的Worker RAM角色授權

    說明

    如果是專有版集群,您需要為集群的Master RAM角色也進行以上授權。

配置ACK Serverless集群中組件所需的RAM權限

由于ACK Serverless集群沒有Worker RAM角色和Master RAM角色,您需要使用RRSA特性配置組件所需的RAM權限。更多信息,請參見通過RRSA配置ServiceAccount的RAM權限實現Pod權限隔離

您可以使用ack-ram-tool工具快速完成組件所需的RRSA相關配置。更多信息,請參見ack-ram-tool。相關配置操作如下。

說明

請替換以下命令中出現的 <clusterId>為您需要操作的集群ID。

  1. 執行以下命令,開啟集群的RRSA特性。

    ack-ram-tool rrsa enable -c <clusterId>
  2. 執行以下命令,配置組件所需的RAM權限。

    ack-ram-tool rrsa setup-addon -a kritis-validation-hook -c <clusterId>

啟用鏡像簽名驗證示例

以下通過對當前default命名空間啟用鏡像簽名驗證為例,展示kritis-validation-hook組件的工作效果。

說明

因為鏡像簽名不屬于kritis-validation-hook組件的工作范疇,所以示例略過簽名的步驟。詳細的鏡像加簽步驟,請參見使用容器鏡像加簽。本示例中涉及的簽名后的信息如下,您需要替換為實際的鏡像簽名信息:

  • 已簽名的容器鏡像:kritis-demo***.cn-hangzhou.cr.aliyuncs.com/kritis-demo***/alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45

    如果未啟用不可變鏡像的話,必須配置使用digest格式的鏡像地址,關于鏡像不可變的詳細介紹,請參見開啟鏡像版本不可變

  • 鏡像加簽時使用的證明者名稱(加簽Key):demo-aa。

  • 使用cat publickey.txt | base64 | tr -d '\n'命令得到的base64編碼后的公鑰:LS0tLS1CRUdJTiBQ***

    鏡像加簽時使用的KMS Key對應的公鑰信息存儲在publickey.txt中。

  • 鏡像加簽時使用的KMS key-id:4a2ef103-5aa3-4220-****

  1. 配置AttestationAuthority,聲明相應的可信授權方。

    1. 使用以下內容創建AttestationAuthority.yaml文件。

      apiVersion: kritis.grafeas.io/v1beta1
      kind: AttestationAuthority
      metadata:
        name: demo-aa
      spec:
        noteReference: namespaces/demo-aa
        publicKeyData: LS0tLS1CRUdJTiBQ***
        publicKeyId: 4a2ef103-5aa3-4220-****
    2. 執行以下命令,配置可信授權方信息。

      kubectl apply -f AttestationAuthority.yaml
  2. 配置GenericAttestationPolicy,聲明驗證簽名策略及使用可信授權方的信息驗證簽名。

    1. 使用以下內容創建GenericAttestationPolicy.yaml文件。

      apiVersion: kritis.grafeas.io/v1beta1
      kind: GenericAttestationPolicy
      metadata:
        name: demo-gap
      spec:
        attestationAuthorityNames:
        - demo-aa
    2. 執行以下命令配置驗證簽名策略。

      kubectl apply -f GenericAttestationPolicy.yaml
  3. 測試鏡像簽名驗證功能,部署未經信任授權方簽名的鏡像。

    • 執行以下命令測試鏡像簽名驗證功能。

      kubectl create deployment test-denied --image=alpine:3.11

      預期輸出:

      Error from server: admission webhook "kritis-validation-hook-deployments.grafeas.io" denied the request: image alpine:3.11 is not attested
    • 執行以下命令測試鏡像簽名驗證功能。

      kubectl create deployment test-denied --image=kritis-demo***.cn-hangzhou.cr.aliyuncs.com/kritis-demo***/alpine:3.11

      預期輸出:

      Error from server: admission webhook "kritis-validation-hook-deployments.grafeas.io" denied the request: image kritis-demo***.cn-hangzhou.cr.aliyuncs.com/kritis-demo***/alpine:3.11 is not attested

    從預期輸出可得,鏡像簽名驗證功能可拒絕部署未經信任授權方簽名的鏡像。

  4. 測試鏡像簽名驗證功能,部署經信任授權方簽名的鏡像。

    執行以下命令測試鏡像簽名驗證功能。

    kubectl create deployment test-allow --image=kritis-demo***.cn-hangzhou.cr.aliyuncs.com/kritis-demo***/alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45

    預期輸出:

    deployment.apps/test-allow created

    從預期輸出可得,鏡像簽名驗證功能可部署經信任授權方簽名的鏡像。

配置鏡像驗簽白名單

在中間件或服務網格場景下,kritis-validation-hook組件支持通過配置鏡像驗簽白名單的方式,解決第三方組件自動注入的Sidecar容器的鏡像無法通過鏡像驗簽,導致無法部署Pod的問題。組件不會對白名單內的鏡像進行簽名驗證,只會驗證未在白名單內的鏡像。

可以通過定義admissionallowlists.kritis.grafeas.io資源的方法來配置鏡像驗簽白名單。CRD資源定義如下:

apiVersion: kritis.grafeas.io/v1beta1   # 默認值,無需修改。
kind: AdmissionAllowlist                # 默認值,無需修改。
metadata:
  name: kritis-allowlist                # 資源名,在集群內唯一。
spec:
  patterns:                             # 白名單配置,可以定義多條白名單。
  - namePattern: 'registry*.*.aliyuncs.com/acs/*' # 想忽略的鏡像名稱,具體格式詳見下方說明。
  - namePattern: 'registry-vpc.cn-beijing.aliyuncs.com/arms-docker-repo/*'
    namespace: 'default'    # [可選],白名單配置適用于哪個命名空間,未配置時適用于所有命名空間。

若您需要將ACK的系統鏡像加入白名單,可以通過以下操作配置。

  1. 使用以下內容創建kritis-admission-allowlist-acs.yaml文件配置白名單。

    apiVersion: kritis.grafeas.io/v1beta1
    kind: AdmissionAllowlist
    metadata:
      name: allow-acs-images
    spec:
      patterns:
      - namePattern: 'registry*.*.aliyuncs.com/acs/*'

    namePattern配置項值支持完整匹配,且支持通過星號(*)字符實現簡單的通配符匹配,具體說明如下:

    • 當配置項值不包含星號(*)字符時,將按配置的值進行完整匹配。例如,nginx:v0.1.0只會匹配nginx:v0.1.0

    • 當通過星號(*)字符實現通配符匹配時,存在以下限制:

      • 星號(*)位于末尾時,匹配除正斜線(/)外的任意字符。例如,a.com/nginx*匹配a.com/nginx:v0.1.0,但是不匹配a.com/nginx/test:v0.1.0

      • 星號(*)不位于末尾時,匹配字母、數字、短橫線(-) 以及下劃線(_) 。例如,registry-vpc.cn-*.aliyuncs.com/acs/pause:3.2既匹配registry-vpc.cn-hangzhou.aliyuncs.com/acs/pause:3.2,也匹配registry-vpc.cn-beijing.aliyuncs.com/acs/pause:3.2

    常見的白名單如下,您可以根據實際需求添加。

    # 容器服務ACK使用的鏡像
    - namePattern: 'registry*.*.aliyuncs.com/acs/*'
    - namePattern: 'registry-*.ack.aliyuncs.com/acs/*'
    
    # 容器服務ACK使用的鏡像(限定中國地域)
    - namePattern: 'registry*.cn-*.aliyuncs.com/acs/*'
    - namePattern: 'registry-cn-*.ack.aliyuncs.com/acs/*'
    
    # ARMS使用的鏡像
    - namePattern: 'registry*.*.aliyuncs.com/arms-docker-repo/*'
    
    # ARMS使用的鏡像(限定中國地域)
    - namePattern: 'registry*.cn-*.aliyuncs.com/arms-docker-repo/*'
  2. 執行以下命令配置白名單。

    kubectl apply -f kritis-admission-allowlist-acs.yaml 

    預期輸出:

    admissionallowlist.kritis.grafeas.io/allow-acs-images created
  3. 執行以下命令驗證白名單配置是否成功。

    kubectl get admissionallowlists.kritis.grafeas.io

    預期輸出:

    NAME               AGE
    allow-acs-images   2m22s