TL; DR
- URLは http://{miniohost}:9000/{bucketname}/{key} のような形式
- BucketPolicyで読み取り権限を与える
手順
URLフォーマット
URLは http://{miniohost}:9000/{bucketname}/{key} のような形式。minioのUI画面のURLとは異なる。
以下に記載があった。
https://github.com/minio/minio/issues/5180
読み取り権限
S3 バケットのオブジェクトにパブリック読み取りアクセス許可を付与する
https://aws.amazon.com/jp/premiumsupport/knowledge-center/read-access-objects-s3-bucket/
AWS公式ドキュメントに記載があるようにS3だと4つの方式がある
- Amazon S3 コンソールを使用してオブジェクトのアクセスコントロールリスト (ACL) を更新する
- AWS コマンドラインインターフェイス (AWS CLI) を使用してオブジェクトの ACL を更新する
- 指定されたオブジェクトタグへのパブリック読み取りアクセス許可を付与するバケットポリシーを使用する
- 指定されたプレフィックスへのパブリック読み取りアクセス許可を付与するバケットポリシーを使用する
コンソールは使わないので1は置いておいて(やるとしてもminioのコンソールには機能がなさそう)、
2のようにobjectにACLを設定しても機能しなかった。
タグは付けていないので3は省略し、
4はminioで対応してそうなのでこちらで対応する。
UI画面から行う
以下の記事にminioのUI画面から行う説明がある。
こちらでは"Read Write"を設定しているけど、読み取りだけなら"Read"を設定したらアクセスできた。
minioでHTTPでアクセスする - Qiita
https://qiita.com/mo12ino/items/312a16a32ec8b3fa30ce
CLIから行う
AWS CLIやAWS SDKから行う場合はAWS公式ドキュメントにあるように
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/publicprefix/*"]
}
]
}
上記のようなPolicyを設定する。
以下はgoでBucket作成時にいっしょにPolicyを設定した例。
headInput := &s3.HeadBucketInput{
Bucket: &bucket,
}
if _, err := s3Client.HeadBucket(headInput); err != nil {
_, err := s3Client.CreateBucket(&s3.CreateBucketInput{
Bucket: aws.String(bucket),
})
if err != nil {
panic("failed to create buket")
}
readOnlyAnonUserPolicy := map[string]interface{}{
"Version": "2012-10-17",
"Statement": []map[string]interface{}{
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": []string{
"s3:GetObject",
},
"Resource": []string{
fmt.Sprintf("arn:aws:s3:::%s/*", bucket),
},
},
},
}
policy, _ := json.Marshal(readOnlyAnonUserPolicy)
s3Client.PutBucketPolicy(&s3.PutBucketPolicyInput{
Bucket: aws.String(bucket),
Policy: aws.String(string(policy)),
})
}