いま、あるサーバ(EC2ではない)内で、S3のシークレットキーが複数の箇所に記述されてしまっています。
1. $HOME/.bash_profile (バッチ処理用)
2. $HOME/下のウェブアプリケーション
3. $HOME/.aws/sdk/config.inc.php
4. /etc/httpd/httpd.conf
5. $HOME/.s3cfg
このままだと シークレットキーを変更する際に5か所修正する必要があり、修正漏れのリスクがあります。
DRYにする方法はないでしょうか?
ベストプラクティスなどがあれば教えてください。
環境変数に設定してはどうでしょう。
それは私も考えました。
1~3のDRY化は環境変数でいけそうです。
たぶん4も。
5のs3cmdで環境変数を使う方法がわからないのです。
s3cmdの1.1.0beta2にしたら環境変数が使えました!
■補足1 s3cmd(.s3cfg)
調べてみたら、バージョン1.1.0beta2から環境変数が使えるみたいです。
http://s3tools.org/s3cmd-110b2-released
Config settings from Environment
Many users are not comfortable with keeping their access and secret keys in the config file. Ori Bar provided a patch that allows any config value to be taken from the process environment. For example to obtain the access key from the environment put this in your ~/.s3cfg file:
access_key=$S3_ACCESS_KEY
The S3_ACCESS_KEY name is just an example – use anything you like, just prepend it with “$” sign. For instance
access_key=$ABRACADABRA
is just as valid as $S3_ACCESS_KEY
■補足2 ~/.aws/sdk/config.inc.php
この設定ファイル自体がPHP言語で記述されているので、どうとでもできそうです。(=環境変数を使える)
■補足3 /etc/httpd/httpd.conf
Per/CGI用のためにここで環境変数を定義していたのですが、
それをやめてPerlから.bash_profileを読み込む形にすれば解決しました。
■結論
というわけで残りは1と2をどうやってDRY化するかという問題になりました。
これは、上記と同様にPHPスクリプトから .bash_profileを読み込む形にすればいけそうです。
というわけで自己解決しそうです。
クラウド界隈で何かベストプラクティスがあるのかと思って問いかけをしたのですが、特になさそうですね・・。
すみません記事を見ましたが、意味がよくわかりませんでした・・・
s3cmd --configure
だと、
$HOME/.s3cfg にシークレットキーがべた書きされてしまうので、
DRYにならなくて困る(質問の5のケース)、というのが当初の問題提起です。
それは私も考えました。
2012/08/20 00:01:301~3のDRY化は環境変数でいけそうです。
たぶん4も。
5のs3cmdで環境変数を使う方法がわからないのです。
s3cmdの1.1.0beta2にしたら環境変数が使えました!
2012/08/25 01:39:18