IAM でのセキュリティのベストプラクティス - AWS Identity and Access Management

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

IAM でのセキュリティのベストプラクティス

AWS リソースのセキュリティを確保するために、AWS Identity and Access Management (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 ユーザーのアクセス許可を変更、または無効にすることができます。(ルートユーザー 認証情報を譲渡すると、無効にするのが難しくなり、アクセス許可を制限できなくなります。)

AWS は、アクセス許可のない新しいユーザーを作成し、即時のパスワードの変更を要求することを推奨しています。ユーザーが初めてサインインした後、ユーザーにポリシーを追加できます。詳細については、「IAM ユーザーを安全に作成するにはどうすればよいですか?」をご参照ください。

注記

個別の IAM ユーザーに対しアクセス許可を設定する前に、グループに関する次のポイントを確認してください。

IAM ユーザーへのアクセス許可を割り当てるためにグループを使います。

個々の IAM ユーザーの権限を定義する代わりに、ジョブ機能 (管理者、開発者、監査など) に関連するグループを作成する方が便利です。次に、各グループに関連のあるアクセス許可を定義します。最後に、IAM ユーザーをそれらのグループに割り当てます。IAM グループのすべてのユーザーに、グループに割り当てられたアクセス許可が継承されます。このようにすれば、グループ全体の変更を一度でできるのです。お客様の会社内で社員の異動がある場合は、単に IAM ユーザーが所属する IAM グループを変更すればよいだけです。

詳細については、以下を参照してください。

最小限の特権を認める。

IAM ポリシーを作成する場合、最小限のアクセス権を付与するという標準的なセキュリティアドバイスに従うか、タスクの実行に必要なアクセス許可のみ付与します。ユーザー (およびロール) が何をする必要があるのかを決定し、それからそれらのタスクのみの実行を許可するポリシーを作成します。

最小限のアクセス権限から開始し、必要に応じて追加のアクセス権限を付与します。この方法は、寛容なアクセス権限で始め、後でそれらを強化しようとするよりも安全です。

アクセスレベルのグループ化を使用して、ポリシーが付与するアクセスレベルを把握できます。ポリシーアクションは、ListReadWritePermissions management、または Tagging として分類されています。たとえば、ListRead アクセスレベルからアクションを選択し、ユーザーに読み取り専用のアクセスレベルを付与することができます。アクセスレベルの権限を理解するためにポリシーの概要を使用するには「アクセスレベルを使用して、IAM アクセス許可を確認する」をご覧ください。

JSON ポリシーを作成および編集するときに、IAM Access Analyzer を使用してポリシーの検証を実行できます。既存のポリシーをすべて確認し、検証することをお勧めします。IAM Access Analyzerでは、100 を超えるポリシーチェックを行いポリシーを検証できます。ポリシー内のステートメントで過度なアクセス権限が付与されていると考えられる場合、セキュリティ警告が生成されます。最小権限の付与に取り組むときは、セキュリティ警告によって示される実用的な推奨事項を使用できます。IAM Access Analyzer が提供するポリシーチェックの詳細については、「IAM Access Analyzer ポリシーの検証」を参照してください。

最小権限で役立つもう 1 つの機能は、最終アクセス情報です。IAM ユーザー、グループ、ロール、ポリシーのこの情報は、IAM コンソールの詳細ページの [アクセスアドバイザー] に表示されます。最終アクセス時間情報には、Amazon S3 など、一部のサービスで最後にアクセスされたアクションに関する情報も含まれます。AWS Organizations 管理アカウントの認証情報を使用してサインインすると、IAM コンソールの [AWS Organizations] セクションでサービスの最終アクセス時間情報を表示できます。AWS CLI または AWS API を使用して、IAM または Organizations でエンティティまたはポリシーの最終アクセス時間情報のレポートを取得するために使用することもできます。この情報を使用して不要なアクセス許可を識別し、最小権限の原則により良く準拠するよう IAM または組織のポリシーを改善することができます。詳細については、「最終アクセス時間情報を使用した AWS のアクセス許可の調整」を参照してください。

アクセス許可をさらに削減するには、AWS CloudTrail の [イベント履歴] でアカウントのイベントを表示します。CloudTrail のイベントログには、ポリシーのアクセス許可の削減に使用できる詳細なイベント情報が含まれます。ログには、IAM エンティティが必要とするアクションとリソースのみが含まれます。詳細については、AWS CloudTrail ユーザーガイドの「CloudTrail コンソールのCloudTrail イベント」を参照してください。

詳細については、以下を参照してください。

AWS 管理ポリシーを使用したアクセス許可の使用開始

必要なアクセス許可のみを従業員に付与するには、時間と IAM ポリシーの詳細な知識が必要です。従業員には、使用する AWS サービスについて理解する時間が必要です。管理者には、IAM を理解し、テストする時間が必要です。

すぐに使用を開始するには、AWS 管理ポリシーを使用して、使用開始に必要なアクセス許可を従業員に付与することができます。これらのポリシーはアカウントですでに有効になっており、AWS によって管理および更新されています。AWS 管理ポリシーの詳細については、「AWS 管理ポリシー」を参照してください。

AWS 管理ポリシーは、多くの一般的ユースケースでアクセス許可を提供できるように設計されています。フルアクセスの AWS 管理ポリシー (例: AmazonDynamoDBFullAccess および IAMFullAccess) では、フルアクセスをサービスに付与して、サービス管理者のアクセス許可を定義します。パワーユーザーの AWS 管理ポリシー (AWSCodeCommitPowerUser および AWSKeyManagementServicePowerUser) では、アクセス許可管理のアクセス許可を付与せずに、複数のアクセスレベルを AWS サービスに付与することができます。部分的なアクセスの AWS 管理ポリシー (例: AmazonMobileAnalyticsWriteOnlyAccess および AmazonEC2ReadOnlyAccess) では、特定のアクセスレベルを AWS サービスに付与することができます。AWS 管理ポリシーでは、ポリシーを自身で記述する場合よりも簡単に、適切なアクセス許可がユーザー、グループ、ロールに割り当てられます。

職務機能の AWS 管理ポリシーは、複数のサービスに対応し、IT 業界の一般的な職務機能に連携することができます。職務機能ポリシーのリストと説明については、職務機能の AWS 管理ポリシー を参照してください。

ポリシーの検証

作成するポリシーを検証するのがベストプラクティスです。JSON ポリシーを作成および編集するときに、ポリシーの検証を実行できます。IAM は、JSON 構文エラーを識別する一方、IAM Access Analyzer は 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成に役立ちます。既存のポリシーをすべて確認し、検証することをお勧めします。ポリシーの検証の詳細については、「IAM ポリシーの検証」を参照してください。IAM Access Analyzer が提供するポリシーチェックの詳細については、「IAM Access Analyzer ポリシーの検証」を参照してください。

インラインポリシーではなくカスタマー管理ポリシーを使用する

カスタムポリシーの場合は、インラインポリシーではなく、管理ポリシーを使用することをお勧めします。これらのポリシーを使用する主な利点は、コンソール内のすべての管理ポリシーを 1 か所で確認できることです。また、AWS CLI または AWS API の単一オペレーションで、この情報を表示することもできます。インラインポリシーは、IAM アイデンティティ (ユーザー、グループ、ポリシー) にのみ存在するポリシーです。管理ポリシーは、複数のアイデンティティにアタッチできる個別の IAM リソースです。詳細については、「管理ポリシーとインラインポリシー」をご参照ください。

アカウントにインラインポリシーがある場合は、管理ポリシーに変換することができます。これを行うには、ポリシーを新しい管理ポリシーにコピーします。次に、インラインポリシーを持つ ID に新しいポリシーをアタッチします。次に、インラインポリシーを削除します。これを行うには、以下の手順を行います。

インラインポリシーを管理ポリシーに変換するには

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

  2. ナビゲーションペインで、[グループ]、[ユーザー]、または [ロール] を選択します。

  3. リストで、削除するポリシーを持つグループ、ユーザー、またはロールの名前を選択します。

  4. [Permissions] タブを選択します。[グループ] を選択した場合は、必要に応じて [インラインポリシー] セクションを展開します。

  5. グループで、削除するインラインポリシーの横にある [ポリシーの表示] を選択します。ユーザーおよびロールで、[Shownmore] を選択し (必要な場合)、削除するインラインポリシーの横にある矢印を選択します。

  6. ポリシーの JSON ポリシードキュメントをコピーします。

  7. ナビゲーションペインで、[ポリシー] を選択します。

  8. [ポリシーの作成] を選択し、[JSON] タブを選択します。

  9. 既存のテキストを JSON ポリシーテキストに置き換え、[ポリシーの確認] を選択します。

  10. ポリシーの名前を入力し、[ポリシーの作成] を選択します。

  11. ナビゲーションペインで、[グループ]、[ユーザー]、または [ロール] を選択し、削除するポリシーを含むグループ、ユーザー、またはロールの名前を再度選択します。

  12. グループで、[ポリシーのアタッチ] を選択します。ユーザーとロールで、[アクセス許可の追加] を選択します。

  13. グループで、新しいポリシーの名前の横にあるチェックボックスをオンにし、[ポリシーのアタッチ] を選択します。ユーザーまたはロールで、[アクセス許可の追加] を選択します。次のページで、[Attach existing policies directly (既存のポリシーを直接アタッチ)] を選択し、新しいポリシーの名前の横にあるチェックボックスをオンにしたら、[Next: Review (次へ: 確認)]、[アクセス許可の追加] の順に選択します。

    グループ、ユーザー、またはロールの [概要] ページに戻ります。

  14. グループで、削除するインラインポリシーの横にある [ポリシーの削除] を選択します。ユーザーまたはグループで、削除するインラインポリシーの横にある [X] を選択します。

状況によっては、管理ポリシーよりインラインポリシーを選択することをお勧めします。詳細については、「管理ポリシーとインラインポリシーの比較」を参照してください。

アクセスレベルを使用して、IAM アクセス許可を確認する

AWS アカウントのセキュリティを向上させるには、IAM ポリシーを定期的に確認し、モニタリングする必要があります。ポリシーにより、必要なアクションのみの実行に必要な最小限の権限が付与されていることを確認します。

ポリシーを確認する場合、そのポリシー内の各サービスのアクセスレベルの要約を含むポリシー概要を表示できます。AWS は、各サービスのアクションを、各アクションが実行する内容に基づいて、5 つのアクセスレベル (ListReadWritePermissions 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 コンソールの [Account Settings] (アカウント設定) ページで、アカウントのカスタムパスワードポリシーを作成できます。AWS のデフォルトのパスワードポリシーからアップグレードして、最小文字数、アルファベット以外の文字が必要かどうか、変更頻度など、パスワードの要件を定義します。詳細については、「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 アカウントを指定することもできます。信頼ゾーン (信頼できる組織またはアカウント) 外にあるアカウントのプリンシパルにロールを引き受けるアクセス権があるかどうかについては、「IAM Access Analyzer とは」を参照してください。

詳細については、「ロールの用語と概念」をご参照ください。

アクセスキーを共有しない

アクセスキーを使用すると、プログラムから AWS にアクセスできます。暗号化されていないコード内にアクセスキーを埋め込んだり、これらのセキュリティ認証情報を AWS アカウントのユーザー間で共有したりしないでください。AWS へのアクセスを必要とするアプリケーションの場合は、IAM ロールを使用して一時的セキュリティ認証情報を取得するようにプログラムを設定します。プログラムによるアクセスをユーザーに個別に許可するには、個人用のアクセスキーを持つ IAM ユーザーを作成します。

詳細については、「IAM ロールの切り替え (AWS API)」および「IAM ユーザーのアクセスキーの管理」を参照してください。

認証情報を定期的にローテーションする。

お客様自身のパスワードとアクセスキーを定期的に変更し、アカウント内のすべての IAM ユーザーにも変更を促してください。そうすることにより、知らない間にパスワードまたはアクセスキーが漏れた場合でも、その認証情報を使ってお客様のリソースにアクセスされる期間を制限できます。カスタムパスワードポリシーをアカウントに適用することで、すべての IAM ユーザーに AWS マネジメントコンソール パスワードの変更を要求できます。更新する頻度を選択することも可能です。

アカウントのカスタムパスワードポリシーを設定する方法の詳細については、「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 ベストプラクティスについてのビデオ説明。

以下のビデオには、これらのベストプラクティスについて、またベストプラクティスで述べられた機能の操作方法についての追加の詳細を示す参考説明が含まれています。