設定
プラグインをインストールした後、AWS認証情報とCloudFrontディストリビューション設定でプラグインを設定する必要があります。
AWS前提条件
プラグインを設定する前に、以下があることを確認してください:
- AWSアカウント - CloudFrontアクセス権限付き
- CloudFrontディストリビューション - WordPressサイト用に設定済み
- IAMユーザーまたはIAMロール - 適切な権限付き
必要なIAM権限
以下の最小権限を持つIAMポリシーを作成してください:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation",
"cloudfront:GetInvalidation",
"cloudfront:ListInvalidations"
],
"Resource": "arn:aws:cloudfront::*:distribution/YOUR_DISTRIBUTION_ID"
}
]
}
設定方法
方法1: EC2インスタンスロール(AWS EC2推奨)
WordPressサイトがEC2インスタンスで実行されている場合、EC2インスタンスロールを使用することが最も安全で推奨される方法です。この方法により、アプリケーションにAWS認証情報を保存する必要がなくなります。
前提条件
- EC2インスタンスロール: EC2インスタンスに必要なCloudFront権限を持つIAMロールがアタッチされている必要があります
- インスタンスメタデータサービス: インスタンスメタデータサービスにアクセス可能であることを確認(デフォルトで有効)
EC2インスタンスロールの設定
- IAMロールの作成:
- AWS IAMコンソールに移動
- "EC2"信頼エンティティで新しいロールを作成
- 以下のポリシーをアタッチ(またはカスタムポリシーを作成):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation",
"cloudfront:GetInvalidation",
"cloudfront:ListInvalidations"
],
"Resource": "arn:aws:cloudfront::*:distribution/YOUR_DISTRIBUTION_ID"
}
]
}
EC2インスタンスにロールをアタッチ:
- EC2コンソールに移動
- インスタンスを選択
- Actions → Security → Modify IAM role
- 作成したロールを選択
プラグインの設定:
- 設定 > C3 CloudFront Cache に移動
- CloudFront Distribution IDのみを入力
- AWS認証情報フィールドは空のまま
- 変更を保存 をクリック
プラグインは自動的にEC2インスタンスロール認証情報を検出して使用します。
セキュリティの利点
- アプリケーションコードやデータベースに認証情報を保存しない
- 自動的な認証情報ローテーション
- 認証情報漏洩のリスクなし
- AWSセキュリティベストプラクティスに従う
方法2: WordPress管理画面
- 設定 > C3 CloudFront Cache に移動
- 必要なフィールドを入力:
- CloudFront Distribution ID
- AWS Access Key ID
- AWS Secret Access Key
- 変更を保存 をクリック
プラグインは認証情報をテストし、WordPressオプションテーブルに安全に保存します。
方法3: wp-config.php定数(高度)
セキュリティを向上させるために、wp-config.php
ファイルで定数を定義できます:
// wp-config.phpに追加("That's all, stop editing!"行の前)
define( 'AWS_ACCESS_KEY_ID', 'your_access_key_here' );
define( 'AWS_SECRET_ACCESS_KEY', 'your_secret_key_here' );
define( 'C3_DISTRIBUTION_ID', 'your_cloudfront_distribution_id' );
異なるホスティング環境用
以下の設定は、Shared Hosting、VPS/Dedicated Server、Dockerなど、どの環境でも同じように使用できます:
// wp-config.phpに追加
define( 'AWS_ACCESS_KEY_ID', 'your_access_key_here' );
define( 'AWS_SECRET_ACCESS_KEY', 'your_secret_key_here' );
define( 'C3_DISTRIBUTION_ID', 'your_cloudfront_distribution_id' );
環境固有の考慮事項
- AWS EC2: 最大のセキュリティのためにEC2インスタンスロールの使用を強く推奨
- Shared Hosting: ファイルシステムアクセスが制限される可能性があるため、WordPress管理画面の使用を検討
- VPS/Dedicated Server: セキュリティ向上のために環境変数の使用を検討
- Docker: コンテナ化環境のために環境変数やIAMロールの使用を検討
セキュリティ注意事項
wp-config.php
定数を使用することで、認証情報をデータベースから除外してセキュリティを向上させることができます。ただし、WordPress管理画面はほとんどのユースケースに適しており、ユーザーフレンドリーな設定体験を提供します。
方法4: AWS Systems Manager / Secrets Manager
本番環境でのセキュリティ向上のために、AWS Systems Manager Parameter StoreまたはSecrets Managerを使用して認証情報を管理できます。
Parameter Storeの使用
認証情報をParameter Storeに保存し、プログラムで取得:
add_filter('c3_credential', function($credentials) {
try {
$ssm = new Aws\Ssm\SsmClient(['version' => 'latest', 'region' => 'us-east-1']);
$result = $ssm->getParameters([
'Names' => ['/c3-cloudfront/aws-access-key', '/c3-cloudfront/aws-secret-key', '/c3-cloudfront/distribution-id'],
'WithDecryption' => true
]);
$params = [];
foreach ($result['Parameters'] as $param) {
$params[$param['Name']] = $param['Value'];
}
return [
'key' => $params['/c3-cloudfront/aws-access-key'],
'secret' => $params['/c3-cloudfront/aws-secret-key'],
'distribution_id' => $params['/c3-cloudfront/distribution-id'],
'timeout' => 30
];
} catch (Exception $e) {
error_log('C3 CloudFront: Failed to retrieve credentials from SSM: ' . $e->getMessage());
return $credentials;
}
});
Secrets Managerの使用
認証情報をJSONシークレットとして保存し、取得:
add_filter('c3_credential', function($credentials) {
try {
$secretsManager = new Aws\SecretsManager\SecretsManagerClient(['version' => 'latest', 'region' => 'us-east-1']);
$result = $secretsManager->getSecretValue(['SecretId' => 'c3-cloudfront-credentials']);
$secret = json_decode($result['SecretString'], true);
return [
'key' => $secret['aws_access_key_id'],
'secret' => $secret['aws_secret_access_key'],
'distribution_id' => $secret['distribution_id'],
'timeout' => 30
];
} catch (Exception $e) {
error_log('C3 CloudFront: Failed to retrieve credentials from Secrets Manager: ' . $e->getMessage());
return $credentials;
}
});
セキュリティ注意事項
Parameter StoreまたはSecrets Managerにアクセスするための適切なIAM権限を設定し、機密パラメータにはSecureStringタイプを使用することを忘れないでください。
CloudFront Distribution IDの見つけ方
- AWSコンソールにログイン
- CloudFront に移動
- リストからディストリビューションを見つける
- IDをコピー(例:
E1234567890123
)
設定のテスト
設定後、すべてが正常に動作することをテスト:
- 設定 > C3 CloudFront Cache に移動
- 手動無効化 をクリック
- テストパスを入力(例:
/
) - 無効化 をクリック
成功した場合、確認メッセージが表示され、無効化がCloudFrontコンソールに表示されるはずです。
WP-CLIテスト
WP-CLIを使用して設定をテストすることもできます:
# 特定の投稿のキャッシュをフラッシュして設定をテスト
wp c3 flush 1
# 完全なキャッシュクリアをテスト
wp c3 flush all
高度な設定オプション
カスタム無効化間隔
// 無効化間隔を変更(デフォルト:1分)
add_filter('c3_invalidation_interval', function($interval_minutes) {
return 5; // 5分
});
// 失敗した無効化の再試行間隔を変更(デフォルト:1分)
add_filter('c3_invalidation_cron_interval', function($interval_minutes) {
return 2; // 2分
});
無効化制限
// 無効化バッチあたりのパス数を変更(デフォルト:100)
add_filter('c3_invalidation_item_limits', function($limits) {
return 300; // バッチあたり300パス
});
ログ設定
// 包括的な無効化ログを有効化
add_filter('c3_log_invalidation_list', '__return_true');
// cronジョブログを有効化(レガシー、包括的ログには上記を使用)
add_filter('c3_log_cron_invalidation_task', '__return_true');
設定のトラブルシューティング
一般的な問題
無効な認証情報
- WordPress管理画面でAWS Access Key IDとSecret Access Keyを確認
- IAMユーザーに必要な権限があることを確認
- 特殊文字が含まれている場合、認証情報が適切にURLエンコードされていることを確認
- wp-config.php定数を使用している場合、正しく定義されていることを確認
- EC2インスタンスロールの場合: IAMロールがインスタンスにアタッチされており、必要なCloudFront権限があることを確認
ディストリビューションが見つからない
- CloudFront Distribution IDが正しいことを確認
- ディストリビューションが存在し、削除されていないことを確認
- ドメイン名ではなくディストリビューションIDを使用していることを確認
権限拒否
- IAMポリシー権限を確認
- ポリシーが正しいユーザー/ロールにアタッチされていることを確認
- CloudFormationリソース制限を確認
タイムアウトエラー
C3_HTTP_TIMEOUT
値を増加- AWSサービスへのネットワーク接続を確認
- ファイアウォール設定でアウトバウンドHTTPSトラフィックが許可されていることを確認
より詳細なトラブルシューティングについては、トラブルシューティングガイドを参照してください。