![見出し画像](https://assets.st-note.com/production/uploads/images/129797663/rectangle_large_type_2_4ece40f09f7281187b409976e7ae551e.png?width=1200)
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
なんかの値をセットすることにする。これはタスク定義で行う
![](https://assets.st-note.com/img/1707036025792-XYsPImpf75.png?width=1200)
タスク定義を変更したら、またサービスを更新して最新の定義を使うように指定しなおしておくこと
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"));
![](https://assets.st-note.com/img/1707036444413-53APdWclRn.png?width=1200)
これはこれで良さそうなのであるが、passwordだけ若干の不安が残る
パラメーターストア
に保存するんだけど、ここでタスク定義をみてみると
![](https://assets.st-note.com/img/1707037973825-ylpG5LdPWS.png?width=1200)
こんなんなってるかもしれない。ここで「タスク実行ロール」に秘密的な鍵のアクセスを許しかつ複合できる権限が付いてないといけない。
タスクロールはご覧の通り何も定義しないてよい。混乱しがちであるが、これがパラメーターストアの設定に関しては大原則である。
IAMの整理
つわけでやっぱIAMなんだよな
IAM | Global (amazon.com)
ECSParameterStoreAccessPolicy ポリシーの作成
![](https://assets.st-note.com/img/1707038157138-PFJupeZkAg.png?width=1200)
からポリシーの作成をする
そして「システムマネージャー」を選ぶ
![](https://assets.st-note.com/img/1707038245959-pNehL5DWLQ.png?width=1200)
getparamとかで絞りこんで
GetParameter
GetParameters
の2点を許可する。リソースは本来は絞りこんだ方がいいが、とりあえず「すべて」にしている
![](https://assets.st-note.com/img/1707038344009-2q3fEKLpdv.png?width=1200)
その次の画面ECSParameterStoreAccessPolicy とかいう名前にした
![](https://assets.st-note.com/img/1707038423708-uxwa2VkZIY.png?width=1200)
キーの作成
先にキーを作っておく
![](https://assets.st-note.com/img/1707050543603-7HOizDYqn1.png?width=1200)
まあここではdbのpasswordを何とかする奴ってことでこんな名前にした
![](https://assets.st-note.com/img/1707050595672-AaZ3Fnwh3x.png?width=1200)
キーユーザーは確実にecsTaskExecutionRoleになっている事を確認
![](https://assets.st-note.com/img/1707055252954-85IoiZcMhs.png?width=1200)
パラメータストア の作成
まず名前を /prod/uploader-demo/db_passwdとかにした。基本的にこのような階層構造で管理するのがベストプラクティス的な感じらしぃ。
![](https://assets.st-note.com/img/1707055425310-C8SPWYYHkB.png?width=1200)
ここでKMSキーIDとして先程作成したKMSのarnをコピっとく
タスク定義の変更
![](https://assets.st-note.com/img/1707051473496-wAi99uEQEs.png?width=1200)
DB_PASSWDを生の値からValueFromに変更し、先程のパラメーターのarnに変更する
taskExecutionRoleにさらなるポリシーを付ける
今の状態だと複合できないので複合できそうなポリシーを作成していく
![](https://assets.st-note.com/img/1707053028419-Tet7BzalfJ.png?width=1200)
ここではECSKMSDecryptionPolicy とした
![](https://assets.st-note.com/img/1707053111613-tLEsIHFOjg.png?width=1200)
これをtaskExecutionPolicyに割当てる。これで環境変数として複合できるはずだ
まとめ
このセクションはちょっと説明薄いかな?っていうか十分濃いような気もするがここは結構ムズい。もちろんpasswordに生の環境変数を入れても動くは動くんだけど、やっぱりそこは抵抗を持って欲しい所であるから、何とかパラメーターストアの使い方を覚える意味でもここは頑張ってみましょう。
この記事が気に入ったらサポートをしてみませんか?