Node.jsとAWS CloudFrontを使用した署名付きURLの生成

AWS CloudFrontは、コンテンツ配信ネットワーク(CDN)サービスとして広く利用されています。
その中で、署名付きURLを使用することで、限定的なアクセス権を提供できます。
本記事では、Node.jsaws-cloudfront-signモジュールを使用して署名付きURLを生成する方法と、発生しがちなエラーの原因と対処法について詳しく解説します。

AWS CloudFront署名付きURLとは

署名付きURLは、特定の期間中だけアクセスを許可するURLです。
これにより、コンテンツの保護やアクセス制限が実現できます。

必要な準備

  1. AWS CloudFrontディストリビューションの設定
    • プライベートコンテンツを有効化
  2. キーペアの作成
    • 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で作成したキーペアのID
  • privateKeyPath: 秘密鍵のパス
  • 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を最大限に活用しましょう!


Amazonベストセラー

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA