IAMベストプラクティスとAWSセキュリティチェックリストにinsightwatchで対応する方法

「IAMベストプラクティス」には、AWSが提供するIAMの設定や運用に関するベストプラクティス、「AWSセキュリティチェックリスト」には、AWSリソースのセキュリティを確保するために必要な項目が記載されています。 セキュリティ監査サービス「insightwatch(インサイトウォッチ)」では、「IAMベストプラクティス」と、「AWSセキュリティチェックリスト」に記載された項目を自動でチェックする事ができます。
2018.11.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

IAM等のAWSサービスは非常に柔軟な設定ができる反面、ちょっとした見落としからセキュリティホールとなる可能性があります。 そのようなリスクを回避するためのガイドラインとして「IAMベストプラクティス」と、「AWSセキュリティチェックリスト」があります。

「IAMベストプラクティス」には、AWSが提供するIAMの設定や運用に関するベストプラクティス、 「AWSセキュリティチェックリスト」には、AWSリソースのセキュリティを確保するために必要な項目が記載されています。

これらはAWSを利用する上で重要な項目になりますが、項目数が多く確認にはそれなりの労力がかかります。 そんなときは、弊社のプロダクトであるセキュリティ監査サービス「insightwatch(インサイトウォッチ)」がオススメです。

「IAMベストプラクティス」と、「AWSセキュリティチェックリスト」に記載された項目を自動でチェックする事ができます。

本エントリでは、チェック結果がinsightwatchでどのように出力されるのか、またどういったチェックを行っているのか、解説してみたいと思います。

チェック結果

insightwatchでチェックを行うと、以下のようなレポートが出力されます。 こちらは、チェック結果をサマリーしたページです。

94

まず、確認すべきは、結果が「重要」と記載されいてる項目になります。 具体的にどの項目の結果が「重要」なのかは、各チェック項目のページを見ると記載されています。

93

こちらのレポートを確認することで、チェック項目に準拠しているかどうか一目でわかるようになっています。 ただし、「重要」だからといって、全てにおいて対応する必要がない場合もあります。

例えば、チェック項目に「パブリックアクセス可能なS3バケットを作成しないこと」とありますが、S3コンテンツをWEB配信するケースでは、S3バケットのパブリック権限が必要になります。 意図した設定であれば問題ない場合もありますので、次項のチェックに対する解説を考慮の上、必要に応じて対応してください。

対応方法については、insightwatchのコンソールを確認してください。 レポートには表示されていない、チェック項目に対する説明や、対応方法が記載されています。

99

環境への反映等、対応を実施したら、再度チェックを行いレポートを確認するようにしてください。 また、定期的にチェックを行い、セキュリティを確保するようにしてください。

なお、チェック結果の区分は他にもあります。

  • マネージド…クラスメソッドメンバーズにご契約いただいたAWSアカウントのみ表示されます。クラスメソッドにて管理している項目になりますので、お客さまでの対応は不要です。
  • 正常…異常が検出されなかった項目です。
  • 重要…チェック項目で異常が検出されたことを示していますので、何らかの対応が必要です。

こちらの区分は確認するチェック項目により異なりますのでご注意ください。

IAMベストプラクティス

AWSアカウントのrootユーザーのアクセスキーをロックする

rootアカウントのアクセスキーが設定されていないかチェックしています。 rootアカウントは強力な権限を持ちますので、rootアカウントは利用せずIAMユーザーを利用してください。

システムで利用している場合は、削除や無効化によってシステムへの影響が考えられますので、対応を行う前に、アクセスキーの利用状況を確認しておきましょう。

98

なお、弊社メンバーズアカウントをご利用中のお客様の場合、レポートには「マネージド」と表示され、お客様側での対応は不要な項目となります。

個々の IAM ユーザーの作成

IAMユーザーの存在をチェックしています。 AWSアカウントにアクセスする人に対してIAMユーザーを作成してください。

IAM ユーザーへのアクセス権限を割り当てるためにグループを使用すること

IAMポリシーが直接アタッチされているIAMユーザの存在をチェックしています。 グループレベルで権限を割り当てることで、ユーザーが増えた場合の権限管理の複雑さを軽減し、誤った権限を付与するリスクを低下させます。 IAMユーザーをグループに所属させ、グループにポリシーをアタッチ、IAMユーザーからポリシーを削除してください。

AWS定義のポリシーを使用して可能な限りアクセス権限を割り当てる

IAMグループまたはロールに付与する権限は、可能な限りAWS管理ポリシーを使用してください。 AWS管理ポリシーは、AWSによって保守や更新が行われます。

ただし、要件によっては、AWS管理ポリシーだけでは対応できない場合もありますので、 必要に応じてカスタマー管理ポリシーで対応するようにしてください。

こちらの項目については、初回チェック時の結果は必ず「重要」となります。

95

insightwatchのコンソールより[確認]をクリックすることで、アラートを180日間抑止することが可能です。 [確認]をクリックするまではチェック結果は「重要」で出力され続けますので、AWS管理ポリシーのみ利用している場合や、意図的にカスタマー管理ポリシーを利用している際は抑止を検討ください。

97

[確認]をクリックすると、以下のポップアップが出力され、コメントの入力が可能となります。

96

最小権限を付与する

制限なしのアクセス許可("Effect": "Allow", "Action": "", "Resource": "")をアタッチしているユーザー、グループ、ロールの存在をチェックしています。 ユーザーが利用するサービスを確認し、必要な権限のみを付与してください。

割り当てる権限を最小化することが、セキュリティ上の鉄則ではありますが、最小権限を完全に特定することは困難である場合が多いです。

最小権限を特定するアプローチとしては、把握できている必要な権限のみを与えて、必要に応じて権限を付与する方法と、ベースとなる権限が含まれるAWS管理ポリシーを与えて、不要な権限を剥奪する方法があります。システムの特性や運用を考慮した上で対応を実施してください。

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

IAMポリシーに定義されているサービスのアクセスレベルを参照して、ポリシーが提供するサービスへのアクセス権限を確認してください。

こちらの項目も、初回チェック時の結果は必ず「重要」となります。 ポリシーに必要なアクションだけが定義されていることを確認した後、必要に応じてアラートの抑止を検討ください。

ユーザーの強力なパスワードポリシーを設定

パスワードポリシーをチェックしています。パスワードポリシーを強化することでパスワードを推測されにくくします。 IAMのパスワードポリシーにて「1文字以上の大文字」「1文字以上の小文字」「1文字以上の記号」「1文字以上の数字」「パスワードを14文字以上」「パスワードの再利用禁止」「90日以内のパスワード有効期限」「ユーザーにパスワードの変更を許可」を有効にしてください。

特権ユーザーに対してMFAを有効化する

MFAが設定されていないIAMユーザの存在をチェックしています。 IAMユーザーのMFAを有効化し、ログイン時のセキュリティを強化してください。

Amazon EC2 インスタンスで実行するアプリケーションに対し、ロールを使用する

IAMロールがアタッチされていないEC2の存在をチェックしています。 EC2からAWSリソースへのアクセスにアクセスキーを使わないことでキー漏洩時のリスクを低減できます。 適切な権限を付与したIAMロールを作成し、EC2にアタッチしてください。

認証情報を共有するのではなく、ロールを使って委託する

アクセスキー、シークレットキーをアカウント間で共有しないでください。 他のAWSアカウントからお客様のAWSアカウントへのアクセスを許可する場合、アクセスキー共有するのではなくIAMロールを使用してください。

こちらの項目も、初回チェック時の結果は必ず「重要」となります。 IAMロールが利用されていること確認した後、必要に応じてアラートの抑止を検討ください。

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

90日以上ローテーションされていないアクセスキーの存在をチェックしています。 アクセスキーは、ツール(AWS CLIやPowerShell、AWS SDKなど)からAWSを利用するための認証情報です。 定期的にローテーションすることで、アクセスキーの盗難や漏洩に対するリスクを軽減します。

不要な認証情報を削除する

90日以上利用していない認証情報(IAMユーザー、アクセスキー)の存在をチェックしています。 利用していない認証情報を定期的に棚卸することでセキュリティを向上させます。 認証情報の無効化、または削除を行なってください。

システムで利用している場合は、削除や無効化による影響が考えられますので、 対応を行う前に、アクセスキーの利用状況等を必ず確認するようにしましょう。

追加セキュリティに対するポリシー条件を使用する

作成したIAMポリシーに、実行可能な範囲内で条件を定義してください。 IAMポリシーに条件を定義することで、アクセス可能なリソース等を制限できます。

CloudFrontのアクセスログが有効であること

CloudFront利用時にアクセスログが有効であることをチェックしています。 CloudFrontでは受信するすべてのユーザーリクエストに関する詳細情報を含めたログファイルが作成できます。 CloudFrontディストリビューションのログ記録を有効にしてください。

全リージョンでCloudTrailが有効であること

CloudTrailはAWSのAPI呼び出しを記録します(IP、時刻、パラメータ)。 セキュリティ分析、リソース変更追跡、コンプライアンス監査に必要になりますおんで、CloudTrailを有効化してください。

CloudWatchメトリクスを確認すること

CloudWatchメトリクスを確認することで、十分に利用されていないインスタンス等を把握することができ、インスタンスタイプの見直し等が行えます。

こちらの項目も、初回チェック時の結果は必ず「重要」となります。 CloudWatchメトリクス確認した後、必要に応じてアラートの抑止を検討ください。

全リージョンでAWS Configが有効であること

AWS Configが有効になっていないリージョンが存在をチェックしています。 AWS Configを有効にすることでサポートされているリソースの構成管理ができ、セキュリティ分析、リソース変更の追跡、コンプライアンス監査が可能になります。

予期せぬ設定変更等に対して、追跡や通知が可能になりますので、有効にしておきましょう。

S3バケットでログ記録が有効であること

アクセスログ記録が有効化されていないS3バケットの存在をチェックしています。 S3バケットのアクセスログには、アクセス時間、操作対象のリソース、操作内容が記録され監査ログとして利用できますので、有効化しておきましょう。

Security Checklist

ルートアカウントのアクセスキーが設定されていないこと

rootアカウントのアクセスキーが設定されていないかチェックしています。 rootアカウントは強力な権限を持ちますので、rootアカウントは利用せずIAMユーザーを利用してください。

システムで利用している場合は、削除や無効化による影響が考えられますので、 対応を行う前に、アクセスキーの利用状況を確認しておきましょう。

98

なお、弊社メンバーズアカウントをご利用中のお客様の場合、レポートには「マネージド」と表示され、お客様側での対応は不要な項目です。

CloudTrailログのS3バケットが公開設定となっていないこと

CloudTrailログを保管している、S3バケットがパブリック公開されていないかチェックしています。 不特定多数が読み取れる状態になっている為、パブリック公開設定を削除してください。

請求レポートのS3バケットが公開設定となっていないこと

不特定多数が読み取れる状態になっている為、今すぐパブリック公開設定を削除してください。

こちらの項目も、初回チェック時の結果は必ず「重要」となります。 請求レポートの出力先バケットが公開されていないか確認して、必要に応じてアラートの抑止を検討ください。

全リージョンでCloudTrailが有効であること

CloudTrailはAWSのAPI呼び出しを記録します(IP、時刻、パラメータ)。 セキュリティ分析、リソース変更追跡、コンプライアンス監査に必要になりますおんで、CloudTrailを有効化してください。

管理者ロールも限定的な権限であること

制限なしのアクセス許可("Effect": "Allow", "Action": "", "Resource": "")をアタッチしているユーザー、グループ、ロールの存在をチェックしています。 ユーザーが利用するサービスを確認し、必要な権限のみを付与してください。

割り当てる権限を最小化することが、セキュリティ上の鉄則ではありますが、最小権限を完全に特定することは困難である場合が多いです。

最小権限を特定するアプローチとしては、把握できている必要な権限のみを与えて、必要に応じて権限を付与する方法と、ベースとなる権限が含まれるAWS管理ポリシーを与えて、不要な権限を剥奪する方法があります。システムの特性や運用を考慮した上で対応を実施してください。

AWS Security Token Service(STS)とロールを利用すること

EC2からAWSリソースへのアクセスは、アクセスキーではなくIAMロールを利用することでキー漏洩時のリスクを低減できます。 アプリケーションではセキュリティ認証情報を保存せず、AWS STSを利用してください。

こちらの項目も、初回チェック時の結果は必ず「重要」となります。 IAMロールが利用されていること確認した後、必要に応じてアラートの抑止を検討ください。

毎月の請求レポートで使用状況を確認すること

請求レポートでは、AWSリソース、使用タイプ等の明細項目が表示されます 請求レポートを確認しておくことで、想定外の課金を回避するために役立ちます。

こちらの項目も、初回チェック時の結果は必ず「重要」となります。 請求レポート確認する運用が確立している場合等、必要に応じてアラートの抑止を検討ください。

暗号化されたEBSボリュームを使用すること

Amazon EBS 暗号化機能を使用して暗号化が有効化されていないEBSの存在をチェックしています。 インスタンスとそれに接続されたEBSストレージ間でのデータの保存と転送中のデータの両方のセキュリティが保証されます。 Amazon EBS 暗号化機能を使用してEBSを暗号化をしてください。

利用可能な全てのリージョンにおいて、VPC Flow Logsが有効化され ていること

VPC Flow Logsが有効化されていないVPCの存在をチェックしています。 利用可能な全てのリージョンにおいて、VPC Flow Logsを有効にしてください。 VPC Flow Logsは、VPC内のネットワーク通信のログで、セキュリティ分析や異常な通信を調査するのに役立ちます。

EC2キーペアを保護すること

EC2キーペアを所持していることで、EC2インスタンスへアクセス可能な場合があります。 EC2インスタンスにログインするキーペアを定期的にローテーション(削除/作成)してください。

AutoScalingグループ等を使用している場合は、 キーペアが見つからない場合にインスタンスの起動に失敗しますので、交換するキーペアが起動設定で指定されていないことを確認するようにしてください。

こちらの項目も、初回チェック時の結果は必ず「重要」となります。 定期的にローテーションする運用が確立している場合等、必要に応じてアラートの抑止を検討ください。

EC2でのAWSリソースへのAPIアクセスはIAMインスタンスロールを利用していること

IAMロールがアタッチされていないEC2を検出します。 EC2でのAWSリソースへのAPIアクセスはIAMインスタンスロールを利用します。 EC2からAWSリソースへのアクセスにアクセスキーを使わないことでキー漏洩時のリスクを低減できます。 適切な権限を付与したIAMロールを作成し、EC2にアタッチしてください。

セキュリティグループを使用してEC2の通信を制御すること

EC2インスタンスに対するインバウンドおよびアウトバウンドトラフィックの制御にセキュリティグループを利用してください。

ただし、システムによっては、ネットワークACLで通信を制御している場合もありますので、システムの特性を考慮して対応するようにしてください。

こちらの項目も、初回チェック時の結果は必ず「重要」となります。 セキュリティグループを使用されている場合等、必要に応じてアラートの抑止を検討ください。

パブリックアクセス可能なS3バケットを作成しないこと

パブリックアクセス可能なS3バケットの存在をチェックしています。 意図したパブリックアクセスの場合もありますので、必ずしも対応が必要な項目ではありません。 意図せずバケットが検出された場合、パブリック公開設定を削除してください。

サーバ側の暗号化(SSE-S3)を利用してバケットを保護すること

サーバ再度側の暗号化(SSE-S3)が有効でないバケットの存在をチェックしています。 クライアントサイド暗号化を利用している場合もあるかと思いますので、必要に応じて対応を実施してください。

S3バケットへのインバウンドおよびアウトバウンドのトラフィックを 暗号化すること

S3バケットへのアクセスはHTTPSプロトコルを使用してアクセスしてください。

こちらの項目も、初回チェック時の結果は必ず「重要」となります。 HTTPSプロトコルを使用してアクセスしている場合等、必要に応じてアラートの抑止を検討ください。

S3のバージョン管理、S3のライフサイクルポリシーを理解すること

S3バージョニングを使用するとS3バケットに格納されたあらゆるオブジェクトのバージョンを、格納、取得、復元することができます。

ライフサイクル設定を使用すると、別のストレージクラスにオブジェクトを移行することや、オブジェクトの有効期限を定義することができます。

こちらの項目も、初回チェック時の結果は必ず「重要」となります。 バージョン管理、ライフサイクルポリシーを理解し、意図した設定の場合等、必要に応じてアラートの抑止を検討ください。

S3のアクセスログを有効化すること

アクセスログ記録が有効化されていないS3バケットの存在をチェックしています。 S3バケットのアクセスログには、アクセス時間、操作対象のリソース、操作内容が記録され監査ログとして利用できますので、有効化しておきましょう。

さいごに

AWSを安心して利用するためには、多数の確認を必要とする事がお伝えできたのではないでしょうか。 insightwatchを使えば、簡単にセキュリティチェックを行うことできますので、定期的にチェックすることをお勧めします。

また、insightwatchではCISベンチマークの確認も実施することが可能ですので、是非利用してみてください。

ちなみに、レポートの確認方法など、 insightwatchのハンズオンセミナーも予定していますので、ご興味ある方はどうぞ参加くださいませ!

参考

insightwatchの利用方法等、以下の記事もあわせてご確認ください。

AWSを使うときに確認すべき52のセキュリティチェック項目と15分でできる簡単なチェックの方法

[AWS]insightwatchを新規登録して使ってみた #AWSSummit