LoginSignup
2
3

More than 5 years have passed since last update.

WordpressのCloudFront経由のアクセスをELBとS3に振り分ける

Posted at

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以下を追加します。

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

アップロードした画像をサーバ上に残さないよう変更

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3