文件

OpenID Connect 存取管理

MinIO 支援使用與 OpenID Connect (OIDC) 相容的身分提供者 (IDP),例如 Okta、KeyCloak、Dex、Google 或 Facebook,來進行使用者身分的外部管理。

對於由外部 OpenID Connect (OIDC) 相容提供者管理的身分,MinIO 可以使用兩種方法之一來將政策指派給已驗證的使用者。

  1. 使用作為 OIDC 驗證流程一部分傳回的 JSON Web 權杖宣告,以識別要指派給已驗證使用者的 政策

  2. 使用授權請求中指定的 RoleArn 來指派附加到提供者 RolePolicy 的政策。

預設情況下,MinIO 會拒絕存取使用者已指派或繼承的 政策 未明確允許的所有動作或資源。由 OIDC 提供者管理的使用者必須在 JWT 宣告中指定必要的政策。如果使用者 JWT 宣告沒有相符的 MinIO 政策,則該使用者沒有權限存取 MinIO 部署上的任何動作或資源。

MinIO 尋找的特定宣告會在 使用 OIDC 身分管理部署叢集 時設定。此頁面重點說明如何建立 MinIO 政策以符合已設定的 OIDC 宣告。

驗證和授權流程

MinIO 支援兩種 OIDC 驗證和授權流程

  1. RolePolicy 流程會在 MinIO 設定中設定已驗證使用者的指派政策。

    MinIO 建議使用 RolePolicy 方法來使用 OpenID 提供者進行驗證。

  2. JWT 流程會在 OIDC 設定中設定已驗證使用者的指派政策。

MinIO 支援多個 OIDC 提供者設定。但是,每個部署只能設定 一個 基於 JWT 宣告的 OIDC 提供者。所有其他提供者都必須使用 RolePolicy。

RolePolicy 和 RoleArn

透過 RolePolicy,所有使用指定 RoleArn 產生 STS 憑證的客戶端都會收到與該 RoleArn 的 RolePolicy 設定相關聯的政策或多個政策

您可以使用OpenID 政策變數來建立政策,以程式化的方式管理每個個別使用者可以存取哪些內容。

使用具有 RolePolicy 宣告流程的 OIDC 憑證的應用程式的登入流程如下:

  1. 建立 OIDC 設定。

  2. 記錄在建立時或 MinIO 啟動時分配給設定的 RoleArn。將此 RoleArn 與 AssumeRoleWithWebIdentity STS API 一起使用。

  3. 建立要與 RoleArn 一起使用的 RolePolicy。使用 MINIO_IDENTITY_OPENID_ROLE_POLICY 環境變數或 identity_openid role_policy 設定來定義要用於提供者的政策清單。

  4. 使用者在登入 MinIO 時選擇已設定的 OIDC 提供者。

  5. 使用者完成向已設定的 OIDC 提供者驗證,然後重新導向回 MinIO。

    MinIO 僅支援OpenID 授權碼流程。不支援使用隱式流程進行驗證。

  6. MinIO 會驗證 API 呼叫中的 RoleArn,並檢查要使用的RolePolicy。任何具有 RoleArn 的驗證請求都會收到相同的政策存取權限。

  7. MinIO 以存取金鑰、秘密金鑰和會期權杖的形式,在 STS API 回應中傳回暫時性憑證。憑證具有與 RolePolicy 中指定的政策相符的權限。

  8. 應用程式使用 STS 端點傳回的暫時性憑證,在 MinIO 上執行通過驗證的 S3 作業。

JSON Web Token 宣告

使用 JSON Web Tokens 可讓您個別指派政策。然而,使用 Web Token 也會增加為不同宣告管理多個政策的成本。

使用具有 JSON Web Token 宣告流程的 OIDC 憑證的應用程式的登入流程如下:

  1. 向已設定的 OIDC 提供者進行驗證,並擷取 JSON Web Token (JWT)

    MinIO 僅支援OpenID 授權碼流程。不支援使用隱式流程進行驗證。

  2. 指定 JWT 到 MinIO 安全性權杖服務 (STS) AssumeRoleWithWebIdentity API 端點。

    MinIO 會根據已設定的 OIDC 提供者驗證 JWT

    如果 JWT 有效,MinIO 會檢查是否有宣告指定要指派給通過驗證的使用者的一個或多個政策清單。MinIO 預設為檢查 policy 宣告。

  3. MinIO 以存取金鑰、秘密金鑰和會期權杖的形式,在 STS API 回應中傳回暫時性憑證。憑證具有與 JWT 宣告中指定的政策相符的權限。

  4. 應用程式使用 STS 端點傳回的暫時性憑證,在 MinIO 上執行通過驗證的 S3 作業。

MinIO 提供了一個範例 Go 應用程式 web-identity.go,可處理完整的登入流程。

OIDC 使用者也可以選擇建立存取金鑰。存取金鑰是長期憑證,可繼承來自父系使用者的權限。父系使用者可以在建立存取金鑰時進一步限制這些權限。若要建立新的存取金鑰,請使用 OIDC 管理的使用者憑證登入MinIO 控制台。從左側導覽的身分區段中,選取存取金鑰,然後按一下建立存取金鑰 + 按鈕。

識別 JWT 宣告值

MinIO 使用作為 OIDC 驗證流程一部分傳回的 JWT 權杖,來識別要指派給通過驗證的使用者的特定政策。

您可以使用JWT 偵錯工具來解碼傳回的 JWT 權杖,並驗證使用者屬性是否包含所需的宣告。

請參閱RFC 7519:JWT 宣告以取得更多關於 JWT 宣告的資訊。

請參考您慣用的 OIDC 提供者的文件,以取得關於設定使用者宣告的說明。

建立符合宣告的政策

使用 MinIO 控制台 *或* mc admin policy 命令來建立符合一個或多個宣告值的政策。

OIDC 政策變數

下表包含授權OIDC 管理的使用者時可使用的支援政策變數清單。

每個變數對應於作為通過驗證的使用者的 JWT 權杖一部分傳回的宣告。

變數

描述

jwt:sub

傳回使用者的 sub 宣告。

jwt:iss

從 ID 權杖傳回 Issuer Identifier 宣告。

jwt:aud

從 ID 權杖傳回 Audience 宣告。

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 和資源的存取權。