跳到主要内容

在 AWS Secrets Manager 中管理密钥

AWS Secrets Manager 是一项完全托管的服务,你可以将其与 APISIX 集成,以安全地存储、管理和检索敏感信息,如 API 密钥、密码和其他类型的凭证。它允许自动轮换密钥,降低凭证随时间推移而暴露的风险。

本指南将向你展示如何使用 AWS Secrets Manager 管理 key-auth 插件的用户凭证,以及如何在 APISIX 中检索密钥。

前置条件

在 AWS Secrets Manager 中创建密钥

在本节中,你将创建一个密钥来存储用户 johnkey-auth 身份验证密钥。

导航到控制台中的 AWS Secrets Manager 并创建一个密钥。选择 Other type of secret 作为密钥类型,并在键值对中输入密钥名称 john-key-auth 和凭证 john-key

在 AWS 中创建密钥步骤 1

在下一步中,将密钥名称配置为 apisix-secrets,并可选择添加描述:

在 AWS 中创建密钥步骤 2

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

在 AWS 中完成密钥创建

获取 IAM Access Key ID 和 Secret Access Key

获取 IAM 用户访问密钥 ID 和秘密访问密钥,将在下一步中在 APISIX 中配置它们以访问 AWS Secrets Manager。

或者,你也可以创建一个 临时安全凭证,并在 APISIX 密钥的 session_token 中配置该凭证。请参阅 Admin API 以获取配置参考。

在 APISIX 中配置密钥

将 AWS Secrets Manager 配置为 john 的密钥提供者,并指定 AWS 区域、访问密钥 ID 和秘密访问密钥:

curl "http://127.0.0.1:9180/apisix/admin/secrets/aws/john" -X PUT -d '
{
"region": "ap-southeast-2",
"access_key_id": "AKIARK7HKSJVWAIKFOXR",
"secret_access_key": "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"
}'

创建消费者及其凭证

创建消费者 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://aws/john/apisix-secrets/john-key-auth"
}
}
}'

创建带有身份验证的路由

创建一个示例路由并启用 key-auth 插件:

curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{
"id": "key-auth-route",
"uri": "/anything",
"plugins": {
"key-auth": {}
},
"upstream" : {
"nodes": {
"httpbin.org": 1
}
}
}'

验证

使用有效凭证向路由发送请求:

curl -i "http://127.0.0.1:9080/anything" -H 'apikey: john-key'

你应该收到 HTTP/1.1 200 OK 响应。

提示

如果你收到 401 Unauthorized 响应,并在错误日志中看到 unable to get local issuer certificate 错误,请手动将证书路径添加到配置文件中:

conf/config.yaml
apisix:
ssl:
ssl_trusted_certificate: /etc/ssl/certs/ca-certificates.crt

然后 重新加载 APISIX 以使配置更改生效:

docker exec apisix-quickstart apisix reload

使用无效凭证向路由发送请求:

curl -i "http://127.0.0.1:9080/anything" -H 'apikey: wrong-key'

你应该收到 HTTP/1.1 401 Unauthorized 响应。

下一步

你现在已经了解了如何配置 APISIX 以从 AWS Secrets Manager 获取密钥。

除了 AWS Secrets Manager,APISIX 还支持与 HashiCorp VaultGCP Secret Manager 集成进行密钥管理。