1 关于SOPS
SOPS (Secret OPerationS) 是一个由 Mozilla 开发的命令行工具,用于加密和解密文件中的敏感数据。SOPS支持使用 AWS KMS、GCP KMS、Azure Key Vault、PGP 加密 YAML、JSON、ENV、INI 以及二进制格式的文件。其主要目标是使敏感信息(例如配置文件、凭证、密钥等)的管理变得简单、安全且可自动化。SOPS 的设计旨在与 Git 等版本控制系统一起使用,允许安全地存储和传输加密文件。
2 工作原理
以使用AWS KMS为例,SOPS的加密流程大致如下,
- 生成数据密钥:SOPS 生成一个临时的随机数据加密密钥(DEK)
- 加密数据:使用生成的 DEK 加密文件中的data字段
- 加密 DEK:使用配置的 KMS 密钥 ARN 加密 DEK
- 保存元数据:将加密后的 DEK 和其他元数据保存到文件中。这些元数据包括 KMS 加密密钥的 ARN、加密算法和加密时间等
这里有一点需要注意的是,这里AWS KMS并不是直接用来加密用户data字段,而是加密SOPS生成的key。
这样的设计有两方面的考虑,
-
加密性能
AWS KMS 密钥(客户主密钥,CMK)主要用于小块数据的加密和解密操作。直接使用 KMS 密钥加密大量数据会很慢,因为每次加密或解密操作都需要一次到 KMS 的 API 调用,这样会导致性能瓶颈。
而对称加密算法(如 AES)性能非常高,适用于大数据量的加密和解密操作。使用临时生成的 DEK 进行数据加密后,只有 DEK 需要通过 KMS 加密,从而极大提升性能。
-
安全性
通过使用 KMS 密钥来加密 DEK,并使用 DEK 来加密实际数据,可以将数据加密操作和密钥管理操作分离。这样,主密钥管理和数据加密使用的是不同的密钥,有助于更好的安全控制。
3 使用SOPS
首先安装sops命令,
# Download the binary
curl -LO https://github.com/getsops/sops/releases/download/v