こんにちは。負荷テストネタが尽きてきた浅見です。
ということで、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.php
18行目あたりにある、「__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」を入力しなさい、とメッセージが出ますが無視して問題ありません。
以上、小ネタでした。