適用於 MinIO Operator 的安全權杖服務 (STS)
概觀
Operator 版本新增:v5.0.0
MinIO Operator 支援一組 API 呼叫,允許應用程式取得 MinIO 租戶的 STS 憑證。
適用於 MinIO Operator 的 STS 的好處包括
STS 憑證 允許應用程式存取 MinIO 租戶上的物件,而無需在租戶上為應用程式建立憑證。
允許應用程式使用 Kubernetes 原生驗證機制存取 MinIO 租戶中的物件。
服務帳戶或服務帳戶權杖是 Kubernetes 中基於角色的存取控制 (RBAC) 驗證的核心概念。
為 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 功能
注意
對於 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 Tenant 上存在適合應用程式使用的政策或多個政策。
下一步會使用 YAML 文件,透過名為
PolicyBinding
的自訂資源,將一個或多個現有的 Tenant 政策對應至服務帳戶。為服務帳戶和政策繫結建立 YAML 資源
在 MinIO Tenant 中為應用程式建立要使用的服務帳戶。
如需 Kubernetes 中服務帳戶的詳細資訊,請參閱Kubernetes 文件。
在目標 Tenant 的命名空間中建立政策繫結,將應用程式連結至 MinIO Tenant 的一或多個政策。
套用 YAML 檔案,在部署上建立資源
kubectl apply -k path/to/yaml/file.yaml
使用支援
AssumeRoleWithWebIdentity
類似行為的 SDK,從您的應用程式傳送呼叫至部署STS API 預期服務帳戶的 JWT 存在於 Kubernetes 環境中。當連結至 Pod 時,例如透過部署的
.spec.spec.serviceAccountName
欄位,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。
範例資源
服務帳戶
服務帳戶是Kubernetes 資源類型,允許外部應用程式與 Kubernetes 部署互動。當連結至 Pod 時,例如透過部署的 .spec.spec.serviceAccountName
欄位,Kubernetes 會從已知位置掛載服務帳戶的 JWT,例如 /var/run/secrets/kubernetes.io/serviceaccount/token
。
以下 yaml 會為 sts-client
命名空間建立名為 stsclient-sa
的服務帳戶。
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
是 MinIO 特有的 Kubernetes 自訂資源類型,可將應用程式
連結至一組政策。
在政策所屬的 Tenant 命名空間中建立政策繫結。
就 MinIO Operator 而言,應用程式是指任何透過特定服務帳戶和 Tenant 命名空間識別的請求資源。PolicyBinding
資源會將應用程式連結至該命名空間中 Tenant 的一或多個政策。
以下 yaml 會建立一個 PolicyBinding
,將使用 stsclient-sa
服務帳戶的應用程式(存在於 sts-client
命名空間中)連結至位於 minio-tenant-1
命名空間中目標 Tenant 的 test-bucket-rw
政策。yaml 定義中授予的政策必須已存在於 MinIO Tenant 上。
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