必見の記事

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

2018.11.06

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

はじめに

自分が使っているAWS環境のセキュリティに問題がないかと心配になることはないでしょうか?私はよくあります。そこでCIS Amazon Web Service Foundations Benchmark というAWSのセキュリティのガイドラインに沿って使っているAWSアカウントのセキュリティの状況をチェックしてみました。チェック項目は全部で52あります。内容を一通り確認したところ知らなかったAWSのセキュリティの機能やノウハウを知ることができ、見ただけでもとても勉強になりました。簡単にチェックする方法も併せて紹介しますのでぜひ使っているAWS環境でチェックしてみてください。

1 IAM

1.1 rootアカウントを利用しない

rootアカウントは強力な権限を持つため、rootアカウントを利用せずIAMユーザーを利用してください。通常運用でrootアカウントが利用されていないか確認し、利用している場合はIAMユーザーを利用するように変更してください。

ただし、rootアカウントでしかできない作業があります。以下のページに書かれている作業のみrootで行います。

AWSアカウントでしかできないことをまとめてみた

1.2 コンソールログイン用のパスワードが設定されたIAMユーザのMFAを有効化

IAMユーザーのMulti-Factor Authentication (MFA)を有効化し、ログイン時のセキュリティを強化します。

セキュアにIAMユーザのMFA有効化する手順

1.3 90日以上利用されていない認証情報を無効化

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

IAM ユーザーのパスワードの管理

IAM ユーザーのアクセスキーの管理

1.4 アクセスキーを90日以内にローテーションさせる

アクセスキーは、ツール(AWS CLIやPowerShell、AWS SDKなど)からAWSを利用するための認証情報です。定期的にローテーションすることで、アクセスキーの盗難や漏洩に対するリスクを軽減します。アクセスキーのローテーションを行なってください。更新方法は以下のページをご覧ください。

アクセスキーの更新

1.5 ~ 11 AWSアカウントのパスワードポリシーの設定

1.5から1.11はAWSアカウントのパスワードポリシーの設定になります。IAMのパスワードポリシーにて「1文字以上の大文字」「1文字以上の小文字」「1文字以上の記号」「1文字以上の数字」「パスワードを14文字以上」「パスワードの再利用禁止」「90日以内のパスワード有効期限」を有効にしてください。IAMユーザーのパスワードポリシーを強化することでパスワードを推測されにくくします

AWSアカウントのパスワードポリシー

1.12 rootアカウントのアクセスキー使わない

rootアカウントは強力な権限を持ちますのでrootアカウントのアクセスキーを使わないようにします。IAMユーザーを作成し、IAMユーザのアクセスキーを利用します。rootアカウントのアクセスキーがあれば削除してください。

root ユーザーのアクセスキーの削除

1.13 rootアカウントをMFAで保護する

AWSへのログインは多要素認証(MFA)を有効化しセキュリティを強化します。rootアカウントのMFAを有効化してください。

お使いの AWS アカウントのルートユーザーの仮想 MFA デバイスを有効にする (Console)

1.14 rootアカウントをハードウェアMFAで保護する

ハードウェアMFAは仮想MFAに比べ攻撃されるリスクが低く、最も強い権限を持つrootアカウントに適用することが推奨されています。 ただし、複数AWSアカウントを利用している場合はハードウェアMFAデバイスの管理が問題になる可能性があります。この場合は、高セキュリティが必要なアカウントに対しハードウェアMFAを導入し、残りのアカウントは仮想MFAを導入することを検討してください。

AWS アカウント root ユーザー用にハードウェア MFA デバイスを有効にする (コンソール)

1.15 秘密の質問が設定されていること

秘密の質問はAWSカスタマーサービスでの本人認証で利用されます。確認できないとAWSサポートへ問い合わせができなくなる可能性があります。例えば、MFAデバイス障害などでAWSコンソールへのログインが不能となった際の問い合わせ時に必要です。秘密の質問が最新になっているか確認してください。

秘密の質問の設定

1.16 IAMポリシーがグループまたはロールにのみ適用されていること

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

IAM ユーザーのアクセス権限の変更

1.17 AWS のコストと使用状況レポートの有効化

請求レポートを有効化することで、詳細なAWS利用状況(CSV)をS3に出力します。コストエクスプローラーを利用しグラフ化、予算に合わせたアラートを設定できます。AWS Cost and Usage report を有効化してください。

AWS Cost and Usage reportを作成する

1.18 IAMマスターロールとIAMマネージャーロール

IAMに関する操作権限は一般的なユーザーから分離し専用のIAMロールを利用します。

  • IAMマスターロールとはユーザー、グループ、およびロールを作成する権限を持ったロールです。
  • IAMマネージャーロールとはユーザーとロールをグループに割り当てる権限を持ったロールです。

IAMマスターロール、IAMマネージャーロールを作成し運用します。

CISで語られているIAMマスターロールとIAMマネージャーロールについて整理

1.19 連絡先の情報更新

連絡先は、セキュリティ上の問題やAWSポリシー違反などの通知に利用されます。連絡先の情報(メールアドレス、電話番号、住所など)が最新になっているか確認してください。

連絡先情報を編集するには

1.20 セキュリティに関する連絡先の登録

連絡先は、AWSからの連絡の中でもセキュリティに関する連絡先になります。セキュリティに関する連絡先を指定することで、組織内のセキュリティチームへ連絡できます。セキュリティに関する連絡先の情報が最新になっているか確認してください。

連絡先情報を編集するには

1.21 IAMインスタンスロールの利用

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

[アップデート] EC2コンソールで既存のEC2インスタンスに対してIAM Roleをアタッチ、変更ができるようになりました。  

1.22 特定のユーザーにAWSサポートへの問い合わせ権限が付与されていること

特定の許可されたユーザーのみがAWSサポートへ問い合わせできるようにします。 グループ、またはロールにIAMポリシー「AWSSupportAccess」をアタッチしてください。

IAM ポリシーの追加と削除

1.23 不要なアクセスキーの発行を避ける

利用していない認証情報は削除してください。

アクセスキーの管理 (コンソール)

1.24 制限なしのアクセス許可を指定したIAMポリシーを利用しない

IAMには最小権限を付与することで、必要なタスクのみ実行できるようになります。以下のページを参考にユーザーが利用するサービスを確認し、必要な権限のみを付与してください。

最小権限を付与する

補足情報 【Tips】Admin権限を持っていないIAMユーザでIAM Roleを設定するためのポリシー設定

2 ロギング

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

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

コンソールで証跡を作成する

2.2 CloudTrailログファイルの検証が有効化されていること

ログファイルの検証を有効化することで、デジタル署名が作成されます。ログファイルに改ざんが無かったかを確認することができます。ログファイルの検証を有効化してください。

CloudTrail のログファイルの整合性検証を有効にする

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

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

バケットのアクセス許可のチェックを使用したパブリックバケットの特定

2.4 CloudTrailログがCloudWatch Logsに配信設定されていること

CloudWatch LogsへCloudTrailログを配信することでリアルタイム分析、フィルタ、アラームが利用できます。CloudWatch Logsへの配信は、適切な監視、アラートを目的とします。CloudWatch Logsへの配信設定をしてください。

CloudWatch Logs にイベントを送信する

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

AWS Configを有効にすることでサポートされているリソースの構成管理ができ、セキュリティ分析、リソース変更の追跡、コンプライアンス監査が可能になります。 コンソールによる AWS Config の設定

2.6 CloudTrailログが格納されているS3バケットでログ記録を有効にする

S3バケットのアクセスログには、アクセス時間、操作対象のリソース、操作内容が記録され監査ログとして有効です。 S3バケットのアクセスログを有効化してください。

S3 バケットのサーバーアクセスのログ記録を有効にする方法

2.7 CloudTrailログをSSE-KMSで暗号化する

暗号化することで、機密性コントロールが追加できます。ログを参照するユーザーはS3バケットへの読み込み権限に加え、復号化権限(KMSの権限)が必要となります。AWS Key Management Service(KMS)を利用することで、S3上のCloudTrailログを暗号化(サーバーサイド暗号化)します 以下のページの手順でCloudTrailログを暗号化してください。

管理されたキーによる ログファイルの暗号化 (SSE-KMS)

2.8 KMSマスターキーをローテーションさせる

暗号化キーをローテーションすることで漏洩時の影響を限定できます。キーのローテーションを有効化しても、過去のキーは保存されている為複合化は透過的に行われます。そのためユーザーで運用作業は必要ありません。以下のページの手順でKMSマスターキーのローテーションを設定してください。

自動キーローテーションを有効または無効にする方法

3 モニタリング

3.1 許可されていないAPIコールに対するアラーム通知設定

許可されていないAPIコールを監視することで、アプリケーションエラー、悪意のあるアクティビティ検出を早めます。

CIS Amazon Web Services Foundationsの3.1を参照し設定してください

3.2 MFAなしでのAWSマネージメントコンソールログインに対して、アラーム通知設定されていること

MFAなしログインを監視することで、MFAなしログインの検出を早めます。

CIS Amazon Web Services Foundationsの3.2を参照し設定してください。

3.3 rootアカウントの利用に対するアラーム通知設定

rootアカウントのアクティビティを監視することで、強力な権限を持つユーザーを利用しないよう維持します。

CIS Amazon Web Services Foundationsの3.3を参照し設定してください。

3.4 IAMポリシーの変更に対するアラーム通知設定

IAMポリシーの変更を監視することで、認証と承認の制御を確実に維持します。

CIS Amazon Web Services Foundationsの3.4を参照し設定してください。

3.5 CloudTrail設定の変更に対するアラーム通知設定

CloudTrail設定の変更を監視することで、AWSアカウントで実行されるアクティビティの持続的な可視性を維持します。

CIS Amazon Web Services Foundationsの3.5を参照し設定してください

3.6 AWSマネージメントコンソールのログイン失敗に対するアラーム通知設定

ログイン失敗を監視することで、早期に不正なアタックを検知します

CIS Amazon Web Services Foundationsの3.6を参照し設定してください

3.7 KMSマスターキーの無効化またはスケジュール削除に対するアラーム通知設定

キーの無効化や削除に関して監視することで、誤ったキー削除を防ぎます。キーを誤って削除した場合データにアクセスアクセスできなくなります。

CIS Amazon Web Services Foundationsの3.7を参照し設定してください

3.8 S3バケットポリシー変更に対するアラーム通知設定

S3バケットポリシーはデータへのアクセス権限を設定する重要な項目です。変更を監視することで機密性の高い情報の保護を維持します。

CIS Amazon Web Services Foundationsの3.8を参照し設定してください

3.9 AWS Config変更に対するアラーム通知設定

AWS ConfigではAWSリソースの変更を記録し追跡できます。AWS Configへの意図しない設定変更がないか監視し、AWS Configでの変更管理が継続的行えるように維持します。

CIS Amazon Web Services Foundationsの3.9を参照し設定してください

3.10 セキュリティグループ変更に対するアラーム通知設定

セキュリティグループの変更を監視することで、リソースやサービスが誤って公開されないように維持します。

CIS Amazon Web Services Foundationsの3.10を参照し設定してください

3.11 ネットワークACL変更に対するアラーム通知設定

ネットワークACLの変更を監視することで、サービスが誤って公開されないように維持します。

CIS Amazon Web Services Foundationsの3.11を参照し設定してください

3.12 インターネットゲートウェイ変更に対するアラーム通知設定

インターネットゲートウェイはインターネットアクセスへの経路です。インターネットゲートウェイの変更を監視することで、サービスが誤って公開されないよう維持します。

CIS Amazon Web Services Foundationsの3.12を参照し設定してください

3.13 ルートテーブル変更に対するアラーム通知設定

ルートテーブルではインターネットや専用線などへの経路情報を定義します。ルートテーブルの変更を監視し、誤った経路情報が登録されないよう維持します。

CIS Amazon Web Services Foundationsの3.13を参照し設定してください

3.14 VPC変更に対してに対するアラーム通知設定

VPCでは1カウントに複数作成でき、VPCピアリングにてVPC間をルーティングできます。VPCの変更を監視し、意図した通信が発生しないか維持します。

CIS Amazon Web Services Foundationsの3.14を参照し設定してください

3.15 SNS TopicのSubscriberに適切な連絡先が設定されていること

以下の記事を参考にしてモニタリングで設定しているアラームの通知先が最新になっているか確認してください。

トピックへのサブスクライブ

クリーンアップ

4 ネットワーク

4.1 SSHの接続の制限

Security Groupにて、0.0.0.0/0からポート22番(SSH)への接続を許可しないようにします。SSHへのアクセス元を絞ることで、不特定多数からのアクセスを防ぎます。セキュリティグループの設定を変更し、アクセス元を絞るか、不要な場合は削除してください。

ルールを追加、削除、および更新する

4.2 RDP(リモートデスクトップ)の接続の制限

Security Groupにて、0.0.0.0/0から3389番(RDP)への接続を許可しないようにします。RDPへのアクセス元を絞ることで、不特定多数からのアクセスを防ぎます。セキュリティグループの設定を変更し、アクセス元を絞るか、不要な場合は削除してください。

ルールを追加、削除、および更新する

4.3 VPC Flow Logsの有効化

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

VPC Flow LogsでVPC内のIPトラフィックを監視することができるようになりました!

4.4 defaultセキュリティグループ

defaultセキュリティグループは、VPC作成時に自動で作成され、インスタンスを起動するときにセキュリティグループを指定しないと、そのインスタンスはデフォルトのセキュリティグループに自動的に関連付けられます。意図した設定を行うためdefaultセキュリティグループの利用を避けます。defaultセキュリティグループ以外のセキュリティグループを用意し、EC2へアタッチしてください。defaultセキュリティグループからアウトバウンド・インバウンドルールを削除し、インスタンスにアタッチしている場合はデタッチしてください。

セキュリティグループを操作する

4.5 VPCピアリング用のルーティングの追加

VPCピアリングを利用することで、VPC間で通信することができます。必要最低限のVPCピアリング用のルーティングが登録されているか確認してください。

VPC ピアリング接続のルートテーブルを更新する

全部チェックするのが大変すぎる

上記の52つのチェック項目を全部手動でチェックするのはあまりに大変だと思います。そこで自動でチェックしてくれるinsightwatch(インサイトウォッチ)という無料のプロダクトをご紹介します。insightwatchはCISからプロダクト認定を受けています。

URLは以下になります。「セキュリティチェックを始める」というボタンを押すとサインインの画面になります。

AWS環境のセキュリティ監査サービス インサイトウォッチ(insightwatch)by クラスメソッド

サインアップの手順やチェックするAWSアカウントの登録など手順は以下のページを参考になります。ぜひやってみてください。簡単なのですぐにできると思います。

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

私もやってみました

私も自習用に会社に用意してもらっているAWSアカウントで試してみました。

組織の情報やAWSアカウント連携を設定したら左のメニューから「チェック実行」をクリックします。そこで対象のプロジェクトを選択し、チェック実行ボタンを押しただけでチェックが始まります。

少し待つとステータスがレポート出力完了になりました。PDF列のリンクからレポートがダウンロードできました。

以下のようなレポートになっていました。画像は載せていませんがチェックの結果が項目ごとに出力されています。赤の重要とあるのが、対応した方がよいとされる項目です。結構厳しい結果ですね。

項目の合計が52ではなく94なのはCIS Amazon Web Service Foundations Benchmarkのチェック項目の他にIAMベストプラクティス(25項目)とAWSセキュリティチェックリスト(17項目)のチェックも行っているためです。チェック項目に興味のある方は以下をご覧ください。

チェック項目一覧(IAMベストプラクティス)

チェック項目一覧(AWSセキュリティチェックリスト)

最後に

AWSを運用していくうえで重要になるセキュリティのチェックの話でした。insightwatchを使って簡単にセキュリティチェックを行うことできますので定期的にチェックすることをお勧めします。弊社ではクラスメソッドメンバーズに加入いただいたお客様にモニタリングのチェック項目の通知設定が簡単に設定できるCloudFormationテンプレートの提供やチェックでNGだった箇所の解決のお手伝いをさせていただいています。

AWSの請求代行から構築まで支援「クラスメソッドメンバーズ」

insightwatchにはセキュリティのチェックの他にEC2のバックアップや起動停止などのジョブをスケジュール実行する機能もあります。こちらも無料になりますのでお試しください。現在は以下の4種類のジョブを実行できます。

  • EBSスナップショットの取得
  • EC2バックアップの取得
  • EC2インスタンスの起動・停止
  • EC2インスタンスタイプの変更

使い方は以下の記事が分かりやすいです。

EC2 の自動バックアップなら無料ツールの insightwatch におまかせください!

一緒に働きませんか!

最後に弊社ではinsightwatchを開発するメンバーを募集しています。興味のある方は以下の記事をご覧ください。

AWS事業本部プロダクトグループで一緒に働いてくれる方を募集しています!