【问题标题】:simple Minio bucket policy简单的 Minio 存储桶策略
【发布时间】:2021-08-22 19:09:58
【问题描述】:

我在 Node 开发环境中使用 Minio 的 docker 映像。数据库种子因此创建了一个 Minio 存储桶:

await this.s3.createBucket({
  Bucket: this.configService.get('S3_BUCKET_NAME'),
  ACL: 'public'
}).promise()

这很好地创建了存储桶,但 ACL 根本不占用。我可以在 http://localhost:9000 跳转到 Minio 浏览器并手动将存储桶设置为公开读取,但这对于种子来说显然有点麻烦。

我看到了很多相互矛盾的建议,比如“Minio 甚至不做 ACL,使用存储桶策略”,但我在任何地方都找不到示例策略文件,而且 AWS JSON 没有似乎工作。我真的不希望通过 CLI 界面执行此操作,因为我不想将其构建到我的部署中。我错过了什么吗?

【问题讨论】:

    标签: minio


    【解决方案1】:

    可以在此处找到示例: Set Bucket Policy in minio-js (node-js)

    var Minio = require('minio')
    
    var s3Client = new Minio.Client({
      endPoint: '<host>',
      accessKey: 'YOUR-ACCESSKEYID',
      secretKey: 'YOUR-SECRETACCESSKEY'
    })
    // Bucket policy - GET requests on "testbucket" bucket will not need authentication.
    var policy = `
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Principal": {
            "AWS": [
              "*"
            ]
          },
          "Resource": [
            "arn:aws:s3:::testbucket"
          ],
          "Sid": ""
        },
        {
          "Action": [
            "s3:GetObject"
          ],
          "Effect": "Allow",
          "Principal": {
            "AWS": [
              "*"
            ]
          },
          "Resource": [
            "arn:aws:s3:::testbucket/*"
          ],
          "Sid": ""
        }
      ]
    }
    `
    
    s3Client.setBucketPolicy('testbucket', policy, (err) => {
      if (err) throw err
    
      console.log('Set bucket policy')
    })

    【讨论】:

      【解决方案2】:

      问题是无法在同一个调用中创建存储桶并分配策略。需要有两个调用。

      这最终奏效了:

          const S3_BUCKET = 'some_bucket_name'
          const policy = JSON.stringify({
            "Version": "2012-10-17",
            "Statement": [
              {
                "Action": [
                  "s3:GetObject"
                ],
                "Effect": "Allow",
                "Principal": {
                  "AWS": [
                    "*"
                  ]
                },
                "Resource": [
                  `arn:aws:s3:::${S3_BUCKET}/*`
                ],
                "Sid": ""
              }
            ]
          })
          try {
            await this.s3.createBucket({ Bucket: S3_BUCKET }).promise()
            await this.s3.putBucketPolicy({ Bucket: S3_BUCKET, Policy: policy }).promise()
          } catch(error) {
            this.logger.error(error, 'create:bucket')
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-19
        • 2019-04-24
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多