Subiamを使いAWSのIAM管理をコードベースでおこなう
矢口です。
みなさんはAWSのIAMをどのように管理されていますか?
グリーでは色々な要件からMiamというツールをforkして Subiam というツールを開発し利用しはじめました。
Subiamは既存のAWSアカウントのIAM運用を阻害せずにコードベースで安全なIAM管理を始めることのできるツールです。
https://github.com/gree/subiam
特徴
- コードでIAMを管理できる
- 差分を自動検出して適用
- IAM全体ではなく任意の範囲だけを切り取って管理でき、システム全体に影響を与えないよう配慮されている
- dryrunできる
- 現在の状態をユーザーが管理し保存しておく必要がない
- 複数AWSアカウントで扱いやすいようRole Nameなどを自分で定義でき共通にできる
既存ツールとの比較
ツールの優劣を示すものではなく、自分たちに必要であった要件についてのみ比較しています。
Subiam | Miam | CloudFormation | Terraform | |
---|---|---|---|---|
コードでIAMを管理できる | Yes | Yes | Yes | Yes |
差分を自動検出して適用 | Yes | Yes | Yes | No |
IAM全体ではなく任意の範囲だけを切り取って管理でき、システム全体に影響を与えないよう配慮されている | Yes | No | Yes | Yes |
dryrunできる | Yes | Yes | No | Yes |
現在の状態をユーザーが管理し保存しておく必要がない | Yes | Yes | Yes | No |
複数AWSアカウントで扱いやすいようRole Nameなどを自分で定義でき共通にできる | Yes | Yes | No | Yes |
グリーでの利用
グリーでは機能単位でIAM設定ファイルを作成し、複数プロダクトに同一のIAM設定を適用しています。
例.
例としてMySQLの監視やfailoverなどを行うツール MySQL Manager
というツールについて考えてみます。
このツールは1つのEC2 Instance上で動作するもので、1つのVPC (AWSアカウント) につき1台のInstanceが必要となります。
このツールを10個のAWSアカウントに導入したいという要件があったとします。
こういった場合にSubiamであればすべてのアカウントにapplyを実行するだけで同じRoleを定義することができます。それぞれのAWSアカウントで他のIAMがどのように定義されているかは気にする必要がありませんし、dryrunが可能なため誤って何かを上書きする恐れも少なくなっています。
また、CloudFormationのようにアカウントごとにRole名が違うということもないのため、Role定義の次のステップとなるインスタンス起動を自動化する際なども容易にRoleの指定が行えるようになります。
Getting Started
まず以下のようなファイルをつくります。git管理するといいでしょう。
そして実行します
policyなどを変更したくなった場合には、subiam_mytool_instance_role.rbを編集して同じようにapplyすると適用されます。
さいごに
グリーでは自社の要件のためにツールを開発しました。OSS公開しRubyGemsにも登録してありますので、よろしければ試してみてください!
複数のAWSアカウントを持たない場合でも新しいIAMを定義したい場合などに、すでに運用している環境へ簡単に追加できるものとなっております。
また、fork元であるMiamとその作者の方に深く感謝しております。