MinIO Operator 的安全令牌服务 (STS)
概述
Operator 版本新增功能: v5.0.0
MinIO Operator 支持一组 API 调用,允许应用程序获取 MinIO 租户的 STS 凭证。
MinIO Operator 使用 STS 的优势包括
STS 凭证 允许应用程序访问 MinIO 租户上的对象,而无需在租户上为应用程序创建凭证。
允许应用程序使用 Kubernetes 原生身份验证机制访问 MinIO 租户中的对象。
服务账户或服务账户令牌是 基于角色的访问控制 (RBAC) 身份验证 在 Kubernetes 中的核心概念。
为 MinIO Operator 实现 STS 允许您通过使用租户自定义资源定义 (CRD) 和 MinIO PolicyBinding CRD 来利用基础设施即代码原则和配置。
重要
从 Operator v5.0.11 开始,默认情况下 启用 STS。
早期版本的 Operator 默认情况下 禁用 STS。要在 Operator v5.0.10 或更早版本中使用 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 功能
注意
对于 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
的自定义资源将一个或多个现有租户策略映射到服务帐户。创建服务帐户和策略绑定的 YAML 资源
在 MinIO 租户中创建服务帐户供应用程序使用。
有关 Kubernetes 中服务帐户的更多信息,请参阅Kubernetes 文档。
在目标租户的命名空间中创建策略绑定,将应用程序链接到一个或多个 MinIO 租户的策略。
应用 YAML 文件以在部署上创建资源
kubectl apply -k path/to/yaml/file.yaml
使用支持
AssumeRoleWithWebIdentity
行为的 SDK 从应用程序发送调用到部署STS API 期望 Kubernetes 环境中存在服务帐户的 JWT。当链接到 Pod(例如通过部署的
.spec.spec.serviceAccountName
字段)时,Kubernetes 会从众所周知的位置(例如/var/run/secrets/kubernetes.io/serviceaccount/token
)挂载服务帐户的 JWT。或者,您可以将令牌路径定义为环境变量
AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/kubernetes.io/serviceaccount/token
以下 MinIO SDK 支持
AssumeRoleRoleWithWebIdentity
有关使用 SDK 承担角色的示例,请参阅GitHub。
示例资源
服务帐户
服务帐户是Kubernetes 资源类型,允许外部应用程序与 Kubernetes 部署进行交互。当链接到 Pod(例如通过部署的 .spec.spec.serviceAccountName
字段)时,Kubernetes 会从众所周知的位置(例如 /var/run/secrets/kubernetes.io/serviceaccount/token
)挂载服务帐户的 JWT。
以下 yaml 创建了一个名为 stsclient-sa
的服务帐户,用于 sts-client
命名空间。
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.
策略绑定
PolicyBinding
是 Kubernetes 的 MinIO 特定自定义资源类型,用于将应用程序
链接到一组策略。
在租户所在的命名空间中创建策略绑定。
就 MinIO Operator 而言,应用程序是任何使用特定服务帐户和租户命名空间进行身份识别的请求资源。PolicyBinding
资源将应用程序链接到该命名空间上租户的一个或多个策略。
以下 yaml 创建了一个 PolicyBinding
,将使用位于 sts-client
命名空间中的服务帐户 stsclient-sa
的应用程序链接到位于 minio-tenant-1
命名空间中的目标租户中的策略 test-bucket-rw
。yaml 定义中授予的策略**必须**已存在于 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