在 Dapr 上启用 token 认证
默认情况下,Dapr 依靠网络边界来限制对其公共 API 的访问。 如果你打算将 Dapr API 暴露在网络边界之外,或者如果您的 deployment 需要额外级别的安全性,那么请考虑开启 Dapr API 的令牌认证。 这将使得 Dapr 要求每个入站 gRPC 和 HTTP API 请求都需要包含认证令牌,然后请求才能放行。
Dapr 使用 JWT 令牌进行 API 身份验证。
为了配置 API 身份验证,需要先使用任意 JWT 令牌兼容工具(如) 和 secret 来生成您的令牌。
在 Dapr 上配置 token 认证
令牌认证配置在 Kubernetes 和 自托管 Dapr deployments 下稍有不同:
如果需要更新已配置的令牌,只需将 DAPR_API_TOKEN
环境变量设置为新值,然后重新启动 daprd
进程。
Kubernetes
在 Kubernetes deployment 里,Dapr 借助 Kubernetes secrets store 保存 JWT 令牌。 配置 Dapr API 认证,需要创建新的 secret:
kubectl create secret generic dapr-api-token --from-literal=token=<token>
指定 Dapr 使用该密钥来保护其公有 API,需要在你的 Deployment template spec 中添加 annotation:
annotations:
dapr.io/enabled: "true"
当 Deployment 部署后,Dapr sidecar 注入器会自动创建一个 secret,并将实际值注入到 DAPR_API_TOKEN
环境变量中。
如果需要更新已配置的令牌,只需将环境变量 DAPR_API_TOKEN
设置为新值,然后重新启动 daprd
进程。
Kubernetes
然后将其 apply 到每个命名空间:
kubectl apply --file token-secret.yaml --namespace <namespace-name>
为了让 Dapr 开始使用新令牌,需要对你的每个 deployment 进行滚动升级:
将 JWT 令牌添加到客户端 API 调用
在 Dapr 中配置令牌认证后,所有客户端调用 Dapr API 的都必须要把 JWT 令牌附加到每个请求:
如果是 HTTP ,那么 Dapr 将检查在 HTTP 请求头中否存在 参数 :
gRPC
当使用 gRPC 协议时,Dapr 将检查入站 gRPC 请求的元数据(metadata)上的 API 令牌 :
dapr-api-token[0].
containers:
- name: mycontainer
image: myregistry/myapp
envFrom:
name: dapr-api-token
自托管
在自托管模式下,您可以将令牌设置为应用程序的环境变量 :
相关链接
- Learn about
- Learn HowTo authenticate requests from Dapr using token authentication