启用身份验证
Alluxio 提供了灵活的机制来验证用户和服务,确保只有授权的客户端才能访问您的数据。本指南涵盖了 Alluxio 中身份验证的核心概念,并提供了详细的配置说明。
支持以下接口的身份验证:
S3 API
Hadoop 文件系统 API
管理 REST API(通过网关)
核心概念:用户身份
无论使用何种身份验证方法,Alluxio 都通过三个核心属性来识别每个用户。这些属性从用户的凭据(如令牌)中提取,并由授权引擎(例如 OPA、Ranger)用于强制执行访问策略。
名称:用户的唯一标识符。
组:用户所属的一个或多个组。
角色:分配给用户的一个或多个角色。
使用 OIDC 进行身份验证
OpenID Connect (OIDC) 是保护集群的推荐方法。它允许 Alluxio 与外部身份提供商 (IdP) 集成,以验证客户端提供的 JSON Web 令牌 (JWT)。
OIDC 令牌验证
当 Alluxio 服务收到 OIDC 令牌时,它会执行多项验证检查:
令牌签名:根据您的 IdP 提供的 JSON Web 密钥集 (JWKS) 验证令牌的签名。
令牌时间戳:检查
iat
(颁发于)和exp
(过期)时间戳,以确保令牌当前有效。还可以选择性地检查nbf
(不早于)时间戳。租户 ID:如果已配置,则验证
tid
(租户 ID)声明,以确保令牌属于正确的租户。受众:如果已配置,则验证
aud
(受众)声明,以确保令牌是为 Alluxio 颁发的。
OIDC 配置
需要为每个需要身份验证的 Alluxio 组件单独配置。
1. 网关身份验证
在您的 alluxio-cluster.yaml
中配置网关以保护管理 REST API。
global:
authentication:
enabled: true
type: oidc # 目前仅支持 "oidc"
oidc:
# 选项 1:使用远程 JWKS 端点
jwksUri: https://your-oidc-provider.com/.well-known/jwks.json
# 选项 2:使用来自 ConfigMap 的本地 JWKS 文件
# jwksConfigMapName: "jwks-configmap"
# jwksFilename: "jwks.json"
# --- 令牌验证声明 ---
aud: "your-audience"
tid: "your-tenant-id"
nbfCheck: false
# --- 用户属性映射 ---
userFieldName: "sub"
roleFieldName: "role"
groupFieldName: "scp"
2. S3 API 身份验证
要保护 worker 上的 S3 API,请将以下内容添加到 alluxio-cluster.yaml
的 properties
部分。
properties:
# --- 启用 S3 API 身份验证 ---
alluxio.worker.s3.api.enabled: "true"
alluxio.worker.s3.authentication.enabled: "true"
alluxio.worker.s3.authenticator.classname: "alluxio.s3.auth.TokenAuthenticator"
# --- OIDC 配置 ---
# 选项 1:使用远程 JWKS 端点
alluxio.security.authentication.token.external.jwksaddr: "https://your-oidc-provider.com/.well-known/jwks.json"
# 选项 2:使用挂载文件中的本地 JWKS 文件
#alluxio.security.authentication.token.external.jwksaddr=file:///path/to/jwks.json
# --- 用户属性映射 ---
alluxio.security.authentication.token.assume.user.field: "sub"
alluxio.security.authentication.token.assume.group.field: "scp"
alluxio.security.authentication.token.assume.role.field: "role"
# --- 可选的令牌验证声明 ---
# alluxio.security.authentication.token.aud: "your-audience"
# alluxio.security.authentication.token.tid: "your-tenant-id"
# alluxio.security.authentication.token.nbf.check: "true"
3. Hadoop 文件系统客户端身份验证
要配置使用 Hadoop 文件系统 API 的客户端(例如 Spark、Presto),请将以下内容添加到客户端的 alluxio-site.properties
文件中。
# --- 为客户端启用 OIDC 身份验证 ---
alluxio.security.client.authentication.type=OIDC
# --- OIDC 配置 ---
# 选项 1:使用远程 JWKS 端点
alluxio.security.authentication.token.external.jwksaddr=https://your-oidc-provider.com/.well-known/jwks.json
# 选项 2:使用本地 JWKS 文件
#alluxio.security.authentication.token.external.jwksaddr=file:///path/to/jwks.json
# --- 用户属性映射 ---
alluxio.security.authentication.token.assume.user.field=sub
alluxio.security.authentication.token.assume.group.field=scp
alluxio.security.authentication.token.assume.role.field=role
# --- 可选的令牌验证声明 ---
# alluxio.security.authentication.token.aud=your-audience
# alluxio.security.authentication.token.tid=your-tenant-id
# alluxio.security.authentication.token.nbf.check=true
向客户端提供令牌
客户端应用程序必须提供 OIDC 令牌。这可以通过设置 ALLUXIO_TOKEN
环境变量来完成:
export ALLUXIO_TOKEN=<Your_OIDC_TOKEN>
或者,像 Spark 这样的框架可以通过其配置传递令牌:
SparkSession.builder.config("spark.hadoop.ALLUXIO_TOKEN", "<YOUR_OIDC_TOKEN>")
Last updated