文件

設定 MinIO 使用 OpenID 進行身份驗證

概觀

MinIO 支援使用與 OpenID Connect (OIDC) 相容的身份提供者 (IDP),例如 Okta、KeyCloak、Dex、Google 或 Facebook,來進行外部使用者身份管理。此頁面上的程序提供以下說明:

  • 為外部 OIDC 提供者設定 MinIO 叢集。

  • 使用 MinIO 主控台和 OIDC 憑證登入叢集。

  • 使用 MinIO AssumeRoleWithWebIdentity 安全權杖服務 (STS) API 來產生臨時憑證,供應用程式使用。

此程序適用於與 OIDC 相容的提供者。請參閱您選擇的 OIDC 提供者的文件,以取得有關身份驗證和 JWT 檢索的具體說明或程序。

先決條件

OpenID-Connect (OIDC) 相容的身份提供者

此程序假設存在現有的 OIDC 提供者,例如 Okta、KeyCloak、Dex、Google 或 Facebook。設定這些服務的說明不在本程序的範圍內。

確保每個打算與 MinIO 一起使用的使用者身份都設定了適當的宣告,以便 MinIO 可以將原則與通過身份驗證的使用者相關聯。沒有指定原則的 OpenID 使用者沒有權限存取 MinIO 叢集上的任何操作或資源。

MinIO 部署

此程序假設現有的 MinIO 叢集正在執行最新的穩定 MinIO 版本。有關新 MinIO 部署的更完整文件,請參閱安裝和部署 MinIO

此程序可能適用於舊版本的 MinIO。

安裝和設定 mc 以存取 MinIO 叢集

此程序使用mc來執行 MinIO 叢集上的操作。在具有網路存取叢集的機器上安裝 mc。有關下載和安裝 mc 的說明,請參閱 mc 安裝快速入門

此程序假設 MinIO 集群已配置 別名

程序

1) 設定 OpenID 設定

您可以使用環境變數伺服器執行階段設定來配置 OIDC 提供者。兩種方法都需要啟動/重新啟動 MinIO 部署才能應用變更。以下標籤分別提供所有必需和選用的環境變數和配置設定的快速參考。

MinIO 支援使用 環境變數 指定 OIDC 提供者設定。minio server 程序會在下次啟動時應用指定的設定。對於分散式部署,請在部署中的所有節點上一致地使用相同的值指定這些設定。

以下範例程式碼設定與外部身分管理 OIDC 提供者配置相關的所有環境變數。最小必需的變數是 MINIO_IDENTITY_OPENID_CONFIG_URL

export MINIO_IDENTITY_OPENID_CONFIG_URL="https://openid-provider.example.net/.well-known/openid-configuration"
export MINIO_IDENTITY_OPENID_CLIENT_ID="<string>"
export MINIO_IDENTITY_OPENID_CLIENT_SECRET="<string>"
export MINIO_IDENTITY_OPENID_CLAIM_NAME="<string>"
export MINIO_IDENTITY_OPENID_CLAIM_PREFIX="<string>"
export MINIO_IDENTITY_OPENID_SCOPES="<string>"
export MINIO_IDENTITY_OPENID_REDIRECT_URI="<string>"
export MINIO_IDENTITY_OPENID_COMMENT="<string>"

MINIO_IDENTITY_OPENID_CONFIG_URL 取代為 OIDC 提供者探索文件的 URL 端點。

有關這些變數的完整文件,請參閱OpenID 身分管理設定

MinIO 支援使用 配置 設定 指定 OIDC 提供者設定。minio server 程序會在下次啟動時應用指定的設定。對於分散式部署,mc admin config 命令會將配置應用於部署中的所有節點。

以下範例程式碼設定與外部身分管理 OIDC 提供者配置相關的所有配置設定。最小必需的設定是 identity_openid config_url

mc admin config set ALIAS/ identity_openid \
   config_url="https://openid-provider.example.net/.well-known/openid-configuration" \
   client_id="<string>" \
   client_secret="<string>" \
   claim_name="<string>" \
   claim_prefix="<string>" \
   scopes="<string>" \
   redirect_uri="<string>" \
   comment="<string>"

config_url 取代為 OIDC 提供者探索文件的 URL 端點。

有關這些設定的更完整文件,請參閱identity_openid

2) 重新啟動 MinIO 部署

您必須重新啟動 MinIO 部署才能應用配置變更。使用 mc admin service restart 命令重新啟動部署。

mc admin service restart ALIAS

ALIAS 取代為要重新啟動的部署的 別名

3) 使用 MinIO 主控台以 OIDC 憑證登入

MinIO 主控台支援向 OIDC 提供者進行驗證的完整工作流程,使用 MinIO AssumeRoleWithWebIdentity 安全性權杖服務 (STS) 端點產生臨時憑證,並將使用者登入 MinIO 部署。

RELEASE.2021-07-08T01-15-01Z 開始,MinIO 主控台已嵌入 MinIO 伺服器中。您可以透過開啟 MinIO 集群的根 URL 來存取主控台。例如,https://minio.example.net:9000

在主控台中,按一下 按鈕 以開始 OpenID 驗證流程。

登入後,您可以執行已驗證使用者被授權的任何動作。

您也可以為必須在 MinIO 上執行操作的支援應用程式建立存取金鑰。存取金鑰是繼承其父使用者權限的長期憑證。父使用者可以在建立服務帳戶時進一步限制這些權限。

4) 使用 OIDC 憑證產生與 S3 相容的臨時憑證

MinIO 要求用戶端使用 AWS Signature Version 4 協定進行驗證,並支援已棄用的 Signature Version 2 協定。具體而言,用戶端必須出示有效的存取金鑰和秘密金鑰才能存取任何 S3 或 MinIO 管理 API,例如 PUTGETDELETE 操作。

應用程式可以使用 AssumeRoleWithWebIdentity 安全性權杖服務 (STS) API 端點和 OIDC 提供者傳回的 JSON Web 權杖 (JWT),根據需要產生臨時存取憑證。

應用程式必須提供登入 OIDC 提供者並擷取與驗證會話相關聯的 JSON Web 權杖 (JWT) 的工作流程。請參閱提供者文件,以取得在成功驗證後取得和剖析 JWT 權杖的資訊。MinIO 提供範例 Go 應用程式 web-identity.go,其中包含管理此工作流程的範例。

應用程式擷取 JWT 權杖後,使用 AssumeRoleWithWebIdentity 端點產生臨時憑證

POST https://minio.example.net?Action=AssumeRoleWithWebIdentity
&WebIdentityToken=TOKEN
&Version=2011-06-15
&DurationSeconds=86400
&Policy=Policy
  • TOKEN 取代為上一步中傳回的 JWT 權杖。

  • DurationSeconds 取代為臨時憑證到期前的持續時間(以秒為單位)。上面的範例指定了 86400 秒或 24 小時的時間段。

  • Policy 取代為內嵌 URL 編碼的 JSON 原則,該原則進一步限制與臨時憑證相關聯的權限。

    省略以使用與 OpenID 使用者原則宣告相關聯的原則。

API 回應由包含存取金鑰、秘密金鑰、會話權杖和到期日的 XML 文件組成。應用程式可以使用存取金鑰和秘密金鑰來存取 MinIO 並執行操作。

請參閱AssumeRoleWithWebIdentity以取得參考文件。