在 GCP Secret Manager 中管理密钥
GCP Secret Manager 是一项完全托管的服务,用于存储、管理和访问敏感信息,如 API 密钥、密码和证书。它允许你通过加密集中存储密钥,自动进行版本控制,并使用 Google Cloud 的 IAM 策略控制访问。
本指南将向你展示如何使用 GCP Secret Manager 管理身份验证插件 key-auth 的用户凭证,以及如何在 APISIX 中检索密钥。
前置条件
- 安装 Docker。
- 安装 cURL 以向服务发送请求进行验证。
- 按照 快速入门教程 在 Docker 中启动一个新的 APISIX 实例。
- 拥有一个 GCP 帐户 并启用 Secret Manager。
在 GCP Secret Manager 中创建密钥
在本节中,你将创建一个密钥来存储消费者 john 的 key-auth 身份验证密钥。
导航到控制台中的 GCP Secret Manager 并创建一个密钥。填写名称 apisix-john-key-auth 和密钥 john-key:

查看其余信息并完成密钥创建。你应该在 GCP Secret Manager 中看到列出的密钥:

获取 GCP 访问凭证
按照 服务帐号凭证 文档在 GCP 中创建一个服务帐号,为该帐号分配 Secret Manager Secret Accessor 角色,并为该帐号创建凭证。
你应该会看到生成并下载到你机器上的 JSON 文件,其中包含凭证,类似于以下内容:
{
"type": "service_account",
"project_id": "apisix-project",
"private_key_id": "f039bb20b2xxxxxxxxxb43cb7132axxxxxx1f165",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"client_email": "apisix-secret-manager@apisix-project.iam.gserviceaccount.com",
"client_id": "115458xxxxxxx68702206",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/apisix-secret-manager%40apisix-project.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
更新 APISIX 中的受信任证书
仅当你使用带有 SSL 验证的默认配置时,才需要本节中的步骤。如果你希望禁用 SSL 验证,请在 [下一步](#在 APISIX 中配置密钥) 中将 ssl_verify 设置为 false。
更新 配置文件 中 CA 证书的路径:
docker exec apisix-quickstart /bin/bash -c "echo '
apisix:
ssl:
ssl_trusted_certificate: /etc/ssl/certs/ca-certificates.crt
enable_control: true
control:
ip: "0.0.0.0"
port: 9092
deployment:
role: traditional
role_traditional:
config_provider: etcd
admin:
admin_key_required: false
allow_admin:
- 0.0.0.0/0
plugin_attr:
prometheus:
export_addr:
ip: 0.0.0.0
port: 9091
' > /usr/local/apisix/conf/config.yaml"
重新加载 APISIX 以使配置更改生效:
docker exec apisix-quickstart apisix reload
在 APISIX 中配置密钥
使用在 [上一步](#获取 GCP 访问凭证) 中获取的访问凭证,将 GCP Secret Manager 配置为 john 的密钥提供者:
curl "http://127.0.0.1:9180/apisix/admin/secrets/gcp/john" -X PUT -d '
{
"auth_config": {
// Annotate 1
"client_email": "apisix-secret-manager@apisix-project.iam.gserviceaccount.com",
// Annotate 2
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
// Annotate 3
"project_id": "apisix-project"
},
// Annotate 4
"ssl_verify": true
}'
❶ 替换为你的客户电子邮件。
❷ 替换为你的私钥。
❸ 替换为你的项目 ID。
❹ 启用 SSL 验证(默认)。
创建消费者及其凭证
创建消费者 john:
curl "http://127.0.0.1:9180/apisix/admin/consumers" -X PUT -d '
{
"username": "john"
}'
为消费者 john 配置 key-auth 凭证,以从密钥提供者获取密钥:
curl "http://127.0.0.1:9180/apisix/admin/consumers/john/credentials" -X PUT -d '
{
"id": "cred-john-key-auth",
"plugins": {
"key-auth": {
"key": "$secret://gcp/john/apisix-john-key-auth"
}
}
}'