AssumeRole(スイッチロール)を理解して、AWSへのデプロイを少しでも安全に実施しよう #devio2021

AssumeRoleを活用して、少しでも安全にデプロイする方法です。
2021.10.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

DevelopersIO 2021 Decadeでビデオセッションを公開しました。

概要

CloudFormationをデプロイするユーザのアクセスキーが漏れてしまったら?と心配するあなたへ。 AssumeRoleを活用すれば、アクセスキーが漏洩しても被害が最小限になるIAMユーザでデプロイできます。

動画

スライド

コメンタリー

テーマ選定の理由は、自分が知りたかったから

ある程度、AWSを使っていると、画面ボタンポチポチではなく、Infrastructure as Code(IaC)で管理することが多くなります。AWSでIaCを実現するツールはいくつかあります。

  • AWS CloudFormtaion
  • AWS SAM
  • AWS CDK
  • Serverless Framework
  • Terraform

そして、これらのIaCツールとIAMユーザの「アクセスキー」は、切っても切り離せない関係です(一部例外が最近出てきました(嬉しい))。

ベストプラクティス的には、アクセスキーをしっかり管理したり、最小限の権限を付与したりと言われますが、「で、実際はどうやればいいの???」となります(なりました)。 分からないですよね。そこで、具体的な手段をまとめました。

AssumeRoleを活用してデプロイする

  1. 少しでも安全にデプロイするために、AssumeRoleを活用しよう
  2. そのために、AssumeRoleの説明をしよう
  3. AssumeRoleの説明をするために、IAMの説明をしよう

上記の流れを逆にして、本ビデオセッション(資料)では、4つの事柄を説明しています。

AssumeRoleを活用したデプロイの全体像

全体像はこちらです。動画やスライドでは、紙芝居の形式で紹介しているので、ぜひご覧ください。

AssumeRoleを活用したデプロイの全体像

下記の紹介もしています。

  • コマンド例(ユーザがAssumeRoleする)
  • コマンド例(デプロイする)
  • 少しでも安全にデプロイできる理由
  • AssumeRoleを行うスクリプト

少しでも安全にデプロイできる理由

下記を紹介しています。

  • IAMロール自体は、AssumeRoleの権限だけ
  • IAMロール(デプロイ用)にAssumeRoleされても、最小限の権限だけ
  • IAMロール(CloudFormation用)を使わない場合、IAMロール(デプロイ用)の権限不足でほぼ何もできない
  • IAMロール(デプロイ用)のResourceでスタック名を制限していれば、他のスタックに影響なし
  • CloudFormationでDeletionPolicyを指定すれば、CloudFormationスタックを削除されても、データ喪失は防げる
  • IANロール(CloudFormation用)は強い権限を持つが、IAMユーザは直接使えない

参考リンク

おすすめ

ほか

さいごに

少しでも安全にデプロイする方法の参考になれば幸いです。

  • 「IAM」発言は92回でした(本人調べ)
  • 「AssumeRole」発言は34回でした(本人調べ)