public note

AWS Cloud Formation で作成した IAM を Miam DSL として出力する

はじめに

AWS の IAM を Miam で管理している中で、AWS Cloud Formation で IAM を別途作成した場合にどのように管理するか、という課題について考えます。

対応方法

対応方法には、2通りあると考えました。

  • Miam の管理対象として DSL に追加する
  • --excludeオプションで Miam の管理対象から除外する

今回は、前者の方法をとる場合の話です。

JSONの加工を自動化したい

Miam の DSL では、Ruby のハッシュロケットを使っているため、JSON を少し加工する必要があります。 手作業でやるのは面倒なので、ちょっとしたスクリプトを書きました。

github.com

処理内容

IAM リソースID を取得

スクリプトでは SDK を使用していますが、AWS CLI のコマンドで表現すると、このような感じです。

aws cloudformation list-stack-resources --stack-name your-aws-stack --profile default --region region-id | jq -r '.StackResourceSummaries[] | select(.ResourceType | startswith("AWS::IAM"))'

Miam のエクスポート機能を使って出力

前手順で取得したリソースIDを、--target で並べて指定します。

bundle exec miam -e --split --no-progress --target aaa --target bbb ...

以上です。思ったより簡単にできて、とてもありがたいです。

削除済スタックも指定可

現在作成してあるスタックだけでなく、削除済スタックについても、削除日から90日以内であれば抽出対象に指定できます。削除済スタックを指定する場合は、--stack-name はスタック名ではなく、スタックID を指定します。

list-stack-resources — AWS CLI 1.19.85 Command Reference

For deleted stacks, ListStackResources returns resource information for up to 90 days after the stack has been deleted.

Deleted stacks: You must specify the unique stack ID.