LoginSignup
0
0

More than 1 year has passed since last update.

AWS CLIで Web サイトを構築、管理、運用する(3日目)

Last updated at Posted at 2021-12-02

2日目ではアクセスロギングの設定を入れて、記録が取れるようにしました。

Web サイトは公開したら終わりじゃないですよね?定期的に更新しますよね。
というわけで、更新時にひっかかる問題を解決していきましょう。

3日目の要約

記事更新時のちょっとひと手間を解消していくよ!

AWS CLI の準備

このあたりをみて、好きなバージョンとお使いのOSにあった環境設定をしてくださいね。
なんなら、 AWS CloudShell で実行するのも楽でよいと思います。
この記事シリーズは、AWS CloudShell で実行し、実行例を載せています。

バージョン1
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv1.html

バージョン2
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2.html

概要

Amazon Simple Storage Service(Amazon S3)のバケットポリシーを AWS CLI で設定、構築する

さあ、やってみよう!

その前に

1日目で開設した Web サイトにアクセスしてみましょ

curl http://<BUCKETNAME>.s3-website-ap-northeast-1.amazonaws.com

以下の様に出力されるはずです。

<!DOCTYPE html>
<html lang="ja">
<head>
  <title>Advent calendar 2021</title>
</head>
<body>
  <h1>Hello world!!</h1>
</body>
</html>

1日目に作成したファイルが残っていれば以下の様に編集ください。なければ、以下をコピペでも構いません。
h2 タグの行を追加しています。

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <title>Advent calendar 2021</title>
</head>
<body>
  <h1>Hello world!!</h1>
  <h2>Advent calendar 2021 DAY 3</h2>
</body>
</html>

このファイルを s3 にアップロードします。 s3 cp コマンドを使用します。

aws s3 cp ./index.html s3://<BUCKETNAME>/index.html

upload: ./index.html to s3://<BUCKETNAME>/index.html

アップロードができたら、更新できているか curl コマンドでアクセスしてみます。

curl http://<BUCKETNAME>.s3-website-ap-northeast-1.amazonaws.com

すると、どうでしょう。HTTP403 Forbidden が返ってくるではないですか!

<html>
<head><title>403 Forbidden</title></head>
<body>
<h1>403 Forbidden</h1>
<ul>
<li>Code: AccessDenied</li>
<li>Message: Access Denied</li>
<li>RequestId: ***********</li>
<li>HostId: ***********************************************</li>
</ul>
<hr/>
</body>
</html>

1日目を振り返っていただくとわかると思いますが、「コンテンツを公開する」をしないとならないのです。
同名のファイルといえど、オブジェクトストレージの仕様によりオブジェクト(ファイル)がごっそりと書き換えられるで、公開設定が無い状態になってしまいます。

アップロードと合わせて公開設定を有効化するようにしてもよいですが、バケットポリシーを設定することで、恒久的に公開状態(読み取りOK)状態にすることが可能です。

ただし、対象のバケット内が公開状態になるので、機密情報や個人情報が入ったファイルの格納はしないようにしてください。また、そういったファイルが入る可能性があるのであれば、個別に公開設定をいれるようにしてください。

以上を踏まえてつづきをどうぞ。

バケット ポリシー を設定する

バケットポリシーは JSON 形式で指定します。AWS CLI は JSON ファイルを読み込むことができるので、ポリシーを記述した JSON ファイルを先に作成しておくと作業がしやすいです。

バケットポリシーファイルを作成する

好きなテキストエディタで以下の内容のJSONファイル(テキストファイル)を作成します。
<BUCKETNAME> の箇所はS3 静的 WEB サイトホスティングを行っているバケット名を指定します。

bucketpolicy.json
{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"PublicWebHosting",
      "Effect":"Allow",
      "Principal": "*",
      "Action":"s3:GetObject",
      "Resource":"arn:aws:s3:::<BUCKETNAME>/*"
      }
  ]
}

コマンドを実行する

s3api put-bucket-policy コマンドでバケットポリシーを設定します。

aws s3api put-bucket-policy --bucket <BUCKETNAME> --policy file://bucketpolicy.json

このコマンドも正常終了しても特に何も返しません。

Web サイトへアクセスする

バケットポリシーを設定したので、改めて、 curl コマンドでアクセスしてみます。

curl http://<BUCKETNAME>.s3-website-ap-northeast-1.amazonaws.com

バケットポリシーが意図した通りに設定できていれば、以下の様に出力されます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <title>Advent calendar 2021</title>
</head>
<body>
  <h1>Hello world!!</h1>
  <h2>Advent calendar 2021 DAY 3</h2>
</body>
</html>

h2 タグの行が入ったコンテンツが無事に取得できました。
適宜、ファイルを更新しアップロードを行って動作確認をしてみてください。

まとめ

S3 で配信している Web サイトのコンテンツを更新する場合でも公開設定が必要なことがわかりました。
機密情報や個人情報、センシティブな情報がない Web サイトの場合は本設定をいれることで運営・運用がしやすくなると思います。
※個別公開も公開手順の整備やスクリプト化すればよいだけの話ではありますが💦

  • 今回使ったコマンド
    • s3 cp
    • s3api put-bucket-policy
0
0
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
0
0