サイトアイコン 協栄情報ブログ

CloudFrontでOrigin Access Control (OAC)を利用したアクセス制御のハンズオン


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

はじめに

お疲れ様です、第三システム部の稲村です。

今月8月26日のアップデートでCloudFrontからS3へOrigin Access Control (OAC)を利用したアクセス制御についての発表がされました。

Amazon CloudFront introduces Origin Access Control (OAC)

Origin Access Control (OAC)の利点

下記のような利点が挙げられ、新たにCloudFrontからS3アクセス制限をする場合にはOrigin Access Control (OAC)を積極的に使用していく

・セキュリティの強化
・HTTPメソッドのサポート(GET, PUT, POST, PATCH, DELETE, OPTIONS, HEAD)
・SSE-KMSを使用したS3バケットのダウンロードとアップロードのサポート
・全ての(2022年12月までに開始される)リージョンでOAIをサポート
・SigV4のみで対応しているリージョンへのHTTP/HTTPSを利用したPOSTメソッドのリクエスト

ハンズオン

・既にS3は作成してある(暗号化なし)状態でスタートします

Cloudfrontの設定

ディストリビューションの作成

項目『オリジンドメイン』に対象とするS3バケットを入力する
項目『S3バケットアクセス』にあるOrigin access control settingsを選択する

コントロール設定を作成

特に変更なしで『作成』を押下、他の項目も変更なしで画面下にある『ディストリビューションを作成』を押下する

ポリシーをコピーする

ディストリビューション完成後、画面上部の赤枠部分『ポリシーをコピー』を押下してポリシーのコピーを行う。

S3の設定

バケットポリシーの編集

対象のS3へ移動後、項目『バケットポリシー』の『編集』を押下する

編集後の画面

Origin Access Control (OAC)ポリシーの内容(今回コピーしたポリシーの内容)

{
        "Version": "2008-10-17",
        "Id": "PolicyForCloudFrontPrivateContent",
        "Statement": [
            {
                "Sid": "AllowCloudFrontServicePrincipal",
                "Effect": "Allow",
                "Principal": {
                    "Service": "cloudfront.amazonaws.com"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::tetutetu-test/*",
                "Condition": {
                    "StringEquals": {
                      "AWS:SourceArn": "arn:aws:cloudfront::012345678912:distribution/E1XXXXXXXXXXXX"
                    }
                }
            }
        ]
      }

※参考:従来の Origin Access Control (OAI)でのポリシー

"Principal"の部分に多少の違いが見られます

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E3XXXXXXXXXXXX"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::tetutetu-test/*"
         }
    ]
}

挙動の確認

CloudFront経由でアクセスした際の画面

さいごに

今回は基本的な設定の仕方のみでしたが、実際恩恵を受けるにあたってはSSE-KMS暗号化しているS3にアクセスするパターンの場合とかですかね。とりあえずセキュリティの強化だけを今回のハンズオンできた感じです。
もう少し時間をとって、SSE-KMS暗号化しているS3へのアクセスする場合など切り分けして学習してきます。

モバイルバージョンを終了