文件

適用於 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 的說明。

STS 授權如何在 Kubernetes 中運作

應用程式可以使用包含Kubernetes 服務帳戶AssumeRoleWithWebIdentity 呼叫的 JWT,以將暫時憑證的要求傳送給 MinIO Operator。當連結到 Pod 時(例如透過部署的 .spec.spec.serviceAccountName 欄位),Kubernetes 會從已知的位置(例如 /var/run/secrets/kubernetes.io/serviceaccount/token)掛載服務帳戶的 JWT。Pod 可以從該位置存取這些服務帳戶。

Operator 會檢查要求的有效性,擷取應用程式的原則,從租戶取得憑證,然後將憑證傳回應用程式。應用程式使用發出的憑證來處理租戶上的物件儲存。

A diagram showing STS token process flow on a Kubernetes MinIO deployment between the requesting application, MinIO Operator, Kubernetes API, PolicyBinding custom resource definition, and the MinIO tenant.

完整的流程包括下列步驟

  1. 應用程式將包含租戶命名空間和要使用的服務帳戶的 AssumeRoleWithWebidentity API 要求 傳送給 MinIO Operator。

  2. MinIO Operator 使用 Kubernetes API 來檢查與應用程式請求中的服務帳戶相關聯的 JSON Web Token (JWT) 是否有效。

  3. Kubernetes API 會回傳其有效性檢查的結果。

  4. MinIO Operator 會檢查是否有符合應用程式的政策繫結

  5. PolicyBinding CRD 會回傳符合請求的政策或多個政策(如果有的話)。

  6. MinIO Operator 會將應用程式的合併政策資訊傳送至 MinIO Tenant。

  7. Tenant 會為請求建立符合政策或多個政策的臨時憑證,並將其回傳給 MinIO Operator。

  8. MinIO Operator 會將臨時憑證轉發回應用程式。

  9. 應用程式會使用憑證將物件儲存呼叫傳送至 MinIO Tenant。

需求

MinIO Operator 的 STS 需要以下條件

  • MinIO Operator v5.0.0 或更新版本。

  • 部署必須設定 TLS

  • (Operator v5.0.0 - 5.0.10 需要)OPERATOR_STS_ENABLED 環境變數設定為 on

程序

  1. 為部署啟用 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,不過此值在安裝期間可能會變更。

  2. 確保 MinIO Tenant 上存在適合應用程式使用的政策或多個政策。

    下一步會使用 YAML 文件,透過名為 PolicyBinding 的自訂資源,將一個或多個現有的 Tenant 政策對應至服務帳戶。

  3. 為服務帳戶和政策繫結建立 YAML 資源

    • 在 MinIO Tenant 中為應用程式建立要使用的服務帳戶

      如需 Kubernetes 中服務帳戶的詳細資訊,請參閱Kubernetes 文件

    • 在目標 Tenant 的命名空間中建立政策繫結,將應用程式連結至 MinIO Tenant 的一或多個政策。

  4. 套用 YAML 檔案,在部署上建立資源

    kubectl apply -k path/to/yaml/file.yaml
    
  5. 使用支援 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

參考資料