Amazon Simple Storage Service

【S3】CORS設定のXML形式での記述エラー解決法

はじめに

こんにちは、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) が正常に編集されました。」と表示されれば大丈夫です。

おわりに

困っている方に届きますように……

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA