加密日志消息
本教程将指导您如何加密由 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
文件夹中,您可以找到以下材料:
/compose
目录下的docker-compose.yaml
文件,用于部署和管理要在本教程中使用的容器应用程序。 我们使用的映像是 DockerHub中的官方 Ubuntu 映像。- 在 Docker Compose 文件中,有一条
command:
指令指示 Docker 运行 Shell 脚本,该脚本将一行纯文本和一行加密消息打印到标准输出。 此example.sh
文件存在于/compose/bin
目录中。 - 对日志消息进行加密需要公用密钥
logging.pub
。 此文件必须存在于/compose
文件夹中。 本教程将显示使用使用 openssl 的口令生成通过 AES 加密的密钥对的示例。 volumes:
指令指示 Docker 使用公用密钥和简单日志记录应用程序将compose
卷安装到容器内的/var/logging
。 Ubuntu 映像稍后将作为容器启动,并运行example.sh
作为其主应用程序。
contract 是一个 YAML 文件,用于指定要创建的 Hyper Protect Virtual Server for VPC 实例。 在本教程中,将使用专用公用和专用密钥对来加密和解密所选日志消息。
- 专用密钥由您保留,以便稍后对下载的日志进行解密。
- 公用密钥必须嵌入到合同中,这是我们案例的特殊方法。 公用密钥
logging.pub
与docker-compose.yml
文件一起存储在/example-files
文件夹下。 如合同的workload
部分 准备中所述,archive
子部分包含docker-compose.yml
的base64
编码 TGZ 文件归档。 我们的示例中的logging.pub
文件将经历相同的编码和压缩,因为它存储在同一个文件夹中。 因此,创建的实例将获取用于后续日志加密的公用密钥。
本教程还提供了样本文件,例如 env.yaml
,workload.yaml
和 user-data.yaml
。 它们仅作为正确模式的引用。
准备工作
准备合同
本教程将帮助您开始使用仅具有 env
部分 和 workload
部分 的简单 Hyper Protect Virtual Server for
VPC 合同。
根据 合同加密 中的建议,我们将对这两个部分进行加密。 当实例引导时,引导装入器将解密合同 (如果已加密)。 遵循 下载加密证书并抽取公用密钥 中的指示信息。 本教程将 证书 用于 IBM Hyper Protect Container Runtime 映像版本 ibm-hyper-protect-container-runtime-1-0-s390x-14
。 文件 hpcr.crt
在 example-files
中已可用。 执行以下步骤以获取简单合同:
-
获取 Log Analysis 实例的主机名和摄入密钥。 请参阅 针对 Hyper Protect Virtual Servers for VPC 的日志记录。
-
创建并加密
env
部分。 请参阅example-files
文件夹中的env.yaml
文件以获取正确的模式。 将内容替换为日志记录主机名和摄入密钥。 运行encrypt-basic.sh
脚本以获取合同的加密env
部分。cat env.yaml | ./encrypt-basic.sh hpcr.crt
-
创建
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
-
可以在
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
-
运行
encrypt-basic.sh
脚本以获取合同的加密workload
部分。cat workload.yaml | ./encrypt-basic.sh hpcr.crt
-
使用步骤 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