OpenID Connect 存取管理
MinIO 支援使用 OpenID Connect (OIDC) 相容的身分提供者 (IDP),例如 Okta、KeyCloak、Dex、Google 或 Facebook,以進行外部使用者身分管理。
對於由外部 OpenID Connect (OIDC) 相容提供者管理的身分,MinIO 可以使用兩種方法之一來將原則指派給已驗證的使用者。
使用作為 OIDC 驗證流程一部分傳回的 JSON Web 權杖宣告來識別要指派給已驗證使用者的原則。
使用授權請求中指定的 RoleArn
來指派附加到提供者 RolePolicy 的原則。
MinIO 預設拒絕存取未經使用者指派或繼承的 原則 明確允許的所有動作或資源。由 OIDC 提供者管理的使用者必須將必要的原則指定為 JWT 宣告的一部分。如果使用者 JWT 宣告沒有符合的 MinIO 原則,則該使用者沒有任何權限存取 MinIO 部署上的任何動作或資源。
MinIO 尋找的特定宣告設定為 使用 OIDC 身分管理部署叢集 的一部分。此頁面重點介紹建立符合已設定 OIDC 宣告的 MinIO 原則。
MinIO 支援兩個 OIDC 驗證和授權流程
RolePolicy 流程在 MinIO 設定中設定已驗證使用者的已指派原則。
MinIO 建議使用 RolePolicy 方法來使用 OpenID 提供者進行驗證。
JWT 流程將已驗證使用者的已指派原則設定為 OIDC 設定的一部分。
MinIO 支援多個 OIDC 提供者設定。但是,每個部署只能設定一個基於 JWT 宣告的 OIDC 提供者。所有其他提供者都必須使用 RolePolicy。
使用 RolePolicy,所有使用指定 RoleArn 產生 STS 憑證的用戶端都會收到與該 RoleArn 的 RolePolicy 設定相關聯的 原則或多個原則。
您可以使用OpenID 原則變數來建立以程式設計方式管理每個個別使用者可以存取的內容的原則。
使用具有 RolePolicy 宣告流程的 OIDC 憑證的應用程式登入流程如下
建立 OIDC 設定。
記錄在建立時或 MinIO 啟動時指派給設定的 RoleArn。將此 RoleArn 與 AssumeRoleWithWebIdentity STS API 一起使用。
建立要與 RoleArn 一起使用的 RolePolicy。使用 MINIO_IDENTITY_OPENID_ROLE_POLICY
環境變數或 identity_openid role_policy
設定設定來定義要用於提供者的原則清單
使用者在登入 MinIO 時選擇設定的 OIDC 提供者。
使用者完成對設定的 OIDC 提供者的驗證,然後重新導向回 MinIO。
MinIO 僅支援OpenID 授權碼流程。不支援使用隱式流程進行驗證。
MinIO 會驗證 API 呼叫中的 RoleArn
,並檢查要使用的RolePolicy。任何包含 RoleArn 的驗證請求都會收到相同的政策存取權限。
MinIO 會以存取金鑰、私密金鑰和工作階段權杖的形式,在 STS API 回應中傳回臨時憑證。這些憑證具有符合 RolePolicy 中指定政策的權限。
應用程式會使用 STS 端點傳回的臨時憑證,在 MinIO 上執行經過驗證的 S3 操作。
使用 JSON Web Token 可以針對個別聲明進行政策的指派。然而,使用 Web Token 也會增加為個別聲明管理多個政策的成本。
使用 OIDC 憑證與 JSON Web Token 聲明流程的應用程式登入流程如下
向已設定的 OIDC 提供者進行驗證,並擷取 JSON Web Token (JWT)。
MinIO 僅支援OpenID 授權碼流程。不支援使用隱式流程進行驗證。
將 JWT 指定到 MinIO 安全權杖服務 (STS) AssumeRoleWithWebIdentity API 端點。
MinIO 會根據已設定的 OIDC 提供者驗證 JWT。
如果 JWT 有效,MinIO 會檢查是否有聲明指定要指派給已驗證使用者的一或多個政策清單。MinIO 預設會檢查 policy
聲明。
MinIO 會以存取金鑰、私密金鑰和工作階段權杖的形式,在 STS API 回應中傳回臨時憑證。這些憑證具有符合 JWT 聲明中指定政策的權限。
應用程式會使用 STS 端點傳回的臨時憑證,在 MinIO 上執行經過驗證的 S3 操作。
MinIO 提供範例 Go 應用程式 web-identity.go 來處理完整的登入流程。
OIDC 使用者也可以建立存取金鑰。存取金鑰是長期有效的憑證,它們會繼承來自父使用者的權限。父使用者可以在建立存取金鑰時進一步限制這些權限。若要建立新的存取金鑰,請使用 OIDC 管理的使用者憑證登入MinIO 主控台。從左側導覽的身分區段中,選取存取金鑰,然後按一下建立存取金鑰 + 按鈕。
識別 JWT 聲明值
MinIO 使用在 OIDC 驗證流程中傳回的 JWT 權杖,以識別要指派給已驗證使用者的特定政策。
您可以使用 JWT 偵錯工具來解碼傳回的 JWT 權杖,並驗證使用者屬性是否包含必要的聲明。
如需有關 JWT 聲明的詳細資訊,請參閱 RFC 7519:JWT 聲明。
請參閱您偏好的 OIDC 提供者的文件,以取得有關設定使用者聲明的指示。
下表包含授權OIDC 管理的使用者時,可使用的支援政策變數清單。
每個變數都對應於作為已驗證使用者 JWT 權杖一部分傳回的聲明
變數 |
描述 |
jwt:sub
|
傳回使用者的 sub 聲明。 |
jwt:iss
|
從 ID 權杖傳回發行者識別碼聲明。 |
jwt:aud
|
從 ID 權杖傳回對象聲明。 |
jwt:jti
|
從用戶端驗證資訊傳回 JWT ID 聲明。 |
jwt:upn
|
從用戶端驗證資訊傳回使用者主體名稱聲明。 |
jwt:name
|
傳回使用者的 name 聲明。 |
jwt:groups
|
傳回使用者的 groups 聲明。 |
jwt:given_name
|
傳回使用者的 given_name 聲明。 |
jwt:family_name
|
傳回使用者的 family_name 聲明。 |
jwt:middle_name
|
傳回使用者的 middle_name 聲明。 |
jwt:nickname
|
傳回使用者的 nickname 聲明。 |
jwt:preferred_username
|
傳回使用者的 preferred_username 聲明。 |
jwt:profile
|
傳回使用者的 profile 聲明。 |
jwt:picture
|
傳回使用者的 picture 聲明。 |
jwt:website
|
傳回使用者的 website 聲明。 |
jwt:email
|
傳回使用者的 email 聲明。 |
jwt:gender
|
傳回使用者的 gender 聲明。 |
jwt:birthdate
|
傳回使用者的 birthdate 聲明。 |
jwt:phone_number
|
傳回使用者的 phone_number 聲明。 |
jwt:address
|
傳回使用者的 address 聲明。 |
jwt:scope
|
傳回使用者的 scope 聲明。 |
jwt:client_id
|
傳回使用者的 client_id 聲明。 |
如需有關這些範圍的詳細資訊,請參閱OpenID Connect Core 1.0 文件。您選擇的 OIDC 提供者可能會有更具體的說明文件。
例如,以下政策會使用變數來替換已驗證使用者的 preferred_username
,作為 Resource
欄位的一部分,以便使用者只能存取符合其使用者名稱的前綴
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket"],
"Condition": {"StringLike": {"s3:prefix": ["${jwt:preferred_username}/*"]}}
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket/${jwt:preferred_username}/*"]
}
]
}
MinIO 會將 Resource
欄位中的 ${jwt:preferred_username}
變數替換為 JWT 權杖中 preferred_username
的值。然後,MinIO 會評估政策,並授予或撤銷對所請求 API 和資源的存取權。