概要
AWSとcloudflareを連携させてS3のバケットを独自運用しようという話です。
色々調べてできたのですが、その後わざわざAWSのS3使うメリットも薄れてきたので、
サーバー直置きにする関係でこれを個人的に記録しようというのがきっかけです。
Route53でもできる話なのですが、サーバーがAWSでない時に画像置き場としてS3を使いたい時など有用だと思います。
(具体的にはHrokuとAWSを使ってwordpressで自分のサイトを運営してたのですが、そもそもwordpressくらいなら月に300円程度でそこそこのレンタルサーバーを借りた方がいいなと思いレンタルサーバーに引っ越すついでにこれを行うという私的事情です。)
AWSのS3側の設定
まずはバケットを作成します。バケット名は使用するサブドメイン名と同一にします。
ちなみにバケットは一意な値なので先に取られていたら作成することができません。
今回はサンプルで自分のドメインの nkmt.info に対してサブドメインimage.nkmt.infoを使うという意味でS3のバケットを作っています。
バケットにパーミッションを設定
つくったばかりのバケットには外部からデフォルトでアクセスが禁止されてしまっているので、バケットポリシーを追加し許可をします。
{
"Version": "2020-02-29",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::image.nkmt.info/*"
}
]
}
ちなみに上記の設定はむかしネットで探してきたのですが、参照元を忘れてしまいました。確か公式にも似たようなことが書かれていたと記憶。
アクセスしてみる
適当なファイルをS3にあげてみてアクセスしてみましょう。
例えば下記のURLの場合は、S3のバケット名とその後にフォルダパスとなっています。
https://s3.ap-northeast-1.amazonaws.com/image.nkmt.info/wp-content/uploads/2016/12/server.jpg
※ サーバー引っ越すので上記は見れなくなってます。
ttps://s3.ap-northeast-1.amazonaws.com + バケット名 + ファイルパス
このバケットへのアクセスのURLは別のURLからもアクセス可能です。
ttp:// + バケット名 + .s3.amazonaws.com/ + ファイルパス
これをcloudflareにエイリアスとしてcnameに設定するということです。
cloudflareの設定
cloudflareをDNSとして利用している前提ですので上記のようにすればcnameに設定すればできます。
cnameに入れるのは下記のアドレスです。
ttp:// + バケット名 + .s3.amazonaws.com/ + ファイルパス