You need to enable JavaScript to run this app.
导航
典型场景5【容器部署】加密容器镜像部署
最近更新时间:2025.04.28 18:05:50首次发布时间:2025.04.28 18:05:50
我的收藏
有用
有用
无用
无用

说明

本地加密容器镜像】上传并发布到PCC机密容器后,完成服务部署,并提供密文接口供端云互信服务联调测试。

整体流程说明

Image

准备工作

步骤1:创建密钥环/密钥

  • 创建可信密钥环:进入【可信密钥服务】模块,点击「创建可信密钥环」按钮;

    • 具体参数描述:
      • 密钥环名称,必填,自定义;
      • 密钥环描述,自定义;
        Image
    • 点击确定后,在密钥环列表页获得 【密钥环ID】,<king_id>
  • 创建可信密钥:点击【密钥环名称】,进入密钥列表页面,点击「创建密钥」按钮;
    Image
    Image

  • 参数详细说明

    • 密钥名称:必填,自定义;
    • 密钥描述:非必填,自定义;
    • 密钥类型:单选项,包括SYMMETRIC_128和SYMMETRIC_256;
    • 密钥用途:单选项,包括ENCRYPT_DECRYPT;
    • 密钥标签:单选项,选择 “加密镜像”;
    • 密钥来源:单选项,选择 “外部导入”;
    • 密钥有效期:默认“长期有效”,或也可设置有效期;
![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/b4475d620fa24adbbef37344fef392ff~tplv-goo7wpa0wc-image.image =625x)

Image

  • 点击确定后,在列表页获取【可信密钥ID<key_id>和【导入参数】<tks-import-material.txt>

步骤2:准备并导入可信密钥

  • 依赖环境

    • 本地准备 Linux环境
  • 依赖程序

    • python3.7+
    • cryptography (安装pip install cryptography~=38.0.4
  • 导入密钥

    • 准备密钥文件secret-key.bin
    # 作为示例,以下命令将会生成一个长度为16 Bytes (128bits) 的随机密钥到secret-key.bin文件中
    openssl rand -out secret-key.bin 16
    
    # 作为示例,以下命令将会生成一个长度为32 Bytes (256 bits) 的随机密钥到secret-key.bin文件中
    openssl rand -out secret-key.bin 32
    
    • 保存TKS的密钥导入材料为tks-import-material.txt,具体获取位置如下:
    • 获取密钥导入脚本,并执行脚本

      ### 获取密钥导入脚本
      wget https://jeddak-cc-infra.tos-cn-beijing.volces.com/tks/tks-client-script.py
      ### 执行密钥导入脚本
      python3 tks-client-script.py -s=secret-key.bin -m=tks-import-material.txt
      
      
      ##### 输出结果
      ## 导入参数
      client-import-param.txt
      ## 加密密钥
      client-encrypted-key.txt
      
    • 上面将会产生密钥导入参数client-import-param.txt以及加密密钥client-encrypted-key.txt,通过PCC-可信密钥服务页面找到对应的密钥名称,分别填写如上素材,完成密钥导入。
      Image
      Image

步骤3:容器镜像本地加密

  • 环境准备

    • skopeo软件
      • 使用官方容器镜像:quay.io/skopeo/stable:latest
    • keyprovider软件
    wget https://jck-components.tos-cn-beijing.volces.com/runc/keyprovider/tks-keyprovider
    chmod +x tks-keyprovider
    
    • 步骤2中已导入的加密密钥(secret-key.bin),
  • 加密容器镜像

    • 第1步:对加密密钥编码为Hex格式
    cat secret-key.bin | xxd -p -c 10000 > image-encrypt-key.txt
    # 示例:ed362e88bf94f2746f60d40fe34ef2ad892e4381d1c11d4e00f8bde9d7af8750
    
    • 第2步:创建密钥说明文件wrap-key.json,在其中填入如下的内容

      {
          "AppID": "test-accont", ## PCC登陆用户名
          "RingID": "8a5b796d-f594-4d68-ae7a-c1c1f41a1a88",##密钥环ID
          "KeyID": "b257e194-439b-49a3-bff8-3f7258e87ef1",##密钥ID
          "Key": "ed362e88bf94f2746f60d40fe34ef2ad892e4381d1c11d4e00f8bde9d7af8750"##Hex格式的密钥
      }
      
    • 第3步:【**构建镜像加密脚本和配置文件】,**在本地linux系统下执行以下两个命令脚本:

      cat << EOF > ocicrypt.conf
      {
          "key-providers": {
              "tks-keyprovider": {
                  "cmd": {
                      "path": "/workspace$(pwd)/tks-keyprovider",
                      "args": ["--wrap", "/workspace$(pwd)/wrap-key.json"]
                  }
              }
          }
      }
      EOF
      
      cat << EOF > skopeo.sh
      #!/bin/bash
      
      docker run --rm -it --net=host \\
          -e OCICRYPT_KEYPROVIDER_CONFIG=/workspace/`pwd`/ocicrypt.conf \\
          -v `pwd`:/workspace/`pwd` \\
          -w /workspace/`pwd` \\
          quay.io/skopeo/stable \\
          "\$@"
      EOF
      
      chmod +x skopeo.sh
      
    • 第4步:拷贝私有镜像到本地

      ./skopeo.sh copy docker://<镜像地址> oci:image-plaintext
      # 参考示例:
      # ./skopeo.sh copy docker://quay.io/skopeo/stable:latest oci:image-plaintext
      
    • 第5步:加密镜像

      ./skopeo.sh copy \
          oci:image-plaintext \
          oci:image-encrypted \
          --encryption-key provider:tks-keyprovider
      

步骤4:上传至火山镜像仓库

  • 获取火山镜像**<仓库用户名><临时密钥><火山镜像仓库>**网络地址

Image

Image

Image

  • **<火山镜像仓库>**网络地址

  • 上传火山镜像仓库

    ./skopeo.sh copy \
        oci:image-encrypted \
        docker://<火山镜像仓库>:<自定义版本号> \
        --dest-username=<仓库用户名> \
        --dest-password=<临时密钥>
    
    # 参考示例
    # ./skopeo.sh copy \
    #     oci:image-encrypted \
    #     docker://test-repo-cn-beijing.cr.volces.com/test-namespace/test-oci/dmeo:v1 \
    #     --dest-username=test-account \
    #     --dest-password=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik5IRjc6NktBSzpDV...
    
  • **<镜像地址>**如下:

加密镜像发布与部署

步骤1:注册加密镜像基线

  • 访问【基线管理服务】,在"我的基线"标签下,点击【注册基线】按钮。
  • 输入如下字段:
    • 镜像名称,必填项,自定义;
    • 镜像版本,必填项,自定义;
    • 镜像地址,必填项,填写【准备工作】中输入出的**<镜像地址>**;

步骤2:镜像发布

  • 选择已注册完成镜像基线,点击操作列对应的「镜像发布」按钮,进行镜像容器发布部署,

  • 填写参数说明如下

    • 基本信息
      • 镜像,必填项,默认已补填注册镜像基线的镜像
      • 容器名称,必填项,可自定义;
      • 容器描述,选填项,可自定义;
    • 资源信息
      • PCC规格,必选项,根据已购买的规格进行选择;
      • 实例数量,必填项,根据业务需要和购买资源情况填写;
      • 其他信息,非必填项,可按照实际情况填写;
    • 服务配置
      • 端口,必填项,按照实际需求填写;
      • 其他信息,非必填项,可按照实际情况填写;
  • 提交后,在【机密容器服务】模块下的【机密容器】列表页面可以查看已创建的机密容器;

步骤3:配置容器镜像的远程证明策略

  • 创建证明策略
    • 进入【远程证明服务】模块,点击「创建证明策略」按钮,字段说明如下:
      • 策略名称,自定义,例如:机密容器证明策略
      • 策略描述,自定义;
      • 选择对应的加密模型,策略内容自动变化,提交成功后可在策略列表查看创建成功的策略数据;

Image

Image

  • 容器远程证明测试
    • 进入【远程证明服务】模块,选择刚刚创建的机密容器证明策略,点击【远程证明测试】按钮

    • 进行远程证明测试

    • 查看远程证明状态和下载远程证明报告

端云互信SDK集成调试

说明

按照客户实际业务进行业务服务与端侧调试;