跳到主要内容
版本:3.2.16.4

引用 AWS Secrets Manager 中的密钥

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

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

前提条件

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

获取 IAM 访问密钥 ID 和 Secret 访问密钥

获取 IAM 用户访问密钥和 Secret 访问密钥,这些密钥将在下一步中配置到 API7 企业版中以访问 AWS Secrets Manager。

备注

请确保相应的权限已正确分配给用户,从而避免因权限不足导致验证失败的情况。

在网关组中新增 Secret 提供商

  1. 从侧边栏选择网关组的Secret 提供商,然后点击新增 Secret 提供商
  2. 在对话框中,执行以下操作:
    • Secret 提供商 ID ,输入 my-secrets-manager
    • Secret 管理服务,选择 AWS Secrets Manager
    • 区域,选择你的 AWS Secrets Manager 服务所在的区域。例如,us-east-1
    • 使用上一步中获取的访问密钥和秘密访问密钥填写访问密钥 IDSecret 访问密钥字段。
    • 点击新增

引用密钥以创建消费者凭据

消费者凭据中的以下敏感字段可以存储在外部Secret 管理服务(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 的消费者凭据。

  1. 在控制台中导航到 AWS Secrets Manager 并创建一个密钥。选择 Other type of secret 作为密钥类型,并在键值对中输入密钥名称 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 提供商引用,然后输入 $secret://aws/my-secrets-manager/alice-credentias/alice-key-auth
    • 点击新增
备注

所有密钥引用都以 $secret:// 开头。awsSecret 提供商my-secrets-managerSecret 提供商 IDalice-credentials 是在 AWS Secrets Manager 控制台上 Secret 的名称,alice-key-auth 是在 AWS Secrets Manager 控制台中 Key 的名称。

新增 Basic Authentication 凭据

  1. 从侧边栏选择网关组的消费者
  2. 选择你的目标消费者,例如,Alice
  3. 凭据选项卡下,点击Basic Authentication选项卡,然后点击新增Basic Authentication凭据
  4. 在对话框中,执行以下操作:
    • 名称,输入 primary-basic
    • 用户名,输入 alice
    • 密码,选择从Secret 提供商引用,然后输入 $secret://aws/my-secrets-manager/alice-credentias/password
    • 点击新增
备注

所有密钥引用都以 $secret:// 开头。awsSecret 管理服务my-secrets-managerSecret 提供商 ID

新增 JWT 认证凭据

  1. 从侧边栏选择网关组的消费者
  2. 选择你的目标消费者,例如,Alice
  3. 凭据选项卡下,点击JWT选项卡,然后点击新增 JWT 凭据
  4. 在对话框中,执行以下操作:
    • 名称,输入 primary-jwt
    • Key,输入 alice-key
    • 算法,选择 HS256
    • Secret,选择从Secret 提供商引用,然后输入 $secret://aws/my-secrets-manager/alice-credentias/secret
    • 点击新增
备注

所有密钥引用都以 $secret:// 开头。aws 是 Secret 提供商的Secret 管理服务my-secrets-managerSecret 提供商 ID

新增 HMAC 认证凭据

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

所有密钥引用都以 $secret:// 开头。aws 是Secret 提供商的Secret 管理服务my-secrets-managerSecret 提供商 ID

验证

有关说明,请参阅为 API 启用 Key Authentication,并在服务级别启用 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 中创建的键/值对中的,而不是健的名称。

  • Basic-auth 凭证,请使用:password: alice-password 进行验证。
  • JWT-auth 凭证,请使用:secret: alice-secret 进行验证。
  • HMAC-auth 凭证,请使用:secret-key: alice-secret-key 进行验证。

引用密钥以启用插件

插件配置中的以下敏感字段可以存储在外部 Secret 管理服务(HashiCorp Vault、AWS Secrets Manager 等)中,并在 API7 企业版中引用:

插件字段
Limit Countredis_usernameredis_password
Authz-Casdoorclient_idclient_secret
Wolf RBACappid
LDAP 认证user_dn

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

创建密钥

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

配置 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
}
备注

所有密钥引用都以 $secret:// 开头。aws 是 Secret 提供商的Secret 管理服务my-secrets-managerSecret 提供商 ID

相关阅读