使用 OpenID 配置 MinIO 進行身份驗證
概觀
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
。
在主控台中,按一下 BUTTON 以開始 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。