AWSでAssumeRoleの後始末ってどうしてます?
Discussion
わからないこと
- AssumeRoleのセッションを利用後どうするのが良いのか
- パラレル実行で利用している場合は、クレデンシャル情報の共有した方がいいのか
- 共有するのであればどこで共有するのが良いのか
AWSで他アカウントのリソースを制御するときAssumeRoleしますが、処理後にセッションを無効化する方法は
- duration-secondsで最低の900秒にして期限切れを待つ
- インラインポリシーで現在時刻以前をDenyする
シリアルな処理であれば単純に後者を選べばいいのかなと思うが、並行実行した際は後者だと他の処理を途中で止めてしまう。ここで、どのようにAssumeRoleの後処理をすべきか問題が出てくる。
- パラレルにセッションを取得(duration-secondsで最低の900秒にする)・処理を実施して、15分間リソース制御できる複数のセッションを野放しにする
- 他のStepfunctionsでAssumeRoleしてクレデンシャルをどこかに保管してパラレル処理を行い。処理後、インラインポリシーで現在時刻以前をDenyに設定する
ただし、この処理を行うのであればクレデンシャルはParameterStoreなのかPayloadにするのか伝搬方法が悩ましい
自分で試したこと
コンソールでロールに対して、「アクティブなセッションの無効化」を押して現在時刻以前をDenyにするポリシーがアタッチされ、使えなくなることを確認した。実際システムで無効化するのであれば、無効化処理を実行するLambda等を作って、Invoke権限だけ実行ロールにつけておけばよいと感じた。なぜならば、iam:PutRolePolicyをAssumeRoleするセッションに持たせてしまうと、セッションが乗っ取られた際に好きなポリシーを追加できてしまい、何でもできてしまうのではないかと危惧している。(未検証)
0