Amazon Web Services ブログ
AWS IAM ベストプラクティスのご紹介 – AWSアカウントの不正利用を防ぐために
みなさん、こんにちわ。
アマゾン ウェブ サービス ジャパン株式会社、プロダクトマーケティング
エバンジェリストの亀田です。
今日は皆さんが普段ご利用のAWSアカウントに対する不正アクセスを防ぐベストプラクティスと言われる運用におけるガイドラインや設定項目の推奨等についてご紹介します。
AWS Identity and Access Management (IAM) は、AWS リソースへのアクセスを安全に制御するためのウェブサービスであり、AWSマネージメントコンソールへのログインに用いるユーザーやAWSリソースへのアクセスに用いるAPIアクセスのキーの管理等に使用されます。マネージメントコンソールへのログインを行う管理用ユーザーを発行する機能が含まれるため、AWSをご利用中のすべての皆さんはAWS IAMを利用していることとなります。
管理者のパスワードが漏洩した場合、外部の第三者がAWSマネージメントコンソールへのログインが可能となるため、この保護は運用上非常に重要な課題となります。
AWSでは「AWS IAMのベストプラクティス」として運用上留意するべきことや、設定のガイドラインをご提供しています。非常に大事な内容が詰まっていますので是非一度目を通してみてください。その中でも特に大事なことについて以下に抜き出してまとめてみます。
ルートユーザーを普段利用しない
ルートユーザーとは、AWSアカウントを開設した際に一番最初に作成される管理者ユーザーとなります。ルートユーザーはすべてのAWSリソースへのアクセス権を持ち、非常に強力な権限を保持しています。このため、ルートユーザーのパスワード漏洩を防ぐために、普段の運用や開発業務ではなるべくルートユーザーを用いず、限定された権限を保有するIAMユーザーを新たに発行し普段の業務に用いることを検討してください。そしてその際に、付与される権限は、あとで変更可能であることを踏まえて、必要最低限にしておくことも大事なポイントです。
MFAの有効化
追加セキュリティとして、特権のある IAM ユーザー (機密性の高リソースまたは API オペレーションにアクセスが許されているユーザー) に対して多要素認証 (MFA) を有効化することができます。MFA により、ユーザーは独自の認証コード (ワンタイムパスワード、または OTP) を作成するデバイスを使用することができます。その場合、ユーザーは自身の通常の認証情報 (ユーザーネームやパスワードなど) および OTP を提供する必要があります。MFA デバイスは、ハードウェアの特定部品のほか、またはスマートフォンで作動するアプリのような仮想デバイスでも可能です。
こちらに設定方法などがまとまっています。
アクセスキーの発行を最小にとどめる
AWS にプログラムでアクセスするときには、アクセスキーを使用して、自身の ID とアプリケーションの ID を検証します。アクセスキーは、アクセスキー ID とシークレットアクセスキーとで構成されます。IAMユーザーでは、マネージメントコンソールへのログイン用パスワードの他にシークレットキーと言われる秘密鍵を付与することができます。これらは、AWS サービス のAPI への安全な REST または HTTP クエリプロトコルリクエストで使われ、ひとつのIAMユーザーに対して両方を設定することができます。ただしこの設定は注意が必要です。例えばあるIAMユーザーに両方設定されていた場合、どちらか片方が漏洩した時点でそのアカウントは漏洩します。このためAWSでは特にルートユーザーに対してシークレットキーの設定を行うこととお勧めしていません。別のIAMユーザーをマネージメントコントロールへのログイン用とは別に作成し、コンソールへのログイン用パスワードを設定せず、シークレットキーのみの設定を行うなど、常に権限が最小である設定をお勧めしています。
Git SecretsとEC2インスタンス用IAMロールの使用
先のシークレットーはプログラムで使用されることとなるため、プログラムのソースコード漏洩のタイミングで漏洩してしまうするケースがあります。この場合シークレットキーを手に入れた第三者はAPI経由でAWSアカウントの操作が許された権限の範囲内において可能となるため、シークレットキーの管理には注意が必要です。ソースコードの管理にGitHubを利用する場合、AWS Labsの「Git Secrets」の利用をご検討ください。パスワードなどの秘密情報を、誤って git リポジトリに commit することを防げます。
また、実行環境がAmazon EC2である場合、インスタンスのIAMロールの設定をお勧めします。IAM ロールは、AWS で許可/禁止する操作を決めるアクセス権限ポリシーが関連付けられている AWS ID であるという点で、ユーザーと似ています。ただし、ユーザーは 1 人の特定の人に一意に関連付けられますが、ロールはそれを必要とする任意の人や機能が引き受けるようになっています。EC2の起動時に、そのインスタンスにIAMロールを設定することができます。その場合、以下のコマンドでシークレットキーを毎回必要な時に動的に入手できるようになります。
ソースコードにシークレットキーを直接記載することに比べるとステップ数は増えますが、そのソースコードが漏洩した時でもシークレットキーが漏洩しないという大きなメリットがあります。ソースコードの変更が可能な場合、ぜひ検討してみてください。
EC2へのIAMロールのアタッチは昔はEC2インスタンスの新規構築時しか行えませんでしたが、2017年2月にアップデートがかかり、既存EC2インスタンスへのアタッチも可能となっています。
その他のベストプラクティスについては以下にまとまっていますので、ぜひ一度目を通してみてください。
– プロダクトマーケティング エバンジェリスト 亀田