一、引言

Minio 是一个高性能的对象存储服务器,在实际应用中,为了保障数据的安全性和隐私性,常常需要配置私有策略,限制对存储桶及对象的访问。本文将详细介绍 Minio 私有策略的配置方法。

二、Minio 策略基础概念

(一)策略语言

Minio 使用一种类似 JSON 的策略语言来定义访问权限。策略由一系列语句(Statement)组成,每个语句包含效果(Effect)、主体(Principal)、操作(Action)和资源(Resource)等关键元素。

  • Effect:取值为 “Allow” 或 “Deny”,表示允许或拒绝相应的操作。

  • Principal:定义策略应用的对象,可以是特定用户、用户组或通配符(如 “*” 代表所有主体)。

  • Action:指定允许或拒绝的操作,例如 “s3:GetObject”(获取对象)、“s3:PutObject”(上传对象)等。

  • Resource:明确策略作用的资源,如特定的存储桶或对象路径。

(二)作用范围

策略可以应用于整个 Minio 服务器,也可以针对特定的存储桶或对象子集。例如,你可以创建一个策略,只允许特定用户访问某个存储桶,而禁止其他用户的任何操作。

三、配置私有策略的步骤

(一)登录 Minio 控制台

打开浏览器,输入 Minio 服务器的地址,使用管理员账号和密码登录到 Minio 控制台。

(二)创建策略

  1. 在控制台左侧导航栏中,点击 “Administrator -> Buckets”。

  2. 选择需要配置的桶 “Access Policy:”(策略)选项卡,然后点击 “Change Access Policy”(更改访问策略)按钮。

  3. 在策略编辑器“Change Access Policy”中,将“Access Policy”策略由“Private/Public”->Custom“。

  4. 编写策略内容如下:

    Write Policy:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": [
    "*"
    ]
    },
    "Action": [
    "s3:ListBucketMultipartUploads",
    "s3:GetBucketLocation",
    "s3:ListBucket"
    ],
    "Resource": [
    "arn:aws:s3:::你的桶名"
    ]
    },
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": [
    "*"
    ]
    },
    "Action": [
    "s3:DeleteObject",
    "s3:GetObject",
    "s3:ListMultipartUploadParts",
    "s3:PutObject",
    "s3:AbortMultipartUpload"
    ],
    "Resource": [
    "arn:aws:s3:::你的桶名/*"
    ],
    "Condition": {
    "StringLike": {
    "aws:Referer": [
    "http://你的域名1/*",
    "https://你的域名2/*"
    ]
    }
    }
    }
    ]
    }

在上述策略中,我们指定了:

  1. 策略版本"Version": "2012-10-17" 表示使用的 AWS 策略语言版本。
  2. 声明部分(Statement):
    • 第一个声明:
      • EffectAllow,即允许。
      • Principal"*",意味着允许所有 AWS 主体。
      • Action 包含 "s3:ListBucketMultipartUploads"(列出存储桶的多部分上传)、"s3:GetBucketLocation"(获取存储桶位置)、"s3:ListBucket"(列出存储桶内容)。
      • Resource"arn:aws:s3:::orange",指定了目标存储桶 orange
    • 第二个声明:
      • 同样 EffectAllow,允许所有 AWS 主体。
      • Action 包含 "s3:DeleteObject"(删除对象)、"s3:GetObject"(获取对象)、"s3:ListMultipartUploadParts"(列出多部分上传的部分)、"s3:PutObject"(上传对象)、"s3:AbortMultipartUpload"(中止多部分上传)。
      • Resource"arn:aws:s3:::orange/*",表示针对 orange 存储桶下的所有对象。
      • Condition 条件部分使用了 StringLike 条件键,规定只有当 aws:Referer"http://你的域名1/*""https://你的域名2/*" 时,这些操作才被允许。