IBM Cloud Docs
加密日志消息

加密日志消息

本教程将指导您如何加密由 Hyper Protect Virtual Server for VPC 实例中的容器工作负载生成的日志消息。

目标

每个 Hyper Protect Virtual Server for VPC 实例都是使用有效的 合同 创建的。 合同的一个部分存储 日志记录配置。 已部署的工作负载生成的日志将通过 TLS 发送到指定的日志记录服务,稍后将显示在日志记录仪表板上。

如果工作负载生成敏感信息,那么可以执行与本教程中类似的步骤,以使所选日志消息在日志记录仪表板上显示为密文。 要检索已解密的消息,您可以从 Log Analysis 实例下载日志并在本地对其进行解密。

在本教程中,我们使用 Log Analysis 作为日志记录服务。 此过程也适用于系统日志服务器。

简介

本教程将 Docker 容器部署为 Hyper Protect Virtual Server for VPC。 在 /example-files 文件夹中,您可以找到以下材料:

  1. /compose 目录下的 docker-compose.yaml 文件,用于部署和管理要在本教程中使用的容器应用程序。 我们使用的映像是 DockerHub中的官方 Ubuntu 映像。
  2. 在 Docker Compose 文件中,有一条 command: 指令指示 Docker 运行 Shell 脚本,该脚本将一行纯文本和一行加密消息打印到标准输出。 此 example.sh 文件存在于 /compose/bin 目录中。
  3. 对日志消息进行加密需要公用密钥 logging.pub。 此文件必须存在于 /compose 文件夹中。 本教程将显示使用使用 openssl 的口令生成通过 AES 加密的密钥对的示例。
  4. volumes: 指令指示 Docker 使用公用密钥和简单日志记录应用程序将 compose 卷安装到容器内的 /var/logging。 Ubuntu 映像稍后将作为容器启动,并运行 example.sh 作为其主应用程序。

contract 是一个 YAML 文件,用于指定要创建的 Hyper Protect Virtual Server for VPC 实例。 在本教程中,将使用专用公用和专用密钥对来加密和解密所选日志消息。

  • 专用密钥由您保留,以便稍后对下载的日志进行解密。
  • 公用密钥必须嵌入到合同中,这是我们案例的特殊方法。 公用密钥 logging.pubdocker-compose.yml 文件一起存储在 /example-files 文件夹下。 如合同的 workload 部分 准备中所述,archive 子部分包含 docker-compose.ymlbase64 编码 TGZ 文件归档。 我们的示例中的 logging.pub 文件将经历相同的编码和压缩,因为它存储在同一个文件夹中。 因此,创建的实例将获取用于后续日志加密的公用密钥。

本教程还提供了样本文件,例如 env.yamlworkload.yamluser-data.yaml。 它们仅作为正确模式的引用。

准备工作

  1. 安装 OpenSSL 以进行加密。 本教程使用 V 3.0 或更高版本。
  2. 通过遵循 文档 来设置日志记录实例。
  3. 此示例在 Linux 系统上运行。

准备合同

本教程将帮助您开始使用仅具有 env 部分workload 部分 的简单 Hyper Protect Virtual Server for VPC 合同。

根据 合同加密 中的建议,我们将对这两个部分进行加密。 当实例引导时,引导装入器将解密合同 (如果已加密)。 遵循 下载加密证书并抽取公用密钥 中的指示信息。 本教程将 证书 用于 IBM Hyper Protect Container Runtime 映像版本 ibm-hyper-protect-container-runtime-1-0-s390x-14。 文件 hpcr.crtexample-files 中已可用。 执行以下步骤以获取简单合同:

  1. 获取 Log Analysis 实例的主机名和摄入密钥。 请参阅 针对 Hyper Protect Virtual Servers for VPC 的日志记录

  2. 创建并加密 env 部分。 请参阅 example-files 文件夹中的 env.yaml 文件以获取正确的模式。 将内容替换为日志记录主机名和摄入密钥。 运行 encrypt-basic.sh 脚本以获取合同的加密 env 部分。

    cat env.yaml | ./encrypt-basic.sh hpcr.crt
    
  3. 创建 workload 部分。 请参阅 example-files 文件夹中的 workload.yaml 样本文件以获取正确的模式。 在此示例中,example-files 文件夹中的 docker compose 文件将用于 compose 子节。

    此外,请提供用于对日志消息进行加密的公用密钥。 运行以下命令以生成密钥对。 我们将继续使用公用密钥。 请注意,logEncrypt 是用于生成密钥的口令,您可以使用自己的口令。

    openssl genrsa -aes128 -passout pass:logEncrypt -out logging 4096
    
    openssl rsa -in logging -passin pass:logEncrypt -pubout -out logging.pub
    
  4. 可以在 example-files 下的 compose 文件夹中找到样本输出。 请记住,包含公用密钥的 logging.pub 文件必须与 docker-compose.yml 一起存储在 compose 文件夹中。

    压缩并加密文件夹,因为 compose 子节需要此值作为 archive 值。 使用以下命令获取 base64 编码的归档作为名为 compose.b64 的文件。 将 compose.b64 的原始内容用于 compose 子节下的 archive 的值。

    tar czvf compose.tgz docker-compose.yml logging.pub bin/
    base64 -w0 compose.tgz > compose.b64
    
  5. 运行 encrypt-basic.sh 脚本以获取合同的加密 workload 部分。

    cat workload.yaml | ./encrypt-basic.sh hpcr.crt
    
  6. 使用步骤 2 和 5 的输出完成 user-data.yaml。 请参阅样本 user-data.yaml 以获取正确的模式。 请注意 hyper-protect-basic 令牌方法以实现混合加密,因为它在整个 IBM Cloud Hyper Protect Virtual Server for VPC 中使用。

创建Hyper Protect Virtual Server实例

在合同 (用户数据) 可用后,我们将继续创建实例。

最快的方法是使用 UI。 对于 操作系统,选择 IBM Hyper Protect 以针对 VPC 实例创建 Hyper Protect Virtual Server。 将用户数据粘贴到 User data 框中。 准备就绪后,单击 创建虚拟服务器实例

解密日志消息

监视串行控制台。 当虚拟服务器实例已启动并正在运行时,请转至您供应的 Log Analysis 实例。 打开仪表板并找到密文,这是您的加密日志消息。

decrypt-basic.sh 与生成的专用密钥配合使用,以解密加密的日志消息。

echo hyper-protect-basic.rdf...EqM | decrypt-basic.sh logging