1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| claude
> aws-docs MCP を使って CloudFront 署名付きURLで S3 Object を参照させる際の CloudFront の設定を教えて
⏺ CloudFrontで署名付きURLを使ってS3オブジェクトを参照させる設定について、AWS 公式ドキュメントを基にまとめます。
CloudFront 署名付きURL + S3 オリジンの設定
1. Origin Access Control (OAC) の設定
S3バケットポリシーの設定 { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::YOUR-ACCOUNT-ID:distribution/DISTRIBUTION-ID" } } } ] }
2. Trusted Key Groups の設定
公開鍵/秘密鍵ペアの作成 - RSA 2048またはECDSA 256キーをサポート - CloudFrontコンソールまたはAPIでキーグループを作成 - 公開鍵をキーグループに追加
3. CloudFront Distribution の設定
Cache Behavior の設定 - 署名が必要なパスパターンを設定 - Trusted Key Groupを指定 - Origin Access Controlを有効化
重要な設定項目 - Origin Access Control: "Sign requests (recommended)" を選択 - Viewer Protocol Policy: HTTPSの使用を推奨 - Trusted Key Groups: 署名に使用するキーグループを指定
4. 署名付きURLの生成
Canned Policy と Custom Policy の選択
| 機能 | Canned Policy | Custom Policy | |-------------|---------------|---------------| | 複数ファイルでの再利用 | ✗ | ✓ | | アクセス開始時刻の指定 | ✗ | ✓ | | IPアドレス制限 | ✗ | ✓ | | URL長 | 短い | 長い(ポリシー含有) |
URLフォーマット例 https://d1234567890.cloudfront.net/private-content.jpg?Policy=eyJ...&Signa ture=abc...&Key-Pair-Id=K1234567890
5. セキュリティ考慮事項
必須設定 - S3バケットへの直接アクセスを制限 - Origin Access Control (OAC) の使用(OAIより推奨) - HTTPS通信の強制 - 適切な有効期限の設定
SSE-KMS使用時の追加設定 KMSキーポリシーにCloudFrontアクセス許可を追加: { "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "Service": ["cloudfront.amazonaws.com"] }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::YOUR-ACCOUNT-ID:distribution/DISTRIBUTION-ID" } } }
6. 実装フロー
1. ユーザー認証: アプリケーションでユーザーの権限を確認 2. 署名付きURL生成: 秘密鍵を使用してURLに署名 3. URLの提供: 認証済みユーザーに署名付きURLを返却 4. コンテンツアクセス: CloudFrontが署名を検証し、有効な場合のみS3からコンテンツを配信
この設定により、S3オブジェクトへの安全なアクセス制御が実現できます。
|