【AWS】CloudFrontからOAI/OACを利用してアクセス制限付きのS3からリソースを取得する方法


※ 当ページには【広告/PR】を含む場合があります。
2020/04/21
2024/10/06
【AWS】API GatewayのAPIエンドポイントをカスタムドメイン名を付けてRoute53で公開する基本的な手順
[AWS] 徹底図解!お名前.comで取得したDNSをAWS Route53/Cloudfrontで管理するまでの手順
蛸壺の技術ブログ|AWS CloudFront経由でS3からリソースを取得する設定

これまで個人的な趣向で、AWSのLambdaでRESTfulなAPIの構築しか念頭に入れていなかったので、S3バケットからテキストから画像などありとあらゆるリソースをAPIからGETでリソースをリクエストして、拡張子ごとに適切に中身を処理して…かなり面倒です。

特にリソースが画像の場合は、base64形式でリレーしてあげねばならず、そんな無理にAPIに画像を引張ってきてもらわなくても、CloudFrontから直にS3を連れてきて貰えばいいよね?というのが今回のモチベーションです。

ただ今回の記事のネタは、ネットで“CloudFront S3”で検索していただけたら、設定方法がたくさんヒットします。

割と使い古されているネタですので、あくまで個人の備忘録&復習にどうぞ。


合同会社タコスキングダム|蛸壺の技術ブログ【AWS独習術】AWSをじっくり独学したい人のためのオススメ書籍&教材特集

図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書

簡単なテスト環境準備

とりあえず適当な名前でS3バケットを作成し、jpeg画像(0.jpg)を突っ込んでおきます。

ファイル構造…といえるほど大層なものではないですが、バケットのルートからは以下のように配置しておきます。

            
            $ tree
.
└── article1
    └── 0.jpg
        

合同会社タコスキングダム|蛸壺の技術ブログ【AWS独習術】AWSをじっくり独学したい人のためのオススメ書籍&教材特集

図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書

CloudFront 側の設定

今回の目標は、ブラウザ等でhttp://xxxxxxxxxxxx.cloudfront.net/article1/0.jpgを表示できるようにする事です。

それでは早速、CloudFrontのコンソールに切り替えて、適当なディストリビューションを新規作成してみます。

まずはCloudFrontで新規ディストリビューションを作成します。

合同会社タコスキングダム|蛸壺の技術ブログ

合同会社タコスキングダム|蛸壺の技術ブログ

次に、サラのCloudFrontディストリビューションに、前の工程で作ったS3バケットを指定したアクセス制限をかける設定を行います。

ただし、2024年現在で、この記事の当初作成したときに説明していた
「OAI(Origin Access Identity)」によるアクセス制限が非推奨となり、後継の技術である「OAC(Origin Access Control)」の利用を推奨になっています。

とりあえず
OAIもまだ利用できなくなっているわけではないので、OACと合わせて以降でその設定方法を説明します。

(旧式のため非推奨)OAIによるアクセス制限の設定

せっかくですので、OAIによるS3バケットのアクセス制限の手順を記録として残しておきます。

実用だけをチェックしたい方は、この節の内容をスキップして、次の「OACによるアクセス制限の設定手順」に進んでください。

まず、
Origin Pathには、今回アクセスしたい、S3バケットのオリジンを指定します。

合同会社タコスキングダム|蛸壺の技術ブログ

次に、以下のように選択肢を設定します。

合同会社タコスキングダム|蛸壺の技術ブログ

なお、'Grant Read Permission on Bucket'をNoにして、あとでS3のバケットポリシーを手動で設定しても良いのですが面倒な人間はYesにしとくことで、下の写真のように自動で更新してもらえます。

自前のバケットポリシー更新前:

合同会社タコスキングダム|蛸壺の技術ブログ

CloudFrontの自動書き換え適用後:

合同会社タコスキングダム|蛸壺の技術ブログ

とりあえず、他の設定項目も多いですが、他はそのまま既定値にしといて、Createボタンをおしてこのディストリビューションを作成します。

作成から体感15分ほどで、'Status'が'Deployed'に変わるまで待ちます。

デプロイ後、サイドメニューから'Origin Access Identity'を覗くと、以下のように先ほど作成したディストリビューションに、新しいオリジンアクセスアイデンティティが発行されていれば成功です。

合同会社タコスキングダム|蛸壺の技術ブログ

では早速、このディストリビューションのDomain Nameを、ブラウザのアドレスにコピペしてみましょう。

合同会社タコスキングダム|蛸壺の技術ブログ

すると、CloudFrontのドメインからリソース画像にアクセスできます。

合同会社タコスキングダム|蛸壺の技術ブログ

OACによるアクセス制限の設定

※この節の内容は2024年10月に追加したものです。

それではOACによるアクセス制限手順のほうも説明していきます。

まずはCFディストリビューションから、
[オリジン] > [オリジンを作成]をクリックします。

合同会社タコスキングダム|蛸壺の技術ブログ

設定画面に移り、まず
[Origin domain]の項目で制限対象となるS3バケットを選択しましょう。

合同会社タコスキングダム|蛸壺の技術ブログ

次の設定項目で、
[Origin access control settings (recommended)]をチェックし、[Create new OAC]ボタンを押すと、OACが発行されます。

合同会社タコスキングダム|蛸壺の技術ブログ

このOACからバケットポリシーを作るのですが、直下にある
[ポリシーをコピー]ボタンをクリックすると、以下のような自動生成されたポリシーがクリップボードにコピーされます。

            
            {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<バケット名>/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::012345678901:distribution/<CFディストリビューションID>"
                }
            }
        }
    ]
}
        
あとは、[S3バケットアクセス許可に移動]のリンクを踏んで、S3のダッシュボード画面に移り、バケットポリシーをコピーした内容に変更したらOKです。

合同会社タコスキングダム|蛸壺の技術ブログ

先程の内容と同様に、ディストリビューションのDomain Nameを、ブラウザのアドレスにコピペしてみましょう。

合同会社タコスキングダム|蛸壺の技術ブログ

すると、CloudFrontのドメインからリソース画像にアクセスできていれば設定完了です。

合同会社タコスキングダム|蛸壺の技術ブログ


合同会社タコスキングダム|蛸壺の技術ブログ【AWS独習術】AWSをじっくり独学したい人のためのオススメ書籍&教材特集

図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書

HTTPSでアクセスする

上の設定まででCloudFrontから十分アクセス可能ですが、できればSSL対応して使いたいです。そんな時に、デストリビューションのBehavior タグを以下のように編集してみます。

合同会社タコスキングダム|蛸壺の技術ブログ

そして再デプロイ後に、アクセスを試みると、

合同会社タコスキングダム|蛸壺の技術ブログ

キチンとhttpsでアクセスできていることがわかります。


合同会社タコスキングダム|蛸壺の技術ブログ【AWS独習術】AWSをじっくり独学したい人のためのオススメ書籍&教材特集

図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書

まとめ

以上、CloudFrontとS3からファイルを取得する基本を簡単にまとめてみました。

おそらくAWS初学者が学習の最初に構築してみる代表的なマイクロサービスパターンの一つですので、ダッシュボードでの設定方法を確実に身につけましょう。

参考

オリジンアクセスアイデンティティを使用して Amazon S3 コンテンツへのアクセスを制限する

特定バケットに特定ディストリビューションのみからアクセスできるよう設定する

CDP:Cache Distributionパターン

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。

合同会社タコスキングダム|蛸壺の技術ブログ【AWS独習術】AWSをじっくり独学したい人のためのオススメ書籍&教材特集