こんにちは。負荷テストネタが尽きてきた浅見です。
ということで、AWS(WordPress)の小ネタをお送りいたします。
目次
WordPressをS3と連携させて静的ホスティングを行いたい
WordPressとS3を連携させて静的ホスティングを行うときは、StaticPress S3プラグインを利用することが多いのではないでしょうか。
StaticPress S3プラグインでは、IAMユーザのAccessKeyとSercretKeyを利用してS3連携を行います。
次のようなAWSで完結する構成の場合は、IAMユーザを使うのは微妙な気がします。
- EC2(S3へのアクセスを許可したIAMロール付与)
- WordPress
- StaticPressプラグイン
- StaticPress S3プラグイン
- S3
 
 せっかくなので、IAMロールを使いたいよね、ということでStaticPress S3をIAMロール対応させてみようと思います。
 WordPressやプラグインのセットアップは下記URLを参考に作成しました。
 参考:WordPress + StaticPress S3で静的WebサイトをS3でホストする|QiitaStaticPress S3とAWSの認証方法はIAM ユーザS3と連携するために、StaticPress S3というプラグインをインストールする必要があります。 
 下のキャプチャは、WordPressをS3と連携させるためのオプション入力画面です。
  
 見てわかるとおり、「AWS Access Key」と「AWS Sercret Key」を入力する必要があります。
 正しいキーが入力されると、S3 Bucketの選択ができるようになります。
  
 IAMロールを割り当てた状態で、「AWS Access Key」と「AWS Sercret Key」を未入力の状態にしてもS3 Bucketの選択はできません。StaticPress S3とAWSの認証方法をIAMロールで行うなぜIAMロールを使うの?IAMロールを使うことで、IAMユーザを使うよりも安全にAWSへアクセスすることが可能です。 
 IAMユーザは、AccessKeyとSecretKeyを利用して認証を行います。そのため、キー情報が漏洩した場合に悪用される恐れがあります。
 一方、IAMロールはEC2へアタッチすることができます。アタッチされたEC2からのアクセスが許可されるので、キー情報の入力が必要なく、よりセキュアな環境を構築することができます。IAMロールの作成と、EC2へのアタッチEC2からS3へアクセスする権限をもったIAMロールを作成し、WordPressを動作させるEC2へアタッチする必要があります。 
 詳細手順は、ディーネット技術ブログの記事をごらんください。
 参考:IAMロールでEC2からS3をアクセス制御|ディーネット技術ブログStaticPress S3を修正するEC2へIAMを割り当てることができたら、プラグインの修正を行います。 
 ※プラグインの改修は自己責任でお願いします
 修正対象は、「class-S3_helper.php」というファイルです。# vi wp-content/plugins/staticpress-s3/includes/class-S3_helper.php18行目あたりにある、「__construct」を修正します。 
 「Access Key」と「Sercret Key」の入力チェックを行っているif文をコメントアウトします。
 これを。function __construct($access_key = null, $secret_key = null, $region = null) { if ($access_key && $secret_key) { $this->init_s3($access_key, $secret_key, $region); } }こう修正する。 function __construct($access_key = null, $secret_key = null, $region = null) { // if ($access_key && $secret_key) { $this->init_s3($access_key, $secret_key, $region); // } }EC2にIAMロールがアタッチされている状態で、設定画面にアクセスしてみると「S3 Bucket」が選択できるようになっているはずです。 
  
 設定を保存すると、「Access Key」と「Sercret Key」を入力しなさい、とメッセージが出ますが無視して問題ありません。
 以上、小ネタでした。
