目次
はじめに
こんにちは、omkです。
最近S3のコンソール画面が変わったようでどこに何があるかまだ慣れないです。
そんな中でS3でCORSを設定したときに、サンプル通りXML形式で記述するとエラーになったのでJSONで書いて解決した話を記します。
↓エラー内容
Expected params.CORSConfiguration.CORSRules to be an Array
CORSとは
CROSとは「Cross-Origin Resource Sharing」の略で異なるオリジン間でリソースを共有するためのものです。
参考:https://developer.mozilla.org/ja/docs/Web/HTTP/CORS
オリジンはhttpなどのスキーム(プロトコル)とexample.comなどのホスト(ドメイン)と80などのポート番号からなります。
参考:
https://developer.mozilla.org/ja/docs/Glossary/Origin
ざっくり別のドメインからS3のリソースにアクセスするときにS3側にCORSの許可設定が必要だと思っていただけると。
CORS設定
AWSの公式ドキュメントではXML形式で書かれています。
バケットで CORS を設定する方法
クロスオリジンリクエストを許可するようにバケットを設定するには、CORS 設定を作成します。これは、バケットへのアクセスを許可するオリジン、各オリジンをサポートするオペレーション (HTTP メソッド)、およびその他のオペレーション固有の情報を識別するルールを含む XML ドキュメントです。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/cors.html
これを実際にコピぺしてみます。行数が多いのでCORSRuleは1つに絞ります。
(CORSの設定入力画面はコンソールの「アクセス許可」欄の一番下にあります)
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://www.example1.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
エラーが出ます。調べていてもXML形式で書かれているものばかりですが最近変わったのでしょうか。
不明なエラー
予期しないエラーが発生しました。
API レスポンス
Expected params.CORSConfiguration.CORSRules to be an Array
レスポンスを見てみると配列にしろとのことです。
こちらですがJSONで配列を持たせるように書くと直るようです。
サンプルを以下のように書き直しました。順番と「ExposeHeaders」は設定時に勝手に書き換わっています。
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"http://www.example1.com"
],
"ExposeHeaders": []
}
]
エラーが消えました。
「Cross-Origin Resource Sharing (CORS) が正常に編集されました。」と表示されれば大丈夫です。
おわりに
困っている方に届きますように……
アーキテクト課のomkです。
AWSについて雑多に取り組んだ内容を発信しています!!