0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[AWS]CloudFront OAI ・OAC メモ

Last updated at Posted at 2025-01-26

AWSのCDNサービスCloudFrontのOAI・OAC機能についてまとめる。

1. 概要

OAI (Origin Access Identity)

  • 概要
    • CloudFront と S3 バケット間のアクセス制御に特化した仕組み。
    • OAI を使用して、S3 バケットをパブリックアクセス不可にしつつ、CloudFront 経由でのみオブジェクトを取得可能にすることができる。
    • S3 バケットポリシーで「CloudFront の OAI からのアクセスだけ許可」する形で制御する。

OAC (Origin Access Control)

  • 概要
    • OAI の後継的な機能。
    • OAI と同様に、CloudFront からのアクセスのみをオリジンで許可する仕組みだが、より柔軟かつ拡張性が高い。
    • S3 以外のオリジン(カスタムオリジンなど)にも対応可能で、今後は OAC の利用が推奨されつつある。
    • OAIと比較して優れている点
      • セキュリティ – OAC は、短期間のクレデンシャル、頻繁なクレデンシャルのローテーション、およびリソースベースのポリシーのような強化されたセキュリティプラクティスで実装されている。
      • 包括的な HTTP メソッドのサポート – OAC は GET、PUT、POST、PATCH、DELETE、OPTIONS、および HEAD をサポートする。
      • SSE-KMS – OAC は、SSE-KMS で暗号化された S3 オブジェクトのダウンロードとアップロードをサポートする。

2. 用途

OAI の用途

  1. S3 バケットの直接アクセスをブロック
    • バケットを完全にプライベートにし、OAI を用いて CloudFront 経由でのみファイルにアクセスさせる。
  2. セキュアなコンテンツ配信
    • S3 バケットの URL を隠蔽し、CloudFront のディストリビューション URL を通じたアクセスに統一。

OAC の用途

  1. OAI の拡張・代替機能として
    • OAI から移行しやすく、機能的にはほぼ上位互換。
  2. 複数のオリジンタイプでの柔軟なアクセス制御
    • S3 に限らず、カスタムオリジンや他の AWS サービス(Lambda@Edge など)にも対応。
  3. 将来のセキュリティ拡張への対応
    • OAI では難しかったさらなる制御機能(IAM ポリシーとの連携など)に柔軟に対応可能。

3. 設定方法

OAI の設定方法

  1. S3 バケットをプライベートに設定

    • S3 コンソールやバケットポリシーで「パブリックアクセスをブロック」する。
  2. CloudFront で OAI を作成

    • CloudFront コンソールでディストリビューションを作成/編集する際に「オリジンアクセスアイデンティティの設定」から作成。
    • 作成時に自動的にバケットポリシーへ反映するオプションを選択する/手動設定する。
  3. バケットポリシーの設定

    • OAI に対して s3:GetObject を許可する。

    • 例:

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXX"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-sample-bucket/*"
          }
        ]
      }
      

OAC の設定方法

  1. CloudFront コンソールでオリジンアクセスコントロール (OAC) を有効化
    • 「オリジン」タブでオリジンを追加または編集し、「オリジンアクセスコントロールを作成」を選択。
  2. OAC のタイプを選択
    • S3 バケットの場合は S3Origin として署名付きリクエスト(“Sign requests”)を設定。
    • 必要に応じて "AWS シグネチャバージョン4" を使用するなど設定を行う。
  3. S3 バケットポリシーを自動または手動で更新
    • OAC 作成時に CloudFront がバケットポリシーを自動生成・設定可能。
    • 手動で行う場合は、OAC で作成された IAM エンティティ(または条件付きポリシー)を参照して、s3:GetObject を許可する。
  4. ディストリビューションをデプロイ
    • 設定が完了したらディストリビューションを保存し、デプロイが完了するのを待つ。

4. 仕組み (シーケンス)

以下は、クライアントが OAI/OACを利用したCloudFront 経由で S3 からコンテンツを取得する流れ。

  • OAI: CloudFront は OAI を用いて S3 バケットポリシーで許可された IAM ユーザとしてリクエストを行う。
  • OAC: CloudFront は IAM シグネチャを使ってリクエストし、S3 側でその署名が有効かどうかチェックする(バケットポリシーまたは IAM ポリシーで制御)。

5. 参考文献

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?