環境
- .NET 6.0
- Aliyun.OSS.SDK.NetCore v2.13.0
やりたかったこと
docker-composeでMinIOを立てて、OSSのSDKを使ってアクセスしたかった
やったこと
-
docker-compose.yamlでMinIOを起動できるようにする
minioを起動し、init-minioでbucketを作成しています
virtual-hosted styleを有効にするためにMINIO_DOMAINを指定していますdocker-compose.ymlservices: minio: image: minio/minio:latest environment: MINIO_DOMAIN: localhost ports: - "9000:9000" - "9001:9001" volumes: - minio-data:/data command: server /export --console-address ":9001" init-minio: image: minio/mc:latest depends_on: - minio entrypoint: > /bin/sh -c " mc alias set minio http://minio:9000 minioadmin minioadmin; mc mb --ignore-existing minio/test; mc anonymous set public minio/test; " volumes: minio-data:
-
/etc/hostsを設定する
virtual-hosted styleでtest.localhost:9000などとアクセスされるので設定/etc/hosts127.0.0.1 *.localhost
-
C#から実行してみる
SDKのサンプルを元にバケット一覧を取得OssClient client = new OssClient("http://localhost:9000", "minioadmin", "minioadmin", conf); var buckets = client.ListBuckets(); foreach (var bucket in buckets) { Console.WriteLine(bucket.Name + ", " + bucket.Location + ", " + bucket.Owner); }
起きたこと
下記エラーが発生した。使っているSDKのバージョンでは署名バージョンV4をサポートしていなかったため、認証に失敗してしまった。
The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
V4に対応したバージョンに更新したが改善されなかった
dotnet add package Aliyun.OSS.SDK.NetCore --version 2.14.1
ソースを見たところ、AWS4-HMAC-SHA256
ではなくOSS4-HMAC-SHA256
という文字列が使われていた。おそらく基本的な仕組みは同じだが、ヘッダー情報にもOSS4の方で設定されるので、MinIO側でもAWS4として処理できないのだと思われる。
余談
AWSのSDKを使ってAlibabaのOSSにアクセスするサポートはされているみたいだった。MinIOはS3互換だけど、OSS互換ではなかったということか。
AlibabのOSSを使う時もAWSのSDKを使った方がいいかも。