跳到主要内容
版本:3.9.x

引用 AWS Secrets Manager 中的密钥

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

本教程演示了如何将 API7 企业版与 AWS Secrets Manager 集成,使你能够安全地存储和引用消费者凭证及插件配置。

下面是一个交互式演示,提供了将 API7 企业版与 AWS Secrets Manager 集成存储和检索 key-auth 密钥的动手实践。

前置条件

  1. 安装 API7 企业版
  2. 在你的网关组中至少有一个网关实例
  3. 拥有一个 AWS 帐户以访问 IAM 和 Secrets Manager 模块。

获取 IAM Access Key ID 和 Secret Access Key

获取 IAM 用户访问密钥 (Access Key ID) 和秘密访问密钥 (Secret Access Key),它们将在下一步中配置在 API7 企业版中,以便访问 AWS Secrets Manager。

备注

请确保为用户正确分配了适当的权限,以避免因权限不足而导致验证失败。

在网关组中添加密钥提供商

  1. 从侧边导航栏选择你的网关组下的 Secret 提供商,然后点击 新增 Secret 提供商
  2. 在弹出的对话框中,执行以下操作:
  • Secret 提供商 ID 字段中,输入 my-secrets-manager
  • Secret 管理服务 字段中,选择 AWS Secrets Manager
  • 选择你的 AWS Secrets Manager 服务的区域。例如,us-east-1
  • 上一步骤获取的访问密钥和秘密访问密钥填入 Access Key IDSecret Access Key 字段。
  • 点击 新增
  1. 复制 Secret 变量以供将来引用。所有密钥引用均由此生成,例如:$secret://aws/my-secrets-manager/$secret_name/$key

引用 SSL 证书的密钥

SSL 证书对象中的敏感字段 certificateprivate key 可以安全地存储在外部密钥管理器(例如 HashiCorp Vault 或 AWS Secret 管理服务)中,并在 API7 网关中引用。

在 AWS Secrets Manager 中创建密钥

在本节中,你将创建一个密钥(secret)来存储消费者 alice 的凭证。你也可以参考 Create an AWS Secrets Manager secret

  1. 在控制台中导航到 AWS Secrets Manager 并存储一个新的密钥。选择 其他类型的密钥 作为密钥类型,并在键值对中输入键名 crt 及其 base64 值。
  2. 在下一步中,将密钥名称配置为 ssl,你可以选择添加描述。
  3. 点击 下一步 以查看其余信息并完成密钥创建。你应该可以在 AWS Secrets Manager 中看到列出的该密钥。
  4. 重复上述步骤创建另一个键值对:private-key: {private key base64}

添加 SSL 证书

  1. 从侧边导航栏选择你的网关组下的 证书,进入 SSL 证书选项卡。
  2. 点击 新增 SSL 证书
  3. 在弹出的对话框中,执行以下操作:
  • 名称字段中,输入 Test SSL Certificate
  • 证书字段中,输入 $secret://aws/my-secrets-manager/ssl/crt
  • 私钥字段中,输入 $secret://aws/my-secrets-manager/ssl/private-key
  • 点击 新增
备注

所有的密钥引用均由密钥提供商的 Secret 变量生成:$secret://aws/my-secrets-manager/$secret_name/$key

  1. 想要全面使用和验证 SSL 证书,请参阅在客户端与 API7 网关之间配置 mTLS

引用密钥创建消费者凭证

消费者凭证中的以下敏感字段可存储在外部密钥管理器(HashiCorp Vault、AWS Secrets Manager 等)中并在 API7 企业版中引用:

  • 密钥认证(Key Authentication)凭证中的 key
  • 基本认证(Basic Authentication)凭证中的 password
  • JWT 认证凭证中的 secretpublic key
  • HMAC 认证凭证中的 secret_key

添加消费者

  1. 从侧边导航栏选择你的网关组下的 消费者
  2. 点击 新增消费者
  3. 在弹出的对话框中,执行以下操作:
  • 名称 字段中,输入 Alice
  • 点击 新增

在 AWS Secrets Manager 中创建密钥

在本节中,你将创建一个密钥来存储消费者 alice 的凭证。你也可以参考 Create an AWS Secrets Manager secret

  1. 在控制台中导航到 AWS Secrets Manager 并存储一个新的密钥。选择 其他类型的密钥 作为密钥类型,并在键值对中输入键名 alice-key-auth 及其对应的值 alice-key
  2. 在下一步中,将密钥名称配置为 alice-credentials,你可以选择添加描述。
  3. 点击 下一步 以查看其余信息并完成密钥创建。你应该可以在 AWS Secrets Manager 中看到列出的该密钥。
  4. 重复上述步骤为其他消费者凭证创建更多键值对:
  • 对于基本认证(Basic Authentication)凭证:password: alice-password
  • 对于 JWT 认证凭证:secret: alice-secret
  • 对于 HMAC 认证凭证:secret-key: alice-secret-key

添加密钥认证(Key Authentication)凭证

  1. 从侧边导航栏选择你的网关组下的 消费者
  2. 选择你的目标消费者,例如 Alice
  3. 认证凭据选项卡下,点击 新增 Key Authentication 凭据
  4. 在弹出的对话框中,执行以下操作:
  • 名称字段中,输入 primary-key
  • Key字段中,输入 $secret://aws/my-secrets-manager/alice-credentials/alice-key-auth
  • 点击 新增

添加基本认证(Basic Authentication)凭证

  1. 从侧边导航栏选择你的网关组下的 消费者
  2. 选择你的目标消费者,例如 Alice
  3. 认证凭据选项卡下,点击 Basic Authentication选项卡,然后点击 A新增 Basic Authentication 凭据
  4. 在弹出的对话框中,执行以下操作:
  • 名称字段中,输入 primary-basic
  • 用户名字段中,输入 alice
  • 密码字段中,输入 $secret://aws/my-secrets-manager/alice-credentials/password
  • 点击 新增

添加 JWT 认证凭证

  1. 从侧边导航栏选择你的网关组下的 消费者
  2. 选择你的目标消费者,例如 Alice
  3. 认证凭据选项卡下,点击 JWT 选项卡,然后点击 新增 JWT 凭据
  4. 在弹出的对话框中,执行以下操作:
  • 名称字段中,输入 primary-jwt
  • Key字段中,输入 alice-key
  • 算法字段中,选择 HS256
  • 密钥字段中,输入 $secret://aws/my-secrets-manager/alice-credentials/secret
  • 点击 新增

添加 HMAC 认证凭证

  1. 从侧边导航栏选择你的网关组下的 消费者
  2. 选择你的目标消费者,例如 Alice
  3. 认证凭据 选项卡下,点击 HMAC Authentication 选项卡,然后点击 新增 HMAC Authentication 凭据
  4. 在弹出的对话框中,执行以下操作:
  • 名称 字段中,输入 primary-hmac
  • Key ID 字段中,输入 alice-keyid
  • Secret Key 字段中,输入 $secret://aws/my-secrets-manager/alice-credentials/secret-key
  • 点击 新增

验证

请参阅为 API 启用密钥认证的相关说明,并在服务级别启用 Key Auth 插件

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

curl -i "http://127.0.0.1:9080/ip" -H 'apikey: alice-key'

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

备注

alice-key 是你在 AWS Secrets Manager 上创建的键值对的值(value),而不是键的名称。

  • 对于基本认证凭证,验证时使用:password: alice-password
  • 对于 JWT 认证凭证,验证时使用:secret: alice-secret
  • 对于 HMAC 认证凭证,验证时使用:secret-key: alice-secret-key

引用密钥来启用插件

插件配置中的以下敏感字段可存储在外部密钥管理器(HashiCorp Vault、AWS Secrets Manager 等)中并在 API7 网关中引用:

插件字段
Limit Countredis_username, redis_password
Authz-Casdoorclient_id, client_secret
Wolf RBACappid
LDAP Authenticationuser_dn

本节以配置 limit-count 插件为例进行演示。

创建密钥

在 AWS Secrets Manager 中,在密钥名称 redis 下创建一个使用键值对 username:api7password:redis-api7 的密钥。

配置 limit-count 插件

有关在何处以及如何启用 limit-count 插件的信息,请参阅对 API 应用限流

将以下配置添加到 JSON 编辑器中:

{
"count": 3,
"time_window": 60,
"key_type": "var",
"rejected_code": 429,
"rejected_msg": "Too many requests",
"key": "remote_addr",
"policy": "redis",
"redis_host": "127.0.0.1",
"redis_port": 6379,
"redis_username": "$secret://aws/my-secrets-manager/redis/username",
"redis_password": "$secret://aws/my-secrets-manager/redis/password",
"redis_database": 1,
"redis_timeout": 1001,
"allow_degradation": false,
"show_limit_quota_header": true
}

额外资源