昨日の続き。 IAM IAMを考えるためには、どんなステークホルダーがいてそれぞれどんな責務で、どんなユースケースを持っているか、を情報として整理する。 それによって、どこまでを管理者の権限で許し、どこからは開発者(ユーザー)の自由とするかを決定し、誰の担当かが不明確な作業を減らしていく。 Black Beltの内容を見ていると、アーキテクティングそのものだなと思う。 ちなみに、IAMはそのサービスの性質上、権限の話を中心にすることになるので、ホワイトリスト方式・ブラックリスト方式、どちらでいくのか、というあたりは慎重に判断をしないといけないのだけれど、どちらにせよ「必要最小限」を最初から与えることは難しいので進めながら調整するしかない、という記載があって、現実的で好感が持てた。 AWS Black Belt Online Seminar AWSサービスの権限管理 https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-aws IAMのベストプラクティスについては、4つの観点から整理できるみたい。 IDと認証情報の管理 ルートユーザーのアクセスキーを使わない(ルートじゃないとできないのは課金情報へのアクセス権設定、サポートプランの変更、脆弱性診断フォーム提出、逆引きDNS申請、CloudFrontキーペアの作成、解約あたりだけ) パスワードポリシーを強力にする アクセスキーを共有しない 強い権限を持つユーザーはMFAを有効にする アクセス権限の管理 AWS管理ポリシーを適用する(詳細な知識がないと難しいらしい?) 個別のユーザー(IAMエンティティ)へのアクセス権設定をする(インラインポリシー設定する)のではなく、グループへの設定をする(カスタマー管理ポリシー設定する) 権限の委任 EC2上で実行するアプリへはIAMロールを使って権限を与えればセッションとして一定のタイミングで認証が切れるので安全性が高く、その上、AWS SDKを使用することで認証情報の取得や期限切れに伴う再取得を自動実行できる IAMロールを一時的に昇格させるようなことができ、開発用のアカウントが本番用のアカウントの権限のロールを一時的に取得して本番環境のS3にアクセス、といった使い方ができる