概要
ウェブアクセラレータ(CDN)の配信設定で、「オリジン種別:オブジェクトストレージ」で「Amazon S3」を指定する方法です。
注意事項
ウェブアクセラレータの「オリジン種別:オブジェクトストレージ」の公式サポートは、さくらの「オブジェクトストレージ」のみです。
オリジンにAmazon S3 を利用する場合、公式サポートはされていないので、あくまで自己責任での利用になります。
Amazon S3の設定
1. 配信対象バケットの作成
バケットの作成 - Amazon Simple Storage Service の手順でバケットを作成します。
<バケットの作成例>
- バケット名:webaccel-test
- AWSリージョン:アジアパシフィック (東京) ap-northeast-1
2. IAMのポリシー・グループ・ユーザーの作成(ウェブアクセラレータ連携用)
参考 : IAM ユーザー - AWS Identity and Access Management
IAM管理画面より、「ポリシー」を作成します。
<ポリシーの作成例(対象バケットの読み取り専用)>
- 名前 : WebaccelTestReadOnly
- 設定内容 :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "WebaccelTestReadOnly",
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::webaccel-test",
"arn:aws:s3:::webaccel-test/*"
]
}
]
}
IAM管理画面より、「ユーザーグループ」を新規作成します。
<ユーザーグループの作成例>
- ユーザーグループ名 : webaccel-read-only
- ポリシー : WebaccelTestReadOnly
- グループ : webaccel-read-only
IAM管理画面より、「ユーザー」を作成します。
<ユーザーの作成例>
- ユーザー名 : webaccel-read-only-user
- AWS アクセスの種類 : アクセスキー - プログラムによるアクセス
※ ここで作成されたユーザーの「アクセスキーID」「シークレットアクセスキー」をメモします。
3. IAMのポリシー・グループ・ユーザーの作成(コンテンツアップロード用)
IAM管理画面より、「ポリシー」を作成します。
<ポリシーの作成例(対象バケットの読み書き)>
- 名前 : WebaccelTestReadWrite
- 設定内容 :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "WebaccelTestReadWrite",
"Effect": "Allow",
"Action": [
"s3:*Object",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::webaccel-test",
"arn:aws:s3:::webaccel-test/*"
]
}
]
}
IAM管理画面より、「ユーザーグループ」を新規作成します。
<ユーザーグループの作成例>
- ユーザーグループ名 : webaccel-read-write
- ポリシー : WebaccelTestReadWrite
- グループ : webaccel-read-write
IAM管理画面より、「ユーザー」を作成します。
<ユーザーの作成例>
- ユーザー名 : webaccel-read-write-user
- AWS アクセスの種類 : アクセスキー - プログラムによるアクセス
※ ここで作成されたユーザーの「アクセスキーID」「シークレットアクセスキー」をメモします。
4.コンテンツのアップロード
「3. IAMのポリシー・グループ・ユーザーの作成(コンテンツアップロード用)」で用意した
たwebaccel-read-write-userユーザーの「アクセスキーID」「シークレットアクセスキー」を使ってコンテンツをアップロードします。
※ 本手順では、Ubuntu 18.04 の環境にて、awscliで準備しました。
- 設定例 : s3-webaccel-test-read-write というプロファイルの作成
$ aws configure --profile s3-webaccel-test-read-write
AWS Access Key ID [None]: 「webaccel-read-write-user」のアクセスキーを入力
AWS Secret Access Key [None]: 「webaccel-read-write-user」のシークレットアクセスキーを入力
Default region name [None]: "ap-northeast-1" を入力
Default output format [None]: "json" を入力
$ tail -3 ~/.aws/config
[profile s3-webaccel-test-read-write]
region = ap-northeast-1
output = json
- 接続確認
$ aws --profile s3-webaccel-test-read-write --endpoint-url=https://s3.ap-northeast-1.amazonaws.com s3 ls s3://webaccel-test/
$
→ 「webaccel-test」バケットにアクセス可能なことを確認します。まだ空の状態だと、このような状態です。
※「An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied」の応答が表示された場合、ポリシー設定を見直す必要があります。
- 配信用テストファイルのアップロード
$ mkdir webaccel-test
$ cd webaccel-test
~/webaccel-test $
~/webaccel-test $ vim index.html
<html>
<head>
<title>配信テストページ</title>
</head>
<body>
配信テストページです。<br/>
</body>
</html>
~/webaccel-test $ aws --profile s3-webaccel-test-read-write --endpoint-url=https://s3.ap-northeast-1.amazonaws.com s3 sync ~/webaccel-test s3://webaccel-test/
upload: ./index.html to s3://webaccel-test/index.html
- アップロード済みなことを確認します
$ aws --profile s3-webaccel-test-read-write --endpoint-url=https://s3.ap-northeast-1.amazonaws.com s3 ls s3://webaccel-test/
2022-04-26 17:22:26 125 index.html
- 直接HTTPSアクセスした際に、閲覧できないことを確認します。
$ curl https://s3.ap-northeast-1.amazonaws.com/webaccel-test/index.html
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>...(略)...</HostId></Error>
ウェブアクセラレータの設定
参考(1) : 初期設定(オブジェクトストレージ・独自ドメイン利用) | ウェブアクセラレータ | さくらのクラウド ドキュメント
参考(2) : Let's Encrypt 自動更新証明書の利用 | ウェブアクセラレータ | さくらのクラウド ドキュメント
-
【さくらのクラウド ホーム】 から 【ウェブアクセラレータ(CDN)】を選択
-
【サイト追加】 から 「サイト新規新規追加」に必要情報を入力して、【保存】で追加します。
設定例 :
ドメイン種別 : 独自ドメイン
サイト名 : S3テスト
公開ドメイン名 : ***.example.jp
リクエストプロトコル : httpsにリダイレクト
オリジン種別:オブジェクトストレージ
バケット名: webaccel-test
S3エンドポイント: s3.ap-northeast-1.amazonaws.com
S3リージョン : ap-northeast-1
アクセスキーID : 【「webaccel-read-only-user」のアクセスキーID】
シークレットアクセスキー :【「webaccel-read-only-user」のシークレットアクセスキー】
デフォルトのキャッシュ期間: 有効 2600秒
ドキュメントインデクス: 有効
Varyサポート: 無効
※ 今回の記事では、オリジンに、STEP1で用意した、「webaccel-test」バケット、「webaccel-test」バケットのみのREAD(読み込み)権限のパーミッション「webaccel-read-only-user」のアクセスキーID・シークレットアクセスキーを指定します。
*「サイト新規設定追加完了」画面に表示された「CNAME先|サブドメイン ********.user.webaccel.jp.」をメモします。
- 対象ドメインのCNAMEを設定し、確認します。
確認例 :
$ dig ***.example.jp
(略)
;; ANSWER SECTION:
***.example.jp. 60 IN CNAME ********.user.webaccel.jp.
********.user.webaccel.jp. 3599 IN CNAME ********.gslb1.sakura.ne.jp.
********.gslb1.sakura.ne.jp. 9 IN A ********
(略)
- 「サイト一覧」サイト一覧→「対象サイト」→「設定」から、「有効にする」を選択し、サイトを有効化します。
- 「サイト一覧」サイト一覧→「対象サイト」→「設定」から、「SSL証明書」の「Let's Encrypt 自動更新証明書を使用する(無料)」を「自動更新を有効にする」を選択し、Let's Encrypt自動更新証明書を有効化します。(この記事ではこちらを使っていますが、持ち込み証明書の利用も可能です。)
配信確認
- 再度、直接HTTPSアクセスした際に、閲覧できないことを確認します。
$ curl https://s3.ap-northeast-1.amazonaws.com/webaccel-test/index.html
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>...(略)...</HostId></Error>
- ウェブアクセラレータ経由で、HTTPSアクセスした際に、閲覧できる(配信されている)ことを確認します。
$ curl https://***.example.jp/index.html
<html>
<head>
<title>配信テストページ</title>
</head>
<body>
配信テストページです。<br/>
</body>
</html>
- 複数回アクセスをした際に、キャッシュより配信されていること(x-cacheヘッダの値がHITになっていること)を確認します。( 参考 : 【必読】ファイルがキャッシュされているかを確認したい | トラブルシューティング | ウェブアクセラレータ | さくらのクラウド ドキュメント )
$ curl -v https://***.example.jp/index.html
(略)
< x-cache: HIT
(略)
以上、さくらのウェブアクセラレータ(CDN)のオリジンにAmazon S3を試してみた紹介でした!
※ 繰り返しになりますが、オリジンにAmazon S3 を利用する場合、公式サポートはされていないので、あくまで自己責任での利用になります。
参考記事
この記事と同等の内容を、さくらの「オブジェクトストレージ」で実施する場合の参考記事