見出し画像

php5アップローダーをECSに配置する(2) - 環境変数の取得、パラメーターストアからの機密情報取得

<?php
require_once './vendor/autoload.php';


$dsn = 'mysqli://admin:password@uploader-demo.cmxstlofflyf.ap-northeast-1.rds.amazonaws.com/uploader_demo?charset=utf8';

$mdb2 = MDB2::connect($dsn);
if (PEAR::isError($mdb2)) {
    r($mdb2->getDebugInfo());
    exit;
}

$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);
r($mdb2->queryAll("SELECT * from uploaded_files"));

このように$dsn にDB設定情報をベタっと書いてるので、これを環境変数に移動していく。

環境変数のセット

  • APP_ENV: production

  • DB_USER: admin

  • DB_HOST: uploader-demo.cmxstlofflyf.ap-northeast-1.rds.amazonaws.com

  • DB_PASSWD: password

  • DB_NAME: simple_uploader

なんかの値をセットすることにする。これはタスク定義で行う

タスク定義を変更したら、またサービスを更新して最新の定義を使うように指定しなおしておくこと

checkscriptの更新

checkdb.php

<?php
require_once './vendor/autoload.php';

// 環境変数の取得
$app_env = getenv('APP_ENV');
$db_user = getenv('DB_USER');
$db_pass = getenv('DB_PASSWD');
$db_host = getenv('DB_HOST');
$db_name = getenv('DB_NAME');

// 接続情報のダンプ(デバッグ情報)
r([
  'APP_ENV' => $app_env,
  'DB_USER' => $db_user,
  'DB_PASSWD' => $db_pass,
  'DB_HOST' => $db_host,
  'DB_NAME' => $db_name
]);


$dsn = 'mysqli://admin:password@uploader-demo.cmxstlofflyf.ap-northeast-1.rds.amazonaws.com/uploader_demo?charset=utf8';

$mdb2 = MDB2::connect($dsn);
if (PEAR::isError($mdb2)) {
    r($mdb2->getDebugInfo());
    exit;
}

$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);
r($mdb2->queryAll("SELECT * from uploaded_files"));

これはこれで良さそうなのであるが、passwordだけ若干の不安が残る

パラメーターストア

に保存するんだけど、ここでタスク定義をみてみると


こんなんなってるかもしれない。ここで「タスク実行ロール」に秘密的な鍵のアクセスを許しかつ複合できる権限が付いてないといけない

タスクロールはご覧の通り何も定義しないてよい。混乱しがちであるが、これがパラメーターストアの設定に関しては大原則である。

IAMの整理

つわけでやっぱIAMなんだよな
IAM | Global (amazon.com)

ECSParameterStoreAccessPolicy ポリシーの作成

からポリシーの作成をする

そして「システムマネージャー」を選ぶ

getparamとかで絞りこんで

  • GetParameter

  • GetParameters

の2点を許可する。リソースは本来は絞りこんだ方がいいが、とりあえず「すべて」にしている

その次の画面ECSParameterStoreAccessPolicy とかいう名前にした

キーの作成

先にキーを作っておく

まあここではdbのpasswordを何とかする奴ってことでこんな名前にした

キーユーザーは確実にecsTaskExecutionRoleになっている事を確認

パラメータストア の作成

まず名前を /prod/uploader-demo/db_passwdとかにした。基本的にこのような階層構造で管理するのがベストプラクティス的な感じらしぃ。

ここでKMSキーIDとして先程作成したKMSのarnをコピっとく

タスク定義の変更


DB_PASSWDを生の値からValueFromに変更し、先程のパラメーターのarnに変更する

taskExecutionRoleにさらなるポリシーを付ける

今の状態だと複合できないので複合できそうなポリシーを作成していく

ここではECSKMSDecryptionPolicy とした

これをtaskExecutionPolicyに割当てる。これで環境変数として複合できるはずだ

まとめ

このセクションはちょっと説明薄いかな?っていうか十分濃いような気もするがここは結構ムズい。もちろんpasswordに生の環境変数を入れても動くは動くんだけど、やっぱりそこは抵抗を持って欲しい所であるから、何とかパラメーターストアの使い方を覚える意味でもここは頑張ってみましょう。

この記事が気に入ったらサポートをしてみませんか?