Amazon S3の公開設定を色々とためしてみた

![img](https://day-journal.com/memo/images/logo/aws/s3.png)

### Amazon S3の公開設定を色々とためしてみました :tada:  

<br>

事前準備

- Amazon S3のバケット作成とファイル登録  
[Amazon S3 #001 - バケット作成](https://day-journal.com/memo/amazon-s3-001)  
[Amazon S3 #002 - ファイル登録・ダウンロード](https://day-journal.com/memo/amazon-s3-002)  

<br>

## ファイル公開

Amazon S3のファイルを公開する方法です。  

アクセス許可 → ブロックパブリックアクセス(バケット設定)の「編集」をクリック。

![画像](https://day-journal.com/memo/images/amazon-s3-003_01.png)

パブリックアクセスをすべてブロックのチェックをOFF。

![画像](https://day-journal.com/memo/images/amazon-s3-003_02.png)

これだけでは公開されないので、バケットポリシーの「編集」をクリック。

![画像](https://day-journal.com/memo/images/amazon-s3-003_03.png)

バケットポリシーを設定 → 「変更の保存」をクリック。今回は、Amazon S3からオブジェクトを取得するためのアクセス許可を付与。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*"
        }
    ]
}
```

![画像](https://day-journal.com/memo/images/amazon-s3-003_04.png)

アクセス権限が公開になっているのを確認。

![画像](https://day-journal.com/memo/images/amazon-s3-003_05.png)

URLに直接アクセスするとファイルが表示されます。

![画像](https://day-journal.com/memo/images/amazon-s3-003_06.png)

<br>

## 指定IPのみファイル公開

Amazon S3の指定IPのみファイルを公開する方法です。  

アクセス許可 → ブロックパブリックアクセス(バケット設定)の「編集」をクリック。

![画像](https://day-journal.com/memo/images/amazon-s3-004_01.png)

パブリックアクセスをすべてブロックのチェックをOFF。

![画像](https://day-journal.com/memo/images/amazon-s3-004_02.png)

これだけでは公開されないので、バケットポリシーの「編集」をクリック。

![画像](https://day-journal.com/memo/images/amazon-s3-004_03.png)

バケットポリシーを設定 → 「変更の保存」をクリック。今回は、Amazon S3からオブジェクトを取得するためのアクセス許可と指定IPのアクセス許可を付与。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*"
        },
        {
            "Sid": "IP",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "許可したいIP"
                }
            }
        }
    ]
}
```

![画像](https://day-journal.com/memo/images/amazon-s3-004_04.png)

アクセス権限が公開になっているのを確認。IP制限をした場合は公開表示にはならない。

![画像](https://day-journal.com/memo/images/amazon-s3-004_05.png)

設定したIPからURLに直接アクセスするとファイルが表示されます。指定IP以外はファイルが表示されません。

![画像](https://day-journal.com/memo/images/amazon-s3-004_06.png)

<br>

## 指定期間のみファイル公開

Amazon S3の指定期間のみファイルを公開する方法です。  

対象のファイルを選択。

![画像](https://day-journal.com/memo/images/amazon-s3-005_01.png)

オブジェクトアクション → 「署名付きURLで共有」をクリック。

![画像](https://day-journal.com/memo/images/amazon-s3-005_02.png)

対象の期間を設定 → 「署名付きURLを作成」をクリック。クリップボードにコピーされたURLにアクセスすると期間中ファイルが表示されます。


![画像](https://day-journal.com/memo/images/amazon-s3-005_03.png)

<br>

## 静的ウェブサイトホスティング

Amazon S3の静的ウェブサイトホスティングで公開する方法です。

公開したいHTML等のファイル一式をアップロード。

![画像](https://day-journal.com/memo/images/amazon-s3-007_03.png)

アクセス許可 → ブロックパブリックアクセス(バケット設定)の「編集」をクリック。

![画像](https://day-journal.com/memo/images/amazon-s3-007_04.png)

パブリックアクセスをすべてブロックのチェックをOFF。

![画像](https://day-journal.com/memo/images/amazon-s3-007_05.png)

これだけでは公開されないので、バケットポリシーの「編集」をクリック。

![画像](https://day-journal.com/memo/images/amazon-s3-007_06.png)

バケットポリシーを設定 → 「変更の保存」をクリック。今回は、Amazon S3からオブジェクトを取得するためのアクセス許可を付与。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*"
        }
    ]
}
```

![画像](https://day-journal.com/memo/images/amazon-s3-007_07.png)

アクセス権限が公開になっているのを確認。

![画像](https://day-journal.com/memo/images/amazon-s3-007_08.png)

プロパティ → 静的ウェブサイトホスティングの「編集」をクリック。

![画像](https://day-journal.com/memo/images/amazon-s3-007_09.png)

有効にする・静的ウェブサイトをホストする・ルートのHTMLを設定 → 「変更の保存」をクリック。

![画像](https://day-journal.com/memo/images/amazon-s3-007_10.png)

静的ウェブサイトホスティングが有効になったのを確認します。URLが発行されるのでアクセスします。

![画像](https://day-journal.com/memo/images/amazon-s3-007_11.png)

アップロードしたWebSiteが表示されます。

![画像](https://day-journal.com/memo/images/amazon-s3-007_12.png)

<br>

Amazon S3単体で色々と設定可能なことが改めて把握できました。AWS Amplify・ServerlessFramework・CloudFormation等でも構築可能ですが、AWSマネジメントコンソールからS3を操作し、基礎からふりかえるのもすごく大事だなと思いました :bulb: 

次回は、Amazon CloudFrontと組み合わせた別の方法も紹介できたらと思います。

<br>

Amazon S3について、他にも記事を書いています。よろしければぜひ :bow:
<a href="https://day-journal.com/memo/tags/Amazon-S3" target="_blank">tags - Amazon S3</a>

やってみたシリーズ :grinning:
<a href="https://day-journal.com/memo/tags/Try" target="_blank">tags - Try</a>

<br>
<br>

<a href="https://dayjournal.booth.pm" target="_blank"><img src="https://day-journal.com/memo/images/etc/book.png" alt="book"></a>