MinIO Operator 的安全令牌服务 (STS)
概述
Operator 版本新增功能:v5.0.0
MinIO Operator 支持一组 API 调用,允许应用程序获取 MinIO Tenant 的 STS 凭据。
STS 对 MinIO Operator 的优势包括:
STS凭据允许应用程序访问 MinIO 租户中的对象,而无需在租户上为应用程序创建凭据。
允许应用程序使用 Kubernetes 原生认证机制访问 MinIO 租户中的对象。
Service Accounts 或 Service Account Tokens 是 Kubernetes 的核心概念之一基于角色的访问控制 (RBAC) 认证在 Kubernetes 中。
为 MinIO Operator 实施 STS 允许您通过使用租户自定义资源定义(CRD)和 MinIO PolicyBinding CRD 来利用基础设施即代码原则和配置。
重要
从 Operator v5.0.11 开始,STS 是已启用默认情况下。
先前版本的 Operator 从 STS 开始已禁用默认情况下。 要在 v5.0.10 或更早版本的 Operator 中使用 STS,您必须首先显式启用它。
本页面的程序包含在 MinIO Operator 中启用 STS API 的说明。
需求
MinIO Operator 的 STS 需要满足以下要求:
MinIO Operator v5.0.0 或更高版本。
部署必须有TLS 已配置.
(适用于 Operator v5.0.0 - 5.0.10 版本)
OPERATOR_STS_ENABLED环境变量设置为on.
过程
为部署启用 STS 功能
Note
此步骤对于 Operator 5.0.11 或更高版本是可选的。
kubectl -n minio-operator set env deployment/minio-operator OPERATOR_STS_ENABLED=on
替换
minio-operator使用您的部署命名空间。替换
deployment/minio-operator使用您的部署的 MinIO Operator 的值。您可以通过运行以下命令找到部署值:
kubectl get deployments -n <namespace>, 您替换<namespace>MinIO Operator 的命名空间。 您的 MinIO Operator 命名空间通常是minio-operator不过这个值在安装过程中可能会改变。
确保适当的政策MinIO租户上存在供应用程序使用的策略
下一步使用YAML文档,通过名为
PolicyBinding.创建 Service Account 和 Policy Binding 的 YAML 资源:
创建服务账户在 MinIO 租户中供应用程序使用。
有关 Kubernetes 中服务账户的更多信息,请参阅Kubernetes 文档.
创建一个策略绑定在目标租户的命名空间中,将应用程序链接到一个或多个 MinIO 租户策略。
应用 YAML 文件以在部署中创建资源
kubectl apply -k path/to/yaml/file.yaml
使用支持该功能的SDK
AssumeRoleWithWebIdentity类似行为,从您的应用程序向部署发送调用STS API期望在Kubernetes环境中存在服务账户的JWT。 当关联到pod时,例如通过deployment的
.spec.spec.serviceAccountNamefield, Kubernetes 挂载一个JWT从已知位置(例如/var/run/secrets/kubernetes.io/serviceaccount/token.或者,您可以将令牌路径定义为环境变量:
AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/kubernetes.io/serviceaccount/token
以下 MinIO SDK 支持
AssumeRoleRoleWithWebIdentity:有关使用 SDK 承担角色的示例,请参阅GitHub.
示例资源
服务账户
Service Account 是一个Kubernetes 资源类型允许外部应用程序与 Kubernetes 部署进行交互。
当链接到 Pod 时,例如通过部署的.spec.spec.serviceAccountNamefield, Kubernetes 挂载一个JWT从已知位置(例如/var/run/secrets/kubernetes.io/serviceaccount/token.
以下 yaml 创建一个名为stsclient-sa对于sts-clientnamespace.
apiVersion: v1
kind: ServiceAccount
metadata:
namespace: sts-client # The namespace to add the service account to. Usually a tenant, but can be any namespace in the deployment.
name: stsclient-sa # The name to use for the service account.
策略绑定
A PolicyBinding是一个用于 Kubernetes 的 MinIO 特定自定义资源类型,用于关联一个application到一组策略。
在租户的命名空间中创建策略绑定。
对于 MinIO Operator 而言,应用程序是指任何与特定服务账户和租户命名空间相关联的请求资源。PolicyBinding资源将应用程序链接到该命名空间上租户的一个或多个策略。
下面的 yaml 创建了一个PolicyBinding使用该服务帐户的应用程序stsclient-sa存在于命名空间中的sts-client根据政策test-bucket-rw位于命名空间中的目标租户minio-tenant-1yaml定义中授予的策略必须已存在于 MinIO 租户中。
apiVersion: sts.min.io/v1alpha1
kind: PolicyBinding
metadata:
name: binding-1
namespace: minio-tenant-1 # The namespace of the tenant this binding is for
spec:
application:
namespace: sts-client # The namespace that contains the service account for the application
serviceaccount: stsclient-sa # The service account to use for the application
policies:
- test-bucket-rw # A policy that already exists in the tenant
# - test-bucket-policy-2 # Add as many policies as needed