Amazon CloudFrontを利用する際によくある要望として、
- S3のファイルへ直接アクセスできないようにしたい
- 必ずCloudFrontを経由してS3を参照させたい
というケースがあります。このときに使うのがOAI(Origin Access Identity)です。
この記事では、OAIの仕組み・メリット・OACとの違いを、初心者にもわかりやすく解説します。
OAI(Origin Access Identity)とは?
Amazon CloudFrontのOrigin Access Identity(OAI)は、CloudFrontがS3バケットのオリジンにアクセスするための専用IDです。もう少し詳しく言うと、S3のcanonical user IDを持ったCloudFront専用ユーザーで、S3バケットポリシーでこのユーザーだけに読み取り権限を与えることで、S3への直接アクセスを制御できます。
イメージとしては、CloudFront専用の「特別なユーザー(IAMユーザーに近いイメージ)」と思えばOKです。
OAIを利用することで、S3バケットへの直接アクセスを制限し、CloudFront経由でのみコンテンツを配信できるようになります。
OAIのメリット
OAIを利用することで以下のメリットがあります。
メリット
- セキュリティの強化
- S3バケットのパブリックアクセスを無効化し、OAI経由(=CloudFront経由)からのアクセスだけを許可できます。
- CloudFrontキャッシュを必ず経由
- インターネットから直接S3 URLにアクセスしても弾かれるため、原則としてCloudFrontを経由してコンテンツを取得する形になり、キャッシュを有効に活用できます。
- S3のURLを知られてもアクセス不可
- バケットポリシーでOAI以外を拒否していれば、S3のURLが知られていても403エラーとなり、「S3に置いている画像が勝手に直リンクされる」問題を防げます。
「OAI」と「OAC」の違い
AWSは新方式としてOAC(Origin Access Control)も提供しており、S3オリジンを新規に作る場合はOAIではなくOACを使うことが推奨されています。
| 項目 | OAI | OAC |
|---|---|---|
| 仕組み | S3 canonical user IDを持つCloudFront専用ユーザー | CloudFrontがSigV4署名付きリクエストでS3などのオリジンにアクセス |
| 対応範囲 | S3バケットのみ | S3 + 一部のAWSサービス(MediaStore / MediaPackage v2 / Lambda URLなど) |
| セキュリティ | 従来方式。SSE-KMSなど一部の新機能には非対応のケースあり | 新方式。SSE-KMSや全リージョンのS3をサポートし、より厳密なアクセス制御が可能 |
| 今後の扱い | 既存構成向けのレガシー機能(新規構築では利用は推奨されない) | AWS公式で推奨される方式(新規は基本的にOACを選ぶのがベストプラクティス) |
OAIは古い方式ではありますが、既存の構成では今も広く使われています。新しくCloudFront+S3を構築する場合は、基本的にはOACを使いましょう。