S3をWebサーバーにして静的コンテンツを公開する方法を紹介します。

  1. S3パブリック編
  2. S3署名付きURL編 ←コレ!
  3. CloudFrontパブリック編
  4. CloudFront署名付きURL編
  5. CloudFront署名付きCookie編

手順

バケットの作成

まずはバケットを作成しましょう。

マネジメントコンソールでS3のページを開きます。 バケットを作成をクリックします。

s3.console.aws.amazon.com_s3_home_region=ap-northeast-1(iPad).png

バケットの名前を入れて、リージョンを選択します。 バケット名は世界中のS3で一意である必要があります。

s3.console.aws.amazon.com_s3_home_region=ap-northeast-1(iPad) (1).png

署名付きURLで公開する場合は、「バケットのブロックパブリックアクセス設定」はデフォルトのすべてブロックで問題ありません。

s3.console.aws.amazon.com_s3_home_region=ap-northeast-3(iPad).png

これでバケット作成は完了です。

HTMLの格納

作成したバケットを選択します。 そして、HTMLファイルをドラッグアンドドロップします。

s3.console.aws.amazon.com_s3_home_region=ap-northeast-1(iPad) (3).png

設定が色々ありますが、画面最下部のアップロードを実行します。

s3.console.aws.amazon.com_s3_home_region=ap-northeast-1(iPad) (4).png

複数ファイルやフォルダーまるごとアップロードすることも可能です。

公開する

署名付きURLのURLはマネジメントコンソールでは作成できず、CLIなどを利用して作成します。 CloudShellを使うと簡単にCLIを実行できます。

ap-northeast-1.console.aws.amazon.com_cloudshell_home_region=ap-northeast-1(iPad).png

実行するコマンドはaws s3 presignです。

[cloudshell-user@ip-XX-XX-XX-XX ~]$ aws s3 presign s3://website-2721ae93/index.html --expires-in 604800 --region ap-northeast-3

expiresは署名付きURLの有効期限です。(604800を指定すると、一週間有効となります。) 少しだけハマったのですが、CloudShellが東京リージョンで実行されてて、S3のバケットが大阪リージョンの場合、明示的に--region ap-northeast-3をつけないと、無効な署名付きURLが生成されます。(生成は成功しますが、アクセスするとAuthorizationQueryParametersErrorというエラーとなります)

発行された署名付きURLは、クエリパラメータに以下の文字が付与されており、コレが適切に設定されている場合のみ、ファイルにアクセスができるという仕組みです。

X-Amz-Algorithm=XXXXXXXXXX
X-Amz-Credential=XXXXXXXXXX
X-Amz-Date=XXXXXXXXXX
X-Amz-Expires=XXXXXXXXXX
X-Amz-SignedHeaders=XXXXXXXXXX
X-Amz-Security-Token=XXXXXXXXXX
X-Amz-Signature=XXXXXXXXXX