外部ストレージを利用してAmazon S3にファイルをアップロードする

最終更新日:

Table of contents

このチュートリアルでは、外部ストレージ を利用して、画像やその他ファイルのアップロード先をご自身のAWS S3へと切り替える手順を説明します。

前提条件

AWSアカウントが作成済みで、ログインしてコンソールにアクセスできることが前提となります。
AWSアカウントの作成については、公式ドキュメントをご覧ください。

概要

設定手順は5つのステップになります。

  1. S3バケットの作成
  2. S3バケットに対してCORS設定を追加
  3. S3バケットへのアクセス権限を定義したIAMポリシーの作成
  4. IAMポリシーを適用してユーザーを追加
  5. 追加したユーザーの認証情報をNewtに登録
  6. ファイルをアップロードして確かめてみる

1. S3バケットの作成

まずはバケットを作成します。
AWSコンソールでS3サービスにバケット名とリージョンを選択します。今回は newt-tutorialというバケット名で、東京リージョン(ap-northeast-1)にバケットを作成しました。

スクリーンショット2022-07-2216.55.45.png

オブジェクト所有者 > ACL有効 を選択します。

スクリーンショット2022-07-2216.55.56.png

このバケットのブロックパブリックアクセス設定 > パブリックアクセスをすべて ブロック のチェックを外し、オブジェクトの公開を承認します。

スクリーンショット2022-07-2217.02.34.png

最後にバケットを作成します。

スクリーンショット2022-07-2217.00.33.png

2. S3バケットにCross-Origin-Resource-Sharing (CORS) の設定を追加

NewtからS3へのファイルアップロードにはPresigned URLという仕組みを利用します。NewtからS3への直接アップロードを可能にするために作成したバケットに対してCORSの設定を行いましょう。
バケット詳細ページに移動し、アクセス許可 > Cross-Origin-Resource-Sharing (CORS) > 編集 をクリックし、下記JSONを貼り付け https://app.newt.so からのHEAD, GET, PUT, POST, DELETE リクエストを許可します。

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "HEAD",
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "https://app.newt.so"
        ],
        "ExposeHeaders": []
    }
]

設定後のイメージ
スクリーンショット2022-08-1915.41.44.png

3. S3バケットへのアクセス権限を定義したIAMポリシーの作成

ユーザーにS3を操作する権限を付与するためにポリシーを作成します。
IAM > ポリシー に移動し [ポリシーを作成] をクリックします。JSONタブを開き、下記JSONを貼り付けます。 your-bucket-name となっている部分は、作成したバケット名に書き換えてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::your-bucket-name",
                "arn:aws:s3:::your-bucket-name/*"
            ]
        }
    ]
}

設定後のイメージ
スクリーンショット2022-08-1915.49.22.png

次のステップに進み、ポリシー名を設定してポリシーの概要を確認して問題がなければ [ポリシーの作成] をクリックしてポリシーを作成します。

スクリーンショット2022-08-1915.50.04.png

4. IAMポリシーを適用してユーザーを追加

NewtにS3を操作させるためのユーザーを作成します。IAM > ユーザー に移動し、[ユーザーを追加] をクリックします。
ユーザー名を入力し、AWS認証情報タイプを アクセスキー - プログラムによるアクセス に設定して次のステップに進みます。

スクリーンショット2022-08-1916.43.01.png

アクセス許可の設定で、 既存のポリシーを直接アタッチ を選択し、先ほど作成したポリシーにチェックを入れてステップを進めユーザーを作成します。

スクリーンショット2022-08-1916.45.04.png

ユーザーの追加が完了したら、アクセスキーIDとシークレットアクセスキーを控えておきます。
スクリーンショット2022-08-1916.51.34.png

5. 追加したユーザーの認証情報をNewtに登録

Newtの管理画面にアクセスし、 スペース設定 > 一般 > 外部ストレージ に移動します。
プロバイダーにAWS S3を選択し、バケット名とリージョン、アクセスキーIDとシークレットアクセスキーをそれぞれ入力して有効化します。
設定に問題がなければ [保存ボタン] をクリックします。

スクリーンショット2022-08-1916.57.33.png

6. ファイルをアップロードして確かめてみる

最後に、メディアライブラリを開きファイルをアップロードしてみます。
アップロードが無事完了して、ファイルのURLが amazonaws.com に切り替わっていれば成功です。

NewtMade in Newt