BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【AWS】ログインイベントをSlackへ通知して意図しない作業を監視する 第1回(全2回)

はじめに

こんにちは!
BFT名古屋支店・インフラ女子(?)のやまぐちです。

現在BFT名古屋支店では社外の方と一緒に混雑状況を可視化するサービスを作って、名古屋の飲食店を応援しよう!という企画が進行中です。

ありがたいことに名古屋だけではなく東北・関東からもメンバーが集まり、クラウドに興味があるという方もいらっしゃるのでせっかくならば社外の方もAWS触れる環境を用意しよう!と思い、新しくユーザ・グループ・ポリシーを追加、またログインしたらわかるようにSlackへ通知する仕組みを実装することにしました。

書いてみたら思いのほかボリュームがあったので第一回をIAMに対する変更として仮想MFAデバイスを使ったログインやスイッチロールを使った権限付与について、第二回目に特定のIAMユーザがAWS管理コンソールへログインした際にSlackへ通知が飛ぶ仕組みの実装について説明します。

IAMに対する変更

f:id:bftnagoya:20210607133253p:plain:w550
現状の運営方法(上図のホワイトアウトしていない部分)は以下の通りです。

  • 管理者グループのIAMユーザは運営メンバのIAMユーザを個別に作成
  • 運営メンバはグループ(すべてのAWSサービスがReadOnlyAccessであるポリシーのみアタッチされている)に所属
  • IAMユーザは初回ログイン時にパスワードを変更
  • IAMユーザは操作するAWSサービス・権限を管理者に連絡し、必要なポリシーをロールに付与してもらう(またはロールを新規作成)

AWSサービスへのReadOnlyAccessポリシーはスイッチ先のロールに付与されているため、IAMユーザでログインしただけだと何も見えない・できない状態です。また、アクセス元のIPアドレスに制限をかけているので、上図だとBFT名古屋支店経由でAWSのマネジメントコンソールにアクセスしないとスイッチロールもできません。

今回はこれに社外メンバが名古屋支店経由ではなくてもAWSサービスを操作できるようにすると共にゲスト用のロールも新規作成します。また、MFA(多要素認証)を利用することでよりセキュアなアクセスになるようにしたいと思います。
f:id:bftnagoya:20210607140942p:plain:w550

グループに付与するポリシーの作成① 仮想MFAをそれぞれのIAMユーザが管理できるようにする

MFAとは多要素認証のことです。では多要素って何?というと「知識情報(ユーザ名・パスワードなど)」「所持情報(身分証・ワンタイムパスワードなど)」「生体情報(静脈、顔、指紋情報など)」のうち、2つ以上の要素を組み合わせることを言います。

例えば、

  • ユーザ・パスワード(知識情報)とハードウェアトークン(所持情報)
  • ユーザ・パスワード(知識情報)と指紋認証(生体情報)

であれば多要素認証であるといえます。

  • ユーザ・パスワード(知識情報)と電話番号(知識情報)
  • 顔認証(生体情報)と指紋認証(生体情報)

などは二段階認証とはいえるかもしれませんが多要素ではないことに注意です。

f:id:bftnagoya:20210607164753p:plain:w550
以下の公式サイトを参考にアカウントを限定してポリシーを作成しました。
docs.aws.amazon.com

《2021/06/10追記》
そのポリシーで実装するとみんなから出てくる「パスワード変更できないです」という声。。。
よくよく考えたらこのMFAのポリシーはMFAが無効な時にできる操作をMFAを有効にして登録することだけに限定しています。そりゃパスワード変更できないですよね…。

というわけでMFAが無効でもできる操作として「パスワードを変更する」を追加しました。

グループに付与するポリシーの作成② アクセス元IPアドレスを制限する

最初に説明した通り、AWSサービスを操作するアクセス元のIPアドレスを制限します。接続元のIPアドレスが設定したもの以外の場合、AWSのマネジメントコンソールにはログインできてもスイッチロールができないようになります。

f:id:bftnagoya:20210607164911p:plain:w550
以下の公式サイトを参考に社外メンバの作業場所で利用されているグローバルIPアドレスを設定しました。
docs.aws.amazon.com

社外メンバ用のロールを作成する(すべてのAWSサービスの読み取りポリシーだけ付与)

f:id:bftnagoya:20210607165036p:plain:w550
ロールは操作対象や操作内容で複数分けてもいいのですが、今回はそんなに多くのサービスを使わないのとそこまで細かく管理する方針ではないため、まずはReadOnlyAccessだけ付けておいて、必要なポリシーをその都度付与していく形にしました。

グループに付与するポリシーの作成③ 作成した社外メンバ用のロールにスイッチできるようにする

f:id:bftnagoya:20210607165200p:plain:w550
ポリシーがユーザにもグループにもロールにも設定できるので時々混乱しますが、社外メンバ用のロールにスイッチできるグループを社外メンバが所属するグループに限定するためのポリシーを作成します。

グループ&ユーザを作成し、作成したユーザを社外メンバグループに所属させる

f:id:bftnagoya:20210607165321p:plain:w550
これは…もうポチポチとするだけですね。
グループには作成したポリシーを付与すること、IAMユーザはグループに所属させることを忘れないようにします。

仮想MFAデバイスをインストール&設定する

この記事では手持ちのスマートフォンiPhone or Android)にGoogle認証システム(Google Authenticator)というアプリを導入することを想定して進めます。仮想MFAはGoogle認証システム以外でも問題ありません。
f:id:bftnagoya:20210607145121p:plain:w550

仮想MFAデバイスの導入は、iPhoneでのアプリ導入からログインまでが記載されている記事をご紹介します(Androidでもほぼ同じ手順で進められます)。

【図解】Amazon Web Services(AWS)の2段階認証ログイン設定方法を解説 | Shima System Academy

Google Authenticator以外の仮想MFAデバイスを使いたい方はこちらの公式サイトで確認してみてください。

終わりに

AWSの代表的なサービスであるIAMは本当に奥が深く、勉強してもなかなかスッと理解できません。これを機に一年半前に購入したIAMの本を読み直してちゃんと理解を深めようと思います。この本は本当にオススメ!

AWSの薄い本 IAMのマニアックな話 | 佐々木拓郎 | 工学 | Kindleストア | Amazon

続きの記事である第二回はこちらです。
bftnagoya.hateblo.jp