外部ストレージを利用してAmazon S3にファイルをアップロードする
Table of contents
このチュートリアルでは、外部ストレージ を利用して、画像やその他ファイルのアップロード先をご自身のAWS S3へと切り替える手順を説明します。
前提条件
AWSアカウントが作成済みで、ログインしてコンソールにアクセスできることが前提となります。
AWSアカウントの作成については、公式ドキュメントをご覧ください。
概要
設定手順は5つのステップになります。
- S3バケットの作成
- S3バケットに対してCORS設定を追加
- S3バケットへのアクセス権限を定義したIAMポリシーの作成
- IAMポリシーを適用してユーザーを追加
- 追加したユーザーの認証情報をNewtに登録
- ファイルをアップロードして確かめてみる
1. S3バケットの作成
まずはバケットを作成します。
AWSコンソールでS3サービスにバケット名とリージョンを選択します。今回は newt-tutorial
というバケット名で、東京リージョン(ap-northeast-1)にバケットを作成しました。
オブジェクト所有者 > ACL有効 を選択します。
このバケットのブロックパブリックアクセス設定 > パブリックアクセスをすべて ブロック のチェックを外し、オブジェクトの公開を承認します。
最後にバケットを作成します。
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": []
}
]
設定後のイメージ
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/*"
]
}
]
}
設定後のイメージ
次のステップに進み、ポリシー名を設定してポリシーの概要を確認して問題がなければ [ポリシーの作成] をクリックしてポリシーを作成します。
4. IAMポリシーを適用してユーザーを追加
NewtにS3を操作させるためのユーザーを作成します。IAM > ユーザー に移動し、[ユーザーを追加] をクリックします。
ユーザー名を入力し、AWS認証情報タイプを アクセスキー - プログラムによるアクセス
に設定して次のステップに進みます。
アクセス許可の設定で、 既存のポリシーを直接アタッチ
を選択し、先ほど作成したポリシーにチェックを入れてステップを進めユーザーを作成します。
ユーザーの追加が完了したら、アクセスキーIDとシークレットアクセスキーを控えておきます。
5. 追加したユーザーの認証情報をNewtに登録
Newtの管理画面にアクセスし、 スペース設定 > 一般 > 外部ストレージ に移動します。
プロバイダーにAWS S3を選択し、バケット名とリージョン、アクセスキーIDとシークレットアクセスキーをそれぞれ入力して有効化します。
設定に問題がなければ [保存ボタン] をクリックします。
6. ファイルをアップロードして確かめてみる
最後に、メディアライブラリを開きファイルをアップロードしてみます。
アップロードが無事完了して、ファイルのURLが amazonaws.com に切り替わっていれば成功です。