ConoHaオブジェクトストレージが2025年8月にS3 APIに対応しました
ということで、個人開発WebアプリもS3準拠に対応させるため、まずはアクセス用のクレデンシャルを作成することにしました
手順1:トークンを取得
まずは認証用のトークンを取得します
取得方法についてはこちら
パラメータに必要なConoHaコントロールパネルのAPIから取得できます

実際のCurlコマンドやレスポンス形式はConoHaページに記載されているため、必要事項変更後に実行してください
レスポンスヘッダの「x-subject-token」がトークンなので控えておきます
S3 API用のクレデンシャルを作成する
トークンが取得できたら、次はS3 API用のクレデンシャルを登録します
こちらも、ConoHaのドキュメントにサンプルリクエストとレスポンスがありますので、必要事項を変更するだけで簡単に利用できます
サンプルリクエストとレスポンスはこちら
レスポンス内にアクセスキー、シークレットキーが含まれているので確認しておきます
プログラム内での設定例
アクセスキー、シークレットキーが分かれば、プログラム内に設定を行い接続が可能になります
自分が作製しているアプリの場合、以下のように設定しています
.envのサンプル
S3_ENDPOINT=https://s3.c3j1.conoha.io
S3_REGION=conoha
S3_ACCESS_KEY=アクセスキー
S3_SECRET_KEY=シークレットキーgoでの接続例は以下になります
必要なimport
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3"
s3クライアント作成のサンプル
endpoint := S3_ENDPOINT
region := S3_REGION
accessKey := S3_ACCESS_KEY
secretKey := S3_SECRET_KEY
cfg, err := config.LoadDefaultConfig(ctx,
config.WithRegion(region),
config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(accessKey, secretKey, "")),
)
client := s3.NewFromConfig(cfg, func(o *s3.Options) {
o.BaseEndpoint = aws.String(endpoint)
o.UsePathStyle = true // S3互換ストレージ(MinIOなど)ではパスベースのアクセスにするために必要
})o.UsePathStyle = trueはパスベースでファイルにアクセスするために設定しています
localhost(テスト環境)ではサブドメインで指定できない、ConoHa側でサブドメイン形式に対応しているか不明(見つけられなかった)などの理由です
Amazon S3ではサブドメイン形式(https://バケット名.s3.amazonaws.com/ファイルキー)のような形式が主流のようですが、今回はパス形式のためhttp://localhost:9000/static/〜/image.jpgのような形式でアクセスできます