文档

MinIO 外部访问管理插件

概述

MinIO 访问管理插件提供了一个 REST 接口,用于通过 webhook 服务卸载授权。

启用后,MinIO 会将每个 API 调用的请求和凭据详细信息发送到配置的外部 HTTP(S) 端点,并查找 ALLOWDENY 响应。因此,MinIO 可以将访问管理委托给外部系统,而不是依赖于 S3 的 基于策略的访问控制

配置设置

您可以使用以下环境变量或配置设置配置 MinIO 外部访问管理插件。

指定以下 环境变量 到部署中的每个 MinIO 服务器

MINIO_POLICY_PLUGIN_URL="https://external-authz.example.net:8080/authz"

# All other envvars are optional
MINIO_POLICY_PLUGIN_AUTH_TOKEN="Bearer TOKEN"
MINIO_POLICY_PLUGIN_ENABLE_HTTP2="OFF"
MINIO_POLICY_PLUGIN_COMMENT="External Access Management using PROVIDER"

使用 mc admin config set 命令设置以下配置设置

mc admin config set policy_plugin \
   url="https://external-authz.example.net:8080/authz" \

   # All other config settings are optional
   auth_token="Bearer TOKEN" \
   enable_http2="off" \
   comment="External Access Management using PROVIDER"

身份验证和授权流程

应用程序的登录流程如下

  1. 客户端在执行 API 调用时包含身份验证信息

  2. 配置的身份管理器对客户端进行身份验证

  3. MinIO 向配置的访问管理插件 URL 发出 POST 调用,其中包含 API 调用的上下文和身份验证数据

  4. 授权成功后,访问管理器将返回一个带有 JSON 主体的 200 OK 响应,其中包含 result true"result" : { "allow" : true }

如果访问管理器拒绝授权请求,MinIO 会自动阻止并拒绝 API 调用。

请求主体示例

以下 JSON 类似于作为 POST 到配置的访问管理器 webhook 的一部分发送的请求主体。

{
   "input": {
      "account": "minio",
      "groups": null,
      "action": "s3:ListBucket",
      "bucket": "test",
      "conditions": {
         "Authorization": [
         "AWS4-HMAC-SHA256 Credential=minio/20220507/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=62012db6c47d697620cf6c68f0f45f6e34894589a53ab1faf6dc94338468c78a"
         ],
         "CurrentTime": [ "2022-05-07T18:31:41Z" ],
         "Delimiter": [ "/" ],
         "EpochTime": [
         "1651948301"
         ],
         "Prefix": [ "" ],
         "Referer": [ "" ],
         "SecureTransport": [ "false" ],
         "SourceIp": [ "127.0.0.1" ],
         "User-Agent": [ "MinIO (linux; amd64) minio-go/v7.0.24 mc/DEVELOPMENT.2022-04-20T23-07-53Z" ],
         "UserAgent": [ "MinIO (linux; amd64) minio-go/v7.0.24 mc/DEVELOPMENT.2022-04-20T23-07-53Z" ],
         "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ],
         "X-Amz-Date": [ "20220507T183141Z" ],
         "authType": [ "REST-HEADER" ],
         "principaltype": [ "Account" ],
         "signatureversion": [ "AWS4-HMAC-SHA256" ],
         "userid": [ "minio" ],
         "username": [ "minio" ],
         "versionid": [ "" ]
      },
      "owner": true,
      "object": "",
      "claims": {},
      "denyOnly": false
   }
}

响应主体示例

MinIO 要求访问管理服务的响应主体满足以下两种格式之一

{ "result" : true }

{ "result" : { "allow" : true } }