我正在将 minio 配置为 S3 兼容存储。
基于 https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html
我了解我可以使用特定用户的存储桶级别策略来限制对存储桶的访问。
链接文档中的 aws 示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddCannedAcl",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:root",
"arn:aws:iam::444455556666:root"
]
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": [
"public-read"
]
}
}
}
]
}
让我们考虑 2 行:
"arn:aws:iam::111122223333:root",
"arn:aws:iam::444455556666:root"
据我了解,
111122223333:root
和444455556666:root
是用户标识符。但我没有找到任何 mc 命令返回我任何用户标识符?我还检查了 UI 控制台,但没有找到任何东西
你能帮忙吗?
MinIO 中的桶级策略仅适用于匿名用户。要限制用户访问,您需要设置 IAM 策略。
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:root",
"arn:aws:iam::444455556666:root"
]
},
MinIO 中的存储桶策略仅用于匿名访问,我们没有故意实现这一点,因为 AWS 在这方面的实现不必要地复杂和冗余。因为做同一件事有很多种方法。
您只需将相关策略直接附加到您的用户,并通过相关存储桶或前缀的资源为他们提供访问权限。这已经在 100% 的时间内解决了 90% 的用例。
将来可能会有其他要求,届时我们可能会重新考虑我们的立场并实施它。在那之前,您并不真正需要与委托人一起使用存储桶策略。
虽然 Minio 声明它们是 s3 兼容的 - 但他们不支持它,最糟糕的是我无法在 Minio 文档中找到任何关于我的问题与 S3 API 不一致的信息。
但最终我在 GitHub 上找到了一张封闭的票,明确表示不会实施。它必须在文档中。
我也尝试支持 Minio 和 S3,但意识到 Minio 中的访问控制模型与 Amazon S3 的访问控制模型有根本不同。在 S3 访问控制模型中,您为存储桶创建了一个策略(每个存储桶只有一个策略),其中可以包含多个语句。每个语句都可以定义一组主体可以对存储桶或存储桶内的对象执行的操作。因此,如果您希望不同的主体拥有不同的权限,您可以在策略中创建不同的语句。 在 Minio (PBAC) 访问控制模型中,您可以在部署级别定义访问控制策略。每个策略都可以允许对资源(存储桶和存储桶内的对象)执行操作。然后,您将策略分配(Minio 称之为附加)到主体(用户和组)。我个人认为 Minio 模型更干净,但它不兼容 S3。 我们需要的是一个工具,它可以获取 S3 策略 JSON 文档并使用适当的 mc-admin 命令在 Minio 中实现它。我相信细节决定成败。有人有这样的Java代码吗? 还是我错过了什么?