設定 MinIO 以使用 OpenID 進行驗證
概觀
MinIO 支援使用與 OpenID Connect (OIDC) 相容的身分提供者 (IDP),例如 Okta、KeyCloak、Dex、Google 或 Facebook,來進行使用者身分的外部管理。此頁面的程序提供了以下說明:
設定 MinIO 叢集以使用外部 OIDC 提供者。
使用 MinIO 主控台和 OIDC 認證登入叢集。
使用 MinIO
AssumeRoleWithWebIdentity
安全權杖服務 (STS) API 來產生應用程式使用的臨時憑證。
此程序適用於 OIDC 相容的提供者。請參閱您選擇的 OIDC 提供者的文件,以取得有關驗證和 JWT 擷取的特定說明或程序。
先決條件
OpenID-Connect (OIDC) 相容的身分提供者
此程序假設存在 Okta、KeyCloak、Dex、Google 或 Facebook 等現有的 OIDC 提供者。有關設定這些服務的說明不在此程序的範圍內。
確保每個打算與 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,例如 PUT
、GET
和 DELETE
作業。
應用程式可以使用 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 以取得參考文件。