IAMロールを使って、WordPress + StaticPress S3を利用する方法

こんにちは。負荷テストネタが尽きてきた浅見です。
ということで、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でホストする|Qiita

    StaticPress S3とAWSの認証方法はIAM ユーザ

    S3と連携するために、StaticPress S3というプラグインをインストールする必要があります。
    下のキャプチャは、WordPressをS3と連携させるためのオプション入力画面です。
    StaticPressIAMUser1-thumb-640x347-376.jpg
    見てわかるとおり、「AWS Access Key」と「AWS Sercret Key」を入力する必要があります。
    正しいキーが入力されると、S3 Bucketの選択ができるようになります。
    StaticPressIAMUser2-thumb-640x406-379.jpg
    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」が選択できるようになっているはずです。
    StaticPressIAMRole-thumb-640x393-381.jpg
    設定を保存すると、「Access Key」と「Sercret Key」を入力しなさい、とメッセージが出ますが無視して問題ありません。
    以上、小ネタでした。

返信を残す

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

CAPTCHA