コマンド実行時に正しいリージョン(エンドポイント)を指定できていなかった結果、
署名付きURL…ちゃんと発行できてるのに…なんや301って…
となって若干はまったのでメモ。
状況
↓のようにデフォルトで東京リージョンが指定されている状態で、us-east-2にあるオブジェクトに対して署名付きURLを発行。(PowerShellからCLIで実行)
> aws configure
AWS Access Key ID [********]:
AWS Secret Access Key [********]:
Default region name [ap-northeast-1]:
Default output format [yaml]:
> aws s3 presign s3://mybucket/test.csv
https://s3.ap-northeast-1.amazonaws.com/mybucket ...
一見問題なさそう。
結果
ダウンロードできない
> curl -o test.csv "https://s3.ap-northeast-1.amazonaws.com/mybucket ..."
curl : リモート サーバーがエラーを返しました: (301) 完全に移動したリダイレクト
発生場所 行:1 文字:1
+ curl -o test.csv "https://s3.ap-northeast-1.amazonaws.com/mybucket ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebExce
ption
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
対応
正しいリージョンを指定
> aws s3 presign s3://mybucket/test.csv --region us-east-2
https://s3.us-east-2.amazonaws.com/mybucket ...
> curl -o test.csv "https://s3.us-east-2.amazonaws.com/mybucket ..."
その他メモ
ブラウザからアクセスするとエンドポイントが違うよって教えてくれます。
<Error>
<Code>PermanentRedirect</Code>
<Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message>
<Endpoint>mybucket.s3.us-east-2.amazonaws.com</Endpoint>
<Bucket>mybucket</Bucket>
<RequestId>********</RequestId>
<HostId>********</HostId>
</Error>