AWS CloudFrontは、コンテンツ配信ネットワーク(CDN)サービスとして広く利用されています。
その中で、署名付きURLを使用することで、限定的なアクセス権を提供できます。
本記事では、Node.jsでaws-cloudfront-sign
モジュールを使用して署名付きURLを生成する方法と、発生しがちなエラーの原因と対処法について詳しく解説します。
AWS CloudFront署名付きURLとは
署名付きURLは、特定の期間中だけアクセスを許可するURLです。
これにより、コンテンツの保護やアクセス制限が実現できます。
必要な準備
- AWS CloudFrontディストリビューションの設定
- プライベートコンテンツを有効化
- キーペアの作成
- AWSアカウントでCloudFront用のキーペアを作成
aws-cloudfront-sign
モジュールを使用した署名付きURLの生成
サンプルコード
以下のコードで署名付きURLを生成できます。
const cf = require('aws-cloudfront-sign'); const { DateTime } = require('luxon'); const getSignedUrl = (config, objectKey) => { const options = { keypairId: 'YOUR_KEY_PAIR_ID', privateKeyPath: './path/to/private_key.pem', expireTime: DateTime.now().plus({ hours: 1 }).toMillis() }; return cf.getSignedUrl(`https://${config.cloudfrontDomain}/${objectKey}`, options); }; const signedUrl = getSignedUrl({ cloudfrontDomain: 'your-cloudfront-domain' }, 'example.jpg'); console.log(signedUrl);
keypairId
: AWSで作成したキーペアのIDprivateKeyPath
: 秘密鍵のパスexpireTime
: URLの有効期限をミリ秒で指定
発生しがちなエラーと対処法
エラー1:InvalidKey
このエラーは、指定した秘密鍵が正しくない場合に発生します。
対処法
- 秘密鍵のパスが正しいことを確認
- パスの指定方法を見直し、
path.resolve
で絶対パスに変換
エラー2:AccessDenied
このエラーは、CloudFrontがS3バケットにアクセスできない場合に発生します。
対処法
- S3バケットポリシーを確認し、CloudFrontからのアクセスを許可
- 以下は正しいポリシーの例です
{ "Version": "2008-10-17", "Statement": [ { "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/YOUR_DISTRIBUTION_ID" } } } ] }
エラー3:URLが動作しない
生成された署名付きURLが機能しない場合があります。
対処法
- URLをブラウザやHTTPクライアントで確認。
- 署名付きURLの有効期限を再チェック。
注意点
- 秘密鍵はセキュアな場所に保存し、不必要な権限を付与しない
- テスト環境と本番環境で異なる設定を使用する
まとめ
署名付きURLを活用することで、安全で効率的なコンテンツ配信が可能になります。
これらの技術をマスターして、AWS CloudFrontを最大限に活用しましょう!
- Original:https://minory.org/node-aws-cloudfront-sign.html
- Source:minory
- Author:管理者
Amazonベストセラー
Now loading...