CloudFrontとS3とWordpressの設定についてです。
CloudFront経由のアクセスをパスでs3とELBで振り分けるようにした際の備忘録です。
AWS
S3
バケット作成
作成したパブリックアクセス設定を
「このバケットのパブリックアクセスコントロールリスト (ACL) を管理する」->
「新規のパブリック ACL と、パブリックオブジェクトのアップロードをブロックする (推奨)」はFalseにする
*これを設定しないとWordpressのメディアアップロードから画像をアップロードできませんでした。
IAMロール作成
EC2からS3への権限を付与する
IAMポリシーを作成
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:CreateBucket",
"s3:DeleteObject",
"s3:Put*",
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::{Bucket Name}",
"arn:aws:s3:::{Bucket Name}/*"
]
}
]
}
IAMロールを作成
該当のEC2インスタンスにIAMロールを付与
CloudFront
Originsの作成
「Create Origin」から作成する
Origin Domain Name
先ほど作成したS3バケットを選択する
Restrict Bucket Access
「Yes」を選択するとOrigin Access IdentityとGrant Read Permissions on Bucketの設定項目が出現する
Origin Access Identity
「Create a New Identity」を選択
「Comment」は自動作成されたもの
Grant Read Permissions on Bucket
「Yes, Update Bucket Policy」を選択
*こちらを設定すると対象S3のバケット->アクセス権限->バケットポリシーに以下のようなものが作成される
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity xxxxxxxxxxxxxx"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::{Bucket Name}/*"
}
]
}
Behaviorsの設定
「Create Behavior」から作成する
今回はwp-content/uploads配下の画像をs3から利用したいので、
「Path Pattern」を「/wp-content/uploads/*」 にする。
Wordpress
プラグイン
「WP Offload Media Lite for Amazon S3, DigitalOcean Spaces, and Google Cloud Storage」を使用する
インストール
インストール->有効化する。
*私の環境の場合、php-gdが インストールされていなかったので、インストールする。
設定
「設定」->「Offload Media」から設定する
Storage Provider
AmazonS3の「My server is on Amazon Web Services and I'd like to use IAM Roles」を選択
この場合wp-config.php以下を追加します。
define('AS3CF_AWS_USE_EC2_IAM_ROLE', true);
Bucket
先ほど作成したS3のバケット名を設定する
URL Rewriting
CloudFrontから配信する場合、Custom Domain (CNAME)にCloudFrontで設定しているCNAMEを設定する
Remove Files From Server
アップロードした画像をサーバ上に残さないよう変更