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の指定が行えるようになります。

Untitled

Getting Started

まず以下のようなファイルをつくります。git管理するといいでしょう。

そして実行します

policyなどを変更したくなった場合には、subiam_mytool_instance_role.rbを編集して同じようにapplyすると適用されます。

さいごに

グリーでは自社の要件のためにツールを開発しました。OSS公開しRubyGemsにも登録してありますので、よろしければ試してみてください!
複数のAWSアカウントを持たない場合でも新しいIAMを定義したい場合などに、すでに運用している環境へ簡単に追加できるものとなっております。

また、fork元であるMiamとその作者の方に深く感謝しております。