Google Cloud Secret Manager
本教程展示如何设置一个使用KES服务器Google Cloud Secret Manager作为持久键值存储。
Google Cloud Secret Manager
TheGoogle Cloud Secret Manager是一个用于存储密码、访问令牌和加密密钥等机密的键值存储系统。
-
创建新项目或选择现有项目
-
启用Secret Manager 服务如果尚未为您的项目启用
-
前往Google Cloud IAM 服务账号管理并为 KES 创建一个新的服务账户。 KES 使用此服务账户向 GCP 进行身份验证并访问 Secret Manager。
-
为新账户分配一个或多个角色
如果你想快速上手,请分配
Secret Manager Admin角色。 但是,这会授予比 KES 所需更多的权限。或者,为 KES 创建一个新角色所需的最低权限:
secretmanager.secrets.create secretmanager.secrets.delete secretmanager.secrets.get -
为服务账户创建密钥通过
Actions-Create Key.使用
JSON密钥格式。Google Cloud 允许您下载具有以下结构的 JSON 文件:
{ "type": "service_account", "project_id": "<your-project-id>", "private_key_id": "<your-private-key-id>", "private_key": "-----BEGIN PRIVATE KEY-----\n ... -----END PRIVATE KEY-----\n", "client_email": "<your-service-account>@<your-project-id>.iam.gserviceaccount.com", "client_id": "<your-client-id>" }使用此凭据文件配置 KES,以向 Google Cloud 进行身份验证并访问 Secret Manager。
KES Server 设置
KES服务器需要一个TLS私钥和证书。
KES服务器是默认安全并且只能通过 TLS 运行。 本教程为简化起见使用自签名证书。
-
为 KES 服务器生成 TLS 私钥和证书
以下命令生成一个新的TLS私钥
server.key以及一个自签名的 X.509 证书server.cert这是为该IP地址签发的127.0.0.1和 DNS 名称localhost(作为 SAN)。 根据您的设置自定义命令。kes identity new --server --key server.key --cert server.cert --ip "127.0.0.1" --dns localhost任何其他用于 X.509 证书生成的工具也同样适用。 例如,您可以使用
openssl:$ openssl ecparam -genkey -name prime256v1 | openssl ec -out server.key $ openssl req -new -x509 -days 30 -key server.key -out server.cert \ -subj "/C=/ST=/L=/O=/CN=localhost" -addext "subjectAltName = IP:127.0.0.1" -
为应用程序创建私钥和证书
kes identity new --key=app.key --cert=app.cert app你可以计算
app随时更改身份。kes identity of app.cert -
创建配置文件
server-config.ymladdress: 0.0.0.0:7373 root: disabled # We disable the root identity since we don't need it in this guide tls: key : server.key cert: server.cert policy: my-app: allow: - /v1/key/create/my-app* - /v1/key/generate/my-app* - /v1/key/decrypt/my-app* identities: - ${APP_IDENTITY} keystore: gcp: secretmanager: project_id: "<your-project-id>" # Use your GCP project ID credentials: client_email: "<your-client-email>" # Use the client email from your GCP credentials file client_id: "<your-client-id>" # Use the client ID from your GCP credentials file private_key_id: "<your-private-key-id" # Use the private key ID from your GCP credentials file private_key: "-----BEGIN PRIVATE KEY----- ..." # Use the private key from your GCP credentials file -
在新窗口/标签页中启动 KES 服务器:
Linux
export APP_IDENTITY=$(kes identity of app.cert) kes server --config=server-config.yml --auth=off该命令使用--auth=off因为我们的root.cert和app.cert证书是自签名的。容器
以下说明使用Podmanto manage the containers. 你也可以使用 Docker。
根据您的部署需求修改地址和文件路径。
sudo podman pod create \ -p 9000:9000 -p 9001:9001 -p 7373:7373 \ -v ~/minio-kes-gcp/certs:/certs \ -v ~/minio-kes-gcp/minio:/mnt/minio \ -v ~/minio-kes-gcp/config:/etc/default/ \ -n minio-kes-gcp sudo podman run -dt \ --cap-add IPC_LOCK \ --name kes-server \ --pod "minio-kes-gcp" \ -e KES_SERVER=https://127.0.0.1:7373 \ -e KES_CLIENT_KEY=/certs/kes-server.key \ -e KES_CLIENT_CERT=/certs/kes-server.cert \ quay.io/minio/kes:2024-01-11T13-09-29Z server \ --auth \ --config=/etc/default/kes-config.yaml \ sudo podman run -dt \ --name minio-server \ --pod "minio-kes-gcp" \ -e "MINIO_CONFIG_ENV_FILE=/etc/default/minio" \ quay.io/minio/minio:RELEASE.2024-01-31T20-20-33Z server \ --console-address ":9001"您可以使用以下命令验证容器的状态。 该命令应显示三个 Pod,一个用于 Pod,一个用于 KES,一个用于 MinIO。
sudo podman container list -
在另一个窗口或标签页中,连接到服务器
export KES_CLIENT_CERT=app.cert export KES_CLIENT_KEY=app.key kes key create -k my-app-keyexport APP_IDENTITY=$(kes identity of app.cert) kes server --config=server-config.yml --auth=off该命令使用--auth=off因为我们的root.cert和app.cert证书是自签名的。现在,如果前往 Google Cloud Secret Manager你应该看到一个名为的密钥
my-app-key. -
从先前创建的密钥派生并解密数据密钥
my-app-keykes key derive -k my-app-key { plaintext : ... ciphertext: ... }kes key decrypt -k my-app-key <base64-ciphertext>
使用 KES 与 MinIO 服务器
MinIO Server 需要 KES 来启用服务器端数据加密。
查看MinIO KES 操作指南有关将新的 KES 服务器与 MinIO 服务器配合使用所需的额外步骤。
配置参考
以下部分介绍了使用 Google Cloud Secret Manager 作为根 KMS 存储外部密钥的 Key Encryption Service (KES) 配置设置,例如用于 MinIO 服务器端加密的密钥。