文件

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

概述

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

  • 為外部 OIDC 供應商設定 MinIO 叢集。

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

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

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

先決條件

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 第 4 版協定進行驗證,並支援已棄用的 Signature 第 2 版協定。具體而言,用戶端必須提供有效的存取金鑰和私密金鑰,才能存取任何 S3 或 MinIO 管理 API,例如 PUTGETDELETE 作業。

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

應用程式必須提供登入 OIDC 提供者並擷取與驗證會話相關聯的 JSON Web Token (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 以取得參考文件。