はじめに
AWS の IAM を Miam で管理している中で、AWS Cloud Formation で IAM を別途作成した場合にどのように管理するか、という課題について考えます。
対応方法
対応方法には、2通りあると考えました。
- Miam の管理対象として DSL に追加する
--exclude
オプションで Miam の管理対象から除外する
今回は、前者の方法をとる場合の話です。
JSONの加工を自動化したい
Miam の DSL では、Ruby のハッシュロケットを使っているため、JSON を少し加工する必要があります。 手作業でやるのは面倒なので、ちょっとしたスクリプトを書きました。
処理内容
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.