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 身分管理部署叢集時進行配置。此頁面重點介紹如何建立 MinIO 政策以符合配置的 OIDC 宣告。
MinIO 支援兩種 OIDC 身份驗證和授權流程
RolePolicy 流程在 MinIO 配置中設定已驗證使用者的指派政策。
MinIO 建議使用 RolePolicy 方法與 OpenID 提供者進行身份驗證。
JWT 流程將已驗證使用者的指派政策設定為 OIDC 配置的一部分。
MinIO 支援多個 OIDC 提供者配置。但是,每個部署只能配置一個基於 JWT 宣告的 OIDC 提供者。所有其他提供者都必須使用 RolePolicy。
使用 RolePolicy 時,所有使用給定 RoleArn 產生 STS 憑證的用戶端都會收到與該 RoleArn 的 RolePolicy 配置相關聯的政策或多個政策。
您可以使用OpenID 政策變數來建立以程式方式管理每個個別使用者可以存取內容的政策。
使用 OIDC 憑證並搭配 RolePolicy 宣告流程的應用程式登入流程如下:
建立 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 Tokens 允許您對原則進行個別指派。但是,使用 Web 權杖也會增加管理多個個別宣告原則的成本。
使用 OIDC 憑證並搭配 JSON Web Token 宣告流程的應用程式登入流程如下:
對已設定的 OIDC 提供者進行身份驗證,並擷取 JSON Web Token (JWT)。
MinIO 僅支援 OpenID 授權碼流程。不支援使用隱含流程進行身份驗證。
將 JWT 指定給 MinIO Security Token Service (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 和資源的存取權。