Nacos 权限认证的妙用——控制配置服务的访问权限
2023-10-21 11:07:03
默认情况下获取 Nacos 中的配置是不需要权限认证的,这在绝大多数仅内网可访问的场景下是可以接受的。但当我们需要将 Nacos 部署在公网上或者需要对配置服务的访问进行更精细的控制时,就需要启用权限认证功能了。
Nacos 支持多种类型的权限认证机制,包括:
- 基于 HTTP Basic 认证的权限认证
- 基于 Token 的权限认证
- 基于 OIDC(OpenID Connect)的权限认证
本文将分别介绍这三种权限认证机制的配置和使用。
基于 HTTP Basic 认证的权限认证
HTTP Basic 认证是一种最简单的权限认证机制,只需要在请求头中携带用户名和密码即可。
要在 Nacos 中启用基于 HTTP Basic 认证的权限认证,需要在配置文件中添加如下配置项:
nacos:
auth:
enabled: true
type: http_basic
添加上述配置后,Nacos 会在启动时生成一个默认的用户名和密码,并将其存储在日志文件中。
使用方法:
在请求 Nacos API 时,需要在请求头中携带 Authorization
字段,其值为 Basic
,后跟用户名和密码的 Base64 编码字符串。
例如:
curl -H "Authorization: Basic YWRtaW46cGFzc3dvcmQ=" http://localhost:8848/nacos/v1/console/namespaces
基于 Token 的权限认证
基于 Token 的权限认证是一种更加灵活的权限认证机制,它允许管理员创建和管理不同的 Token,并将其分配给不同的用户或应用。
要在 Nacos 中启用基于 Token 的权限认证,需要在配置文件中添加如下配置项:
nacos:
auth:
enabled: true
type: token
添加上述配置后,Nacos 会在启动时生成一个默认的 Token,并将其存储在日志文件中。
使用方法:
在请求 Nacos API 时,需要在请求头中携带 Authorization
字段,其值为 Bearer
,后跟 Token 字符串。
例如:
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" http://localhost:8848/nacos/v1/console/namespaces
基于 OIDC(OpenID Connect)的权限认证
基于 OIDC(OpenID Connect)的权限认证是一种更加安全的权限认证机制,它允许管理员将 Nacos 与第三方身份提供商集成,并通过第三方身份提供商来验证用户的身份。
要在 Nacos 中启用基于 OIDC(OpenID Connect)的权限认证,需要在配置文件中添加如下配置项:
nacos:
auth:
enabled: true
type: oidc
oidc:
discoveryUrl: https://example.com/.well-known/openid-configuration
clientId: my-client-id
clientSecret: my-client-secret
添加上述配置后,Nacos 会在启动时生成一个默认的 OIDC(OpenID Connect)配置,并将其存储在日志文件中。
使用方法:
在请求 Nacos API 时,需要在请求头中携带 Authorization
字段,其值为 Bearer
,后跟 OIDC(OpenID Connect) Token 字符串。
例如:
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" http://localhost:8848/nacos/v1/console/namespaces
总结
Nacos 支持多种类型的权限认证机制,管理员可以根据自己的需要选择合适的权限认证机制。
启用权限认证后,可以有效地提高 Nacos 的安全性,防止未经授权的用户访问 Nacos 的配置数据。
案例演示:
考虑这样一个场景:公司有一个名为 production
的环境,其中有一个名为 nacos
的 Nacos 服务,该服务存储着各种生产环境的配置信息。
为了提高安全性,公司决定对 nacos
服务启用权限认证。
他们选择使用基于 Token 的权限认证机制,并创建了两个 Token:
token1
:授予开发人员访问production
环境的权限token2
:授予运维人员访问production
环境的权限
当开发人员需要访问 production
环境的配置信息时,他们需要在请求头中携带 Authorization
字段,其值为 Bearer token1
。
当运维人员需要访问 production
环境的配置信息时,他们需要在请求头中携带 Authorization
字段,其值为 Bearer token2
。
这样,公司就有效地控制了对 production
环境配置信息的访问权限。