IAM のベストプラクティス
AWS リソースのセキュリティを確保するために、AWS Identity and Access Management (IAM) サービスの以下の推奨事項に従うことができます。
トピック
- AWS アカウントのルートユーザー アクセスキーをロックする
- 個々の IAM ユーザーの作成
- IAM ユーザーへのアクセス許可を割り当てるためにグループを使用する
- 最小権限を付与する
- AWS 管理ポリシーを使用したアクセス許可の使用開始
- インラインポリシーではなくカスタマー管理ポリシーを使用する
- アクセスレベルを使用して、IAM 権限を確認する
- ユーザーの強力なパスワードポリシーを設定
- MFA の有効化
- Amazon EC2 インスタンスで実行するアプリケーションに対し、ロールを使用する
- ロールを使用したアクセス許可の委任
- アクセスキーを共有しない
- 認証情報を定期的にローテーションする
- 不要な認証情報を削除する
- 追加セキュリティに対するポリシー条件を使用する
- AWS アカウントのアクティビティの監視
- IAM ベストプラクティスについてビデオで説明する
AWS アカウントのルートユーザー アクセスキーをロックする
お客様はアクセスキー (アクセスキー ID およびシークレットアクセスキー) を使用し、AWS に対してプログラムによるリクエストをすることができます。ただし、AWS アカウントのルートユーザー のアクセスキーを使用しないでください。AWS アカウントのルートユーザー のアクセスキーにより、請求情報を含む、すべての AWS サービスのお客様のリソースすべてにフルアクセスできます。AWS アカウントのルートユーザー アクセスキーに関連付けられたアクセス許可を制限することはできません。
そのため、クレジットカード番号や他の機密情報を保護するのと同じように、自身の ルートユーザー アクセスキーを保護してください。これを行うには、いくつかの方法があります。
-
ご自身の AWS アカウントのルートユーザー に対するアクセスキーをまだお持ちでない場合、本当に必要な場合を除き、作成しないでください。代わりに、アカウント E メールアドレスとパスワードを使用して AWS マネジメントコンソール にサインインし、管理アクセス許可を付与した IAM ユーザーを作成します。
-
ご自身の AWS アカウントのルートユーザー に対するアクセスキーをすでにお持ちの場合は、削除してください。それを保持する必要がある場合は、アクセスキーを定期的にローテーション(変更)してください。ルートユーザー のアクセスキーを削除または変更するには、AWS マネジメントコンソール の「My Security Credentials page
」にアクセスして、アカウントの E メールアドレスとパスワードでサインインします。ご自身のアクセスキーは [Access keys] セクションで管理できます。アクセスキーのローテーションの詳細については、「アクセスキーの更新」を参照してください。 -
ご自身の AWS アカウントのルートユーザー のパスワードやアクセスキーを決して他者に開示しないでください。本書の残りのセクションでは、AWS アカウントのルートユーザー 認証情報を他のユーザーと共有したり、アプリケーションに埋め込んだりするのを避ける方法について紹介します。
-
AWS マネジメントコンソール にアクセスするアカウントレベルを保護するために、強度の高いパスワードを設定します。AWS アカウントのルートユーザー パスワードの管理の詳細については、「AWS アカウントのルートユーザーのパスワードの変更」を参照してください。
-
AWS アカウントのルートユーザー アカウントの AWS Multi-Factor Authentication (MFA) を有効にします。詳細については、「AWS での多エレメント認証 (MFA) の使用」を参照してください。
個々の IAM ユーザーの作成
AWS アカウントのルートユーザー 認証情報を使用して AWS にアクセスしないでください。また、認証情報を他のだれにも譲渡しないでください。代わりに、AWS アカウントへのアクセスが必要な人用に個別のユーザーを作成します。また同様にご自身にも IAM ユーザーを作成することにより、IAM ユーザーに管理アクセス許可を付与し、それらのユーザーをお客様の全作業で使用することができます。これを行う方法については、「最初の IAM 管理者のユーザーおよびグループの作成」を参照してください。
お客様のアカウントにアクセスする人に対して個別 IAM ユーザーを作成することにより、IAM ユーザーそれぞれに一意の認証情報を設定することができます。さらに、各 IAM ユーザーにそれぞれ異なるアクセス権限を付与することもできます。必要な場合には、いつでも IAM ユーザーのアクセス許可を変更、または無効にすることができます。(ルートユーザー 認証情報を譲渡すると、無効にするのが難しくなり、アクセス許可を制限できなくなります。)
しかし個別 IAM ユーザーに対しアクセス許可を設定する前に、グループに関する次のポイントを確認してください。
IAM ユーザーへのアクセス許可を割り当てるためにグループを使用する
個々の IAM ユーザーの権限を定義する代わりに、ジョブ機能 (管理者、開発者、監査など) に関連するグループを作成する方が便利です。次に、各グループに関連のあるアクセス許可を定義します。最後に、IAM ユーザーをそれらのグループに割り当てます。IAM グループのすべてのユーザーに、グループに割り当てられたアクセス許可が継承されます。このようにすれば、グループ全体の変更を一度でできるのです。お客様の会社内で社員の異動がある場合は、単に IAM ユーザーが所属する IAM グループを変更すればよいだけです。
詳細については、以下を参照してください。
最小権限を付与する
IAM ポリシーを作成する場合、最小限のアクセス権を付与するという標準的なセキュリティアドバイスに従うか、タスクの実行に必要なアクセス許可のみ付与します。ユーザー (およびロール) が何をする必要があるのかを決定し、それからそれらのタスクのみの実行を許可するポリシーを作成します。
最小限のアクセス権限から開始し、必要に応じて追加のアクセス権限を付与します。この方法は、寛容なアクセス権限で始め、後でそれらを強化しようとするよりも安全です。
アクセスレベルのグループ化を使用して、ポリシーが付与するアクセスレベルを把握できます。ポリシーアクションは、List
、Read
、Write
、Permissions
management
、または Tagging
として分類されています。たとえば、List
や Read
アクセスレベルからアクションを選択し、ユーザーに読み取り専用のアクセスレベルを付与することができます。アクセスレベルの権限を理解するためにポリシーの概要を使用するには「アクセスレベルを使用して、IAM 権限を確認する」をご覧ください。
これに役立つ機能のひとつに、サービスの最終アクセス時間データがあります。IAM ユーザー、グループ、ロール、ポリシーのこのデータは、IAM コンソールの詳細ページの [アクセスアドバイザー] に表示されます。AWS Organizations マスターアカウントの認証情報を使用してサインインすると、IAM コンソールの [AWS Organizations] セクションでこのデータを表示できます。AWS CLI または AWS API を使用して、IAM または 組織 でエンティティまたはポリシーのサービスの最終アクセス時間データのレポートを取得するために使用することもできます。この情報を使用して不要なアクセス許可を識別し、最小権限の原則により良く準拠するよう IAM または組織のポリシーを改善することができます。詳細については、「サービスの最終アクセス時間データを使用したアクセス許可の調整」を参照してください。
アクセス許可をさらに削減するには、AWS CloudTrail の [イベント履歴] でアカウントのイベントを表示します。CloudTrail のイベントログには、ポリシーのアクセス許可の削減に使用できる詳細なイベント情報が含まれます。ログには、IAM エンティティが必要とするアクションとリソースのみが含まれます。詳細については、AWS CloudTrail ユーザーガイドの「CloudTrail コンソールのCloudTrail イベント」を参照してください。
詳細については、以下を参照してください。
-
各サービスに対するポリシーのトピック。サービスを特定したリソースにポリシーを書く方法の例を挙げています。例:
-
Amazon DynamoDB 開発者ガイド の「Amazon DynamoDB の認証とアクセスコントロール」
-
Amazon Simple Storage Service 開発者ガイド の「バケットポリシーとユーザーポリシーの使用」
-
Amazon Simple Storage Service 開発者ガイド の「アクセスコントロールリスト (ACL) の概要」
-
AWS 管理ポリシーを使用したアクセス許可の使用開始
必要なアクセス許可のみを従業員に付与するには、時間と IAM ポリシーの詳細な知識が必要です。従業員には、使用する AWS サービスについて理解する時間が必要です。管理者には、IAM を理解し、テストする時間が必要です。
すぐに使用を開始するには、AWS 管理ポリシーを使用して、使用開始に必要なアクセス許可を従業員に付与することができます。これらのポリシーはアカウントですでに有効になっており、AWS によって管理および更新されています。AWS 管理ポリシーの詳細については、「AWS 管理ポリシー」を参照してください。
AWS 管理ポリシーは、多くの一般的ユースケースでアクセス許可を提供できるように設計されています。フルアクセスの AWS 管理ポリシー (例: AmazonDynamoDBFullAccess
職務機能の AWS 管理ポリシーは、複数のサービスに対応し、IT 業界の一般的な職務機能に連携することができます。職務機能ポリシーのリストと説明については、職務機能の AWS 管理ポリシー を参照してください。
インラインポリシーではなくカスタマー管理ポリシーを使用する
カスタムポリシーの場合は、インラインポリシーではなく、管理ポリシーを使用することをお勧めします。これらのポリシーを使用する主な利点は、コンソール内のすべての管理ポリシーを 1 か所で確認できることです。また、AWS CLI または AWS API の単一オペレーションで、この情報を表示することもできます。インラインポリシーは、IAM アイデンティティ (ユーザー、グループ、ポリシー) にのみ存在するポリシーです。管理ポリシーは、複数のアイデンティティにアタッチできる個別の IAM リソースです。詳細については、「管理ポリシーとインラインポリシー」を参照してください。
アカウントにインラインポリシーがある場合は、管理ポリシーに変換することができます。これを行うには、ポリシーを新しい管理ポリシーにコピーし、新しいポリシーをインラインポリシーがあるアイデンティティにアタッチします。次に、インラインポリシーを削除します。これを行うには、以下の手順を行います。
インラインポリシーを管理ポリシーに変換するには
-
AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/
)を開きます。 -
ナビゲーションペインで、[グループ]、[ユーザー]、または [ロール] を選択します。
-
リストで、削除するポリシーを持つグループ、ユーザー、またはロールの名前を選択します。
-
[Permissions] タブを選択します。[グループ] を選択した場合は、必要に応じて [インラインポリシー] セクションを展開します。
-
グループで、削除するインラインポリシーの横にある [ポリシーの表示] を選択します。ユーザーおよびロールで、[Show
n
more] を選択し (必要な場合)、削除するインラインポリシーの横にある矢印を選択します。 -
ポリシーの JSON ポリシードキュメントをコピーします。
-
ナビゲーションペインで、[ポリシー] を選択します。
-
[ポリシーの作成] を選択し、[JSON] タブを選択します。
-
既存のテキストを JSON ポリシーテキストに置き換え、[ポリシーの確認] を選択します。
-
ポリシーの名前を入力し、[ポリシーの作成] を選択します。
-
ナビゲーションペインで、[グループ]、[ユーザー]、または [ロール] を選択し、削除するポリシーを含むグループ、ユーザー、またはロールの名前を再度選択します。
-
グループで、[ポリシーのアタッチ] を選択します。ユーザーとロールで、[アクセス許可の追加] を選択します。
-
グループで、新しいポリシーの名前の横にあるチェックボックスをオンにし、[ポリシーのアタッチ] を選択します。ユーザーまたはロールで、[アクセス許可の追加] を選択します。次のページで、[Attach existing policies directly (既存のポリシーを直接アタッチ)] を選択し、新しいポリシーの名前の横にあるチェックボックスをオンにしたら、[Next: Review (次へ: 確認)]、[アクセス許可の追加] の順に選択します。
グループ、ユーザー、またはロールの [概要] ページに戻ります。
-
グループで、削除するインラインポリシーの横にある [ポリシーの削除] を選択します。ユーザーまたはグループで、削除するインラインポリシーの横にある [X] を選択します。
状況によっては、管理ポリシーよりインラインポリシーを選択することをお勧めします。詳細については、「管理ポリシーとインラインポリシーの比較」を参照してください。
アクセスレベルを使用して、IAM 権限を確認する
AWS アカウントのセキュリティを向上させるには、IAM ポリシーを定期的に確認し、モニタリングする必要があります。ポリシーにより、必要なアクションのみの実行に必要な最小限の権限が付与されていることを確認します。
ポリシーを確認する場合、そのポリシー内の各サービスのアクセスレベルの要約を含むポリシー概要を表示できます。AWS は、各サービスのアクションを、各アクションが実行する内容に基づいて、5 つのアクセスレベル (List
、Read
、Write
、Permissions management
、または Tagging
) のいずれかに分類します。これらのアクセスレベルを使用して、ポリシーに含めるアクションを判断できます。
たとえば、Amazon S3 サービスでは、大きいグループのユーザーに List
および Read
アクションへのアクセスを許可します。このようなアクションによって、これらのユーザーはバケットを一覧表示し、Amazon S3 内のオブジェクトを取得できます。ただし、S3
バケットの削除やオブジェクトの追加に必要な Amazon S3 Write
アクションへのアクセスは、小さいグループのユーザーにのみ許可する必要があります。さらに、Amazon S3 Permissions management
アクションへのアクセスを管理者のみに許可するように、アクセス許可を制限する必要があります。これにより、限られた数の人だけが Amazon S3 のバケットポリシーを管理できるようになります。これは、IAM
および AWS Organizations サービスでの Permissions management
アクションにとって特に重要です。Tagging
アクションを許可すると、リソースのタグのみを変更するアクションを実行するアクセス許可がユーザーに付与されます。ただし、一部の Write
アクション (CreateRole
など) は、リソースの作成時またはそのリソースの他の属性の変更時にリソースのタグ付けを許可します。したがって、Tagging
アクションへのアクセスを拒否してもユーザーによるリソースのタグ付けを防ぐことはできません。アクセスレベルの概要の詳細と例については、「ポリシー概要内のアクセスレベルの概要について」を参照してください。
サービスの各アクションに割り当てられているアクセスレベル分類を表示するには、「AWS のサービスのアクション、リソース、および条件キー」を参照してください。
ポリシーのアクセスレベルを確認するには、まずポリシーの概要を特定する必要があります。ポリシー概要は、管理ポリシーの [ポリシー] ページ、ユーザーにアタッチされているポリシーの [ユーザー] ページに含まれています。詳細については、「ポリシー概要 (サービスの一覧)」を参照してください。
ポリシー概要のアクセスレベルの列には、ポリシーにより、サービスの 4 つの AWS アクセスレベルの 1 つ以上に対してフルまたは制限付きのアクセスが許可されていることが示されます。あるいは、ポリシーにより、サービス内のすべてのアクションへのフルアクセスが許可されることが示される場合もあります。この [Access level (アクセスレベル)] 列の情報を使用して、ポリシーにより許可されるアクセスのレベルを把握できます。その後、AWS アカウントをより安全にするためのアクションを取ることができます。アクセスレベルの概要の詳細と例については、「ポリシー概要内のアクセスレベルの概要について」を参照してください。
ユーザーの強力なパスワードポリシーを設定
ユーザーが各自のパスワードを変更できるようにする場合は、強力なパスワードを作成し、パスワードを定期的に変更するようユーザーに要求します。IAM コンソールの [アカウント設定
詳細については、「IAM ユーザー用のアカウントパスワードポリシーの設定」を参照してください。
MFA の有効化
セキュリティを高めるために、アカウントのすべてのユーザーに対して多要素認証 (MFA) を要求することをお勧めします。MFA では、ユーザーは認証チャレンジに対するレスポンスを生成するデバイスを所有します。サインインプロセスを完了するには、ユーザーの認証情報とデバイス生成のレスポンスの両方が必要です。ユーザーのパスワードまたはアクセスキーが侵害された場合でも、追加の認証要件により、アカウントのリソースは安全です。
レスポンスは、以下のいずれかの方法で生成されます。
-
仮想およびハードウェア MFA デバイスは、ユーザーがアプリケーションまたはデバイスで表示してサインイン画面に入力するコードを生成します。
-
U2F のセキュリティキーは、ユーザーがデバイスをタップするとレスポンスを生成します。ユーザーはサインイン画面に手動でコードを入力しません。
機密性の高いリソースまたは API オペレーションにアクセスできる特権を持つ IAM ユーザーには、U2F またはハードウェア MFA デバイスを使用することをお勧めします。
MFA の詳細については、「AWS での多エレメント認証 (MFA) の使用」を参照してください。
アクセスキーの MFA 保護 API アクセスを設定する方法については、「MFA 保護 API アクセスの設定」を参照してください。
Amazon EC2 インスタンスで実行するアプリケーションに対し、ロールを使用する
Amazon EC2 インスタンスで動作するアプリケーションは、AWS の他のサービスにアクセスするために認証情報が必要です。アプリケーションに認証情報を提供する安全な方法は、IAM ロールを使用することです。IAM ロールは独自のアクセス許可を持ったエンティティではありますが、ユーザーまたはグループではありません。また、IAM ユーザーが持っているような永続的な自身の認証情報は設定されていません。Amazon EC2 の場合、IAM は EC2 インスタンスに一時的な認証情報を動的に提供し、これらの認証情報は自動的に更新されます。
EC2 インスタンスの起動時に、起動パラメータとしてインスタンスのロールを特定することができます。EC2 インスタンスで作動するアプリケーションは、AWS リソースにアクセスする際に、ロールの認証情報を使用できます。アプリケーションに許可される操作は、ロールのアクセス許可で決定されます。
詳細については、「Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス許可を付与する」を参照してください。
ロールを使用したアクセス許可の委任
アカウント間でセキュリティ認証情報を共有しないでください。これは、別の AWS アカウントのユーザーがお客様の AWS アカウントのリソースにアクセスできないようにするためです。その代わりに、IAM ロールを使用します。他のアカウントの IAM ユーザーに許可されている権限を指定するロールを定義できます。また、そのロールを引き受けることが許可されている IAM ユーザーを含む AWS アカウントを指定することもできます。
詳細については、「ロールに関する用語と概念」を参照してください。
アクセスキーを共有しない
アクセスキーを使用すると、プログラムから AWS にアクセスできます。暗号化されていないコード内にアクセスキーを埋め込んだり、これらのセキュリティ認証情報を AWS アカウントのユーザー間で共有したりしないでください。AWS へのアクセスを必要とするアプリケーションの場合は、IAM ロールを使用して一時的セキュリティ認証情報を取得するようにプログラムを設定します。プログラムによるアクセスをユーザーに個別に許可するには、個人用のアクセスキーを持つ IAM ユーザーを作成します。
詳細については、「IAM ロールへの切り替え (AWS API)」および「IAM ユーザーのアクセスキーの管理」を参照してください。
認証情報を定期的にローテーションする
お客様自身のパスワードとアクセスキーを定期的に変更し、アカウント内のすべての IAM ユーザーにも変更を促してください。そうすることにより、知らない間にパスワードまたはアクセスキーが漏れた場合でも、その認証情報を使ってお客様のリソースにアクセスされる期間を制限できます。パスワードポリシーをアカウントに適用することで、すべての IAM ユーザーにパスワードの変更を要求できます。更新する頻度を選択することも可能です。
アカウントのパスワードポリシーを設定する方法の詳細については、「IAM ユーザー用のアカウントパスワードポリシーの設定」を参照してください。
IAM ユーザーのアクセスキーの更新については、「アクセスキーの更新」を参照してください。
不要な認証情報を削除する
IAM ユーザーの不要な認証情報 (つまり、パスワードとアクセスキー) は削除します。たとえば、コンソールを使用しないアプリケーションで IAM ユーザーを作成した場合、IAM ユーザーにパスワードは必要ありません。同様に、ユーザーのみコンソールを使用する場合、他のユーザーのアクセスキーは削除します。最近使用されていないパスワードやアクセスキーは削除の対象となります。使用していないパスワードまたはアクセスキーを検索するには、CLI または API を使用するか、認証情報レポートをダウンロードします。
最近使用されていない IAM ユーザーの認証情報を検索する方法については、「使用していない認証情報の検索」を参照してください。
IAM ユーザーのパスワードを削除する方法については、「IAM ユーザーのパスワードの管理」を参照してください。
IAM ユーザーのアクセスキーを非アクティブ化または削除する方法については、「IAM ユーザーのアクセスキーの管理」を参照してください。
IAM 認証情報レポートの詳細については、「AWS アカウントの認証情報レポートの取得」を参照してください。
追加セキュリティに対するポリシー条件を使用する
実行可能な範囲内で、どの IAM ポリシーがリソースにアクセスできるかという条件を定義します。たとえば、要求が発生しなければならない許容 IP アドレスの範囲を指定するための条件を記述できます。また、指定した日付範囲または時間範囲内でのみリクエストが許可されるように指定することもできます。また、SSL または MFA (多要素認証) の使用を必要とする条件を設定することもできます。たとえば、Amazon EC2 インスタンスを終了できるようにするため、ユーザーに対し MFA デバイスの認証を要求することもできます。
詳細については、IAM ポリシー要素リファレンスの「IAM JSON ポリシーの要素: Condition」を参照してください。
AWS アカウントのアクティビティの監視
AWS のロギング機能を使用すると、ユーザーがアカウントで実行したアクションや使用されたリソースを確認できます。ログファイルには、アクションの日時、アクションのソース IP、不適切なアクセス許可のために失敗したアクションなどが示されます。
ロギング機能は次の AWS サービスで使用できます。
-
Amazon CloudFront
– CloudFront が受信したユーザーリクエストを記録します。詳細については、Amazon CloudFront 開発者ガイドの「アクセスログ」を参照してください。 -
AWS CloudTrail
– AWS アカウントに代わって行われた AWS API コールおよび関連イベント。詳細については、「AWS CloudTrail User Guide」を参照してください。 -
Amazon CloudWatch
– AWS クラウドリソースと AWS で実行されるアプリケーションをモニタリングします。定義したメトリクスに基づいて、CloudWatch でアラームを設定できます。詳細については、「Amazon CloudWatch ユーザーガイド」を参照してください。 -
AWS Config
– IAM ユーザー、グループ、ロール、およびポリシーを含む、AWS リソースの設定に関する詳細な履歴情報を提供します。たとえば、AWS Config を使用すると、特定の時刻にユーザーまたはグループに属していたアクセス許可を確認できます。詳細については、「AWS Config Developer Guide」を参照してください。 -
Amazon Simple Storage Service (Amazon S3)
– Amazon S3 バケットへのアクセスリクエストを記録します。詳細については、Amazon Simple Storage Service 開発者ガイドの「サーバーアクセスログ記録」を参照してください。
IAM ベストプラクティスについてビデオで説明する
以下のビデオには、これらのベストプラクティスについて、またベストプラクティスで述べられた機能の操作方法についての追加の詳細を示す参考説明が含まれています。