[セッションレポート]IAM Best Practices #reinvent
この記事は AWS re:Invent 2014、SEC305-JT - IAM Best Practices - Japanese Trackのレポートです。
スピーカーはAWSのAnders Samuelsson。
レポート
IAMとは? 機能でもありサービスである。誰が何をできるのかを制御する。 ユーザ、グループ、ロール、パーミッションのコントロール。 全てのサービスへのアクセスを一箇所で一元的に制御できる。 粒度が細かく、どこまでなにをするのかはみなさんが決められる。 Denyがdefault。許可を与えない限りは出来ない。 複数のユーザを作ることも、透過的に設定することもできる。
ベストプラクティスは10個あったんだけど、11個になりました。
一番最初にやること。Userを作る。CLIでもAPIでもAMCでも。 ユーザを作ったら何ができるか。権限がないので何も出来ない。
まずは権限を与える。SEは読み取りのみとか。 メリットとは?ミスを減らす。 厳格化するより緩くする方が簡単にできてしまうのであとから厳しくするのは難しい。 最初にやることは何が求められているのかを確認すること。 アクセスキーが必要かどうかも考える。コンソールにアクセスする必要がない場合もある。 フルパーミットポリシー(:)は避けるべき。管理者だけでいい。 デフォルトDenyとする。何ができるのかを明示的にする。 重要なこと、パーミッションはrootには設定できない。rootは基本的に使わない。
次にgroup。 管理の悪夢。それぞれのユーザに対しての権限を管理するのはとても大変。 だからグループを作る。グループに権限を与えれば管理が楽。 複数ユーザに同じレベルの権限を与えることができるから。 グループの権限を変えれば複数ユーザの権限が一緒に変わる。 どんな権限が必要なのか、どんな人たちが同じ権限になるのかを分析すること。
次にアクセスコントロール。conditionsで行う。 どんな条件で誰が権限を使うのかをきめ細かく設定できる。 MFAを使ってない場合とかSSL接続の場合だけとか。 Tagがどうあるべきか、みたいな設定も可能。
CloudTrailは使うべき。 API Callを全てS3バケットに保管していく。監査できる。 何かサービスを使う場合、 CloudTrailが使えることを確認したほうがいい。
パスワード管理。 パスワードを細かく設定できるようになった。 社内のパスワードポリシーを確認し、それを適用できる。 文字種類、強度、再利用。 またrootにはパスワードポリシーを適用できない。
security credentialsの再利用。 Credential Reportsというツールがある。 全てのユーザがいつローテションしたのかが一覧でわかる。 ローテションしていないユーザも、ローテーションを促すこともできる。 最後にサインインしたタイミングもわかるので使っていないユーザを発見することもできる。 IAM roleでは自動的にrotateされている。
パスワードローテーションを有効にするIAMポリシー。 ユーザを作成するとき、password policyを強要することができる。
アクセスキーをローテーションするときのIAMポリシー。 アクセスキーはアプリケーションが使うので、いくつかステップが必要。 アクセスキーの入れ替えのために、一時的に二つのアクセスキーをもたせて、 古いアクセスキーをInactiveにして、テストし、最後に古いアクセスキーをDeleteする。 あとで間違ってactiveにしないように、不要なアクセスキーはちゃんとDeleteするべき。
MFA。MFAは他のクレデンシャルを補完する位置付け。 MFAのタイプを選択する。ハードウェアトークンか、バーチャルMFAか。 そしてIAMコンソールでMFAの設定をする。ユーザごとに設定が必要。 MFAはrootアカウントに必ず設定すべき。
共有。データを共有する場合にクレデンシャルで許可するのではなくRoleで許可するべき。 個別にクレデンシャルを与えない。 簡単に他のサービスとリレーションすることができる。 イントラで持っているアカウントから使うこともできる。 Federationによって許可することも可能。 権限を決め、共有名を決め、ExternalIDにて3rdパーティと共有する。 絶対にクレデンシャル派共有しないこことが大事。
どうやって共有しているのか?という例。
ES2にIAM Roleを与える。 アクセスキーを管理する必要がない。 Roleでは勝手にキーのローテーションが行われる。
今日一番重要なこと。rootは使わない。 みんながrootを共有して使っていたら全く追跡が出来ない。 rootはアクセスキーを削除して、MFAを有効にして、強いパスワードを設定。 そのまま二度と使わないくらいの運用にしてほしい。 Federateされたユーザもそう。rootは使わない。
振り返り。
まとめ
rootは使わないとか、MFAを使うとか、credentialを共有しないとか、基本的ではあるけれど重要な話だったと思います。