K's Tech Blog

海外を拠点としながら働くWEB系エンジニアの徒然ブログ

AWS TrustedAdvisor と CloudWatchの組み合わせはセキュリティチェックに便利だった

注)
この記事はAWSの個人用途ではあまり役に立ちません。
AWS TrustedAdvisorとCloudWatchの連携には、BusinessかEnterpriseのサポート契約が必要なためです。
aws.amazon.com

はじめに

S3バケットがパブリック設定になっていたり、セキュリティグループが0.0.0.0/0に対して全ポートがオープンだったりして、焦ったことはないでしょうか?
社内の開発用途でAWSを利用するシーンは増えていると思いますが、手作業で構築していたり、あまり知識がない人が触っていたりすると、このようなセキュリティホールを作ってしまいがちかと思います。
最低限のAWSセキュリティ教育を開発者にしないといけないでしょうが、それと同時に自動チェック機構も作らないといけません。エンジニアとしては。


そこで、色々考えてみました。

  • EC2に監視サーバーを組む
  • AWS ConfigとLamda連携
  • classmethod社の insight watchを導入
  • AWS Organizationのpolicy

など


どれも導入の手間がかかったり、実装が必要だったりします。
単純な監視をしたいだけなので、もっと簡単に出来ないかなと思って行き着いたのが、
AWS TrustedAdvisorとCloudWatchを利用したセキュリティチェックでした。理由は簡単無料だからです(無料枠内の利用に限る)。

TrustedAdvisor
TrustedAdvisor


本記事では、どうやってAWS TrustedAdvisorとCloudWatchを連携させるのか、AWS TrustedAdvisorでどんなセキュリティチェックができるのか、について記載します。


CloudWatchとTrustedAdvisorの連携方法について

いきなりすいませんが、連携方法については公式に記載してありますので、細かいところは割愛します。
docs.aws.amazon.com

  • メトリクスの選択方法

TrustedAdvisor > Category Metrics の中から選べます。

メトリクスの選択
メトリクスの選択

  • アラートの設定の仕方

SNSに連携して色々できますが、まずはメール送信で設定してみます。しきい値は1以上に設定しておけば、一つでもエラー項目が出ればアラームが飛びます。

alert
アラートの設定の仕方

設定はこれだけです。簡単ですね。これだけで、簡単なミスがチェックできるんだと思うと、使わない手はありません。
TrustedAdvisorは無料で利用できますし、CloudWatchも無料利用枠内で収まるレベルかと思います。
料金 - Amazon CloudWatch | AWS


AWS TrustedAdvisorのセキュリティチェック項目

AWS TrustedAdvisorのセキュリティチェックで何をチェックしてくれるのかを列挙します。この記事の執筆時点で17種類ありました。
記載項目は全て、TrustedAdvisorの画面から直接持ってきています。このリストがAWSコンソールを覗くまで見つからなかったので、まとめておきます。

TrustedAdvisorの利用自体は簡単で、以下のURLを開けば、自動でチェックが走ってくれます。
https://console.aws.amazon.com/trustedadvisor/home
TrustedAdvisorはセキュリティ以外にも、コスト最適化、パフォーマンス、フォールトトレランス、サービス制限についてもチェックしてくれますので、適宜使っていきましょう。
本記事ではセキュリティのみを記載しますが、他の項目も上記のようにCloudWatchと連携すれば、もっと便利なアラート設定もできますね。

  • セキュリティグループ- 無制限アクセス
    • リソースに無制限アクセスを許可しているルールがあるセキュリティグループをチェックします。無制限アクセスは悪意あるアクセス(ハッキング、サービス妨害攻撃、データ損失)の可能性を増加させます。
    • アラート基準 赤色: セキュリティグループルールで 25、80、あるいは 443 以外のポートに対しサフィックスとして/0が指定されたソースIPアドレスが設定されています。
    • 推奨アクション 必要とするIPアドレスだけにアクセスするように制限してください。特定のIPアドレスへのアクセスに制限するために、サフィックスを/32 に設定してください ( 例:192.0.2.10/32)。より制限のあるルールを作成した後に、過度に許可を与えているルールを削除するようにしてください。
  • ルートアカウントのMFA
    • このチェックではルートアカウントでMFAが有効にされていない場合にアラートを表示します。 セキュリティを向上するため、AWS Multi-Factor Authentication (MFA)を設定してAWSアカウントを保護することをお勧め致します。MFAはユーザがAWSコンソールや、関連ウェブサイトにアクセスする際に、ハードウェアMFAデバイスか仮想MFAデバイスで取得できるユニークな認証コードをユーザーに要求するため、セキュリティを向上させます。
    • 推奨アクション ルートアカウントにログインして、MFAを有効にしてください。MFA ステータスのチェック and MFA デバイスの設定をご参照下さい。
  • IAM アクセスキーローテーション
    • 過去 90 日間にローテーションされていないアクティブな IAM アクセスキーをチェックします。 定期的にアクセスキーをローテーションすると、知らない間にリソースにアクセスされる危険性を軽減することができます。 このチェックをするために、最後にローテーションされた日時はアクセスキーが作られた、あるいは最近アクティブ化された日時になります。 アクセスキー番号と日付けは、最新の IAM レポートの access_key_1_last_rotated と access_key_2_last_rotated の情報から作られます。認証情報レポートの更新頻度の制限により、このチェックの更新に最新の変更が反映されない場合があります。(詳しくは AWS アカウントの認証情報レポートの取得を参照してください。) ローテーションアクセスキーを作成するためには、適切なアクセス許可が必要です。詳しくは、ユーザーが自分のパスワード、アク セスキー、SSH キーを管理することを許可するを参照してください。
    • アラート基準 緑色: アクセスキーはアクティブでかつ過去 90 日間にローテーションされています。 黄色: アクセスキーはアクティブでかつ過去 2 年間にローテーションされていますが、90 日以内にはローテンションされていません。 赤色: アクセスキーはアクティブですが、過去 2 年間ローテンションされていません。
    • 推奨アクション 定期的にアクセスキーをローテーションします。 詳しくは アクセスキーのローテーション と IAM ユーザーのアクセスキーの管理を参照してください。
  • セキュリティグループ - 開かれたポート
    • 特定のポートに対して無制限アクセス(0.0.0.0/0)を許可しているセキュリティグループのルールをチェックします。無制限アクセスは悪意あるアクセス(ハッキング、サービス妨害攻撃、データ損失)の可能性を増加させます。最もリスクの高いポートは、赤色のフラグで示されます。リスクが低い場合は、黄色のフラグで示されます。一般的に、緑色のフラグで示されているポートは、HTTPやSMTPなど無制限アクセスを必要とするアプリケーションによって使用されています。 このように意図的にセキュリティグループを設定している場合、インフラストラクチャを保護するために追加のセキュリティ手段(iptablesなど)を使用することをお勧めします。
    • アラート基準 緑色:ポート80, 25, 443, 465へのアクセスは無制限です。赤色:ポート20, 21, 1433, 1434, 3306, 3389, 4333, 5432, 5500へのアクセスは無制限です。 黄色:それ以外のポートへのアクセスは無制限です。
    • 推奨アクション 必要とするIPアドレスだけにアクセス許可するように制限を行ってください。特定のIPアドレスだけのアクセスに制限するために、サフィックスを/32に設定してください ( 例:192.0.2.10/32)。より制限のあるルールを作成した後に、過度に許可を与えているルールを削除するようにしてください。
  • Amazon EBS パブリックスナップショット
    • Amazon Elastic Block Store (Amazon EBS) ボリュームスナップショットのアクセス権限の設定を確認し、パブリックとマークされているスナップショットがある場合は通知します。スナップショットをパブリックにする場合、そのスナップショットのすべてのデータへのアクセス権を、すべての AWS アカウントとユーザーに付与することになります。特定のユーザーまたはアカウントとスナップショットを共有する場合は、スナップショットをプライベートとしてマークしてから、スナップショットデータを共有するユーザーまたはアカウントを指定します。注意: このチェックの結果は、毎日数回、自動的に更新されます。更新リクエストは許可されません。変更が表示されるまでに数時間かかる場合があります。
    • アラート基準 : EBS ボリュームのスナップショットはパブリックとマークされています。
    • 推奨のアクション すべての AWS アカウントおよびユーザーとスナップショットのすべてのデータを共有することが確実でない限り、アクセス権限を変更してください。スナップショットをプライベートとマークしてから、アクセス権限を付与するアカウントを指定します。詳細については、「Amazon EBS スナップショットの共有」を参照してください。注意: 一時的で技術的な理由により、このチェックの項目を Trusted Advisor コンソールのビューから除外することはできません。
  • Amazon RDS セキュリティグループのアクセスリスク
    • Amazon Relational Database Service (Amazon RDS) のセキュリティグループの設定を検証し、セキュリティグループのルールがデータベースに対し過度なアクセス許可を与えている場合に注意してください。セキュリティグループルールは、特定の Amazon Elastic Compute Cloud (Amazon EC2) セキュリティグループや IP アドレス からのアクセスを許可する設定にすることを推奨します。現在 ap-northeast-2 (ソウル)リージョンにおけるAmazon RDS関連のデータがご利用いただけません。現在対応中となっておますのでしばらくお待ち下さい。
    • アラート基準 黄色:DB セキュリティグループは、 ポート番号 20、21、22、1433、1434、3306、3389、4333、5432、5500 に対するグローバルなアクセス許可されています。 黄色:1 個以上の IP アドレスからのアクセスを許可しています。 (CIDR プレフィックス長が /0 もしくは /32 ではない) :DB セキュリティグループルールはグローバルアクセスを許可しています。(CIDR プレフィックス長が /0)
    • 推奨アクション セキュリティグループルールを確認し、IP アドレスや IP レンジの権限を制限して下さい。RDS セキュリティグループルールを編集するには、AuthorizeDBSecurityGroupIngress API または AWS マネジメントコンソールをご利用ください。詳細については次を参照してください。DB セキュリティグループを操作する。
  • Amazon RDS パブリックスナップショット
    • Amazon Relational Database Service (Amazon RDS) DB スナップショットのアクセス権限の設定を確認し、パブリックとマークされているスナップショットがある場合は通知します。スナップショットをパブリックにする場合、そのスナップショットのすべてのデータへのアクセス権を、すべての AWS アカウントとユーザーに付与することになります。特定のユーザーまたはアカウントとスナップショットを共有する場合は、スナップショットをプライベートとしてマークしてから、スナップショットデータを共有するユーザーまたはアカウントを指定します。注意: このチェックの結果は、毎日数回、自動的に更新されます。更新リクエストは許可されません。変更が表示されるまでに数時間かかる場合があります。
    • アラート基準 : RDS スナップショットはパブリックとマークされています。
    • 推奨のアクション すべての AWS アカウントおよびユーザーとスナップショットのすべてのデータを共有することが確実でない限り、アクセス権限を変更してください。スナップショットをプライベートとマークしてから、アクセス権限を付与するアカウントを指定します。詳細については、「DB スナップショットまたは DB クラスタースナップショットの共有」を参照してください。注意: 一時的で技術的な理由により、このチェックの項目を Trusted Advisor コンソールのビューから除外することはできません。
  • Amazon Route 53 MX リソースレコードセットと Sender Policy Framework
    • それぞれの MX リソースレコードセットについて、対応する SPF 設定を含む TXT リソースレコードセットをチェックします。 SPF (Sender Policy Framework) 設定には、お客様のドメインから Eメールを送信する権限を与えられたサーバを記述します。この設定により、 Eメールアドレスのスプーフィング(詐称)を検知、停止することでスパムメールを減らすことができます。(試験的な SPF を使用した リソースレコードセットは推奨されません)
    • アラートの基準 黄色: MX リソースレコードセットにおいて、対応する SPF 設定を含む TXT リソースレコードセットが登録されていません。
    • 推奨アクション それぞれの MX リソースレコードセットについて、 SPF 設定を含む TXT リソースレコードセットを登録します。 SPF (Sender Policy Framework) の詳細は次をご参照ください。 SPF Record Syntax, Creating Resource Record Sets By Using the Amazon Route 53 Console.
  • Amazon S3バケット許可
    • Amazon Simple Storage Service (Amazon S3) にオープンアクセス許可を持つか、認証済みの AWS ユーザーにアクセス権を付与するバケットがないかチェックします。「リスト」アクセスを許可するようにバケットのアクセス許可が設定されていると、予想より多くの料金が発生することがあります。具体的には、意図しないユーザーがバケット内のオブジェクトのリストを取得する頻度が高い場合です。「アップロード/削除」アクセスを許可するようにバケットのアクセス許可が設定されていると、ユーザーはバケット内の項目を追加、変更、または削除できるため、セキュリティ脆弱性が生じます。
    • アラート条件 黄色: バケット ACL では、「全員」または「任意の認証済みの AWS ユーザー」に対して「リスト」アクセスが許可されます。 黄色: バケットポリシーでは、任意の種類のオープンアクセスが許可されます。黄色: バケットポリシーに、パブリックアクセスを許可するステートメントがあります。「パブリックポリシーを持つバケットへのパブリックアクセスおよびクロスアカウントアクセスを拒否する」設定がオンになっているため、パブリックステートメントが削除されるまでは、当該アカウントの認証済みユーザーに限りアクセスが許可されます。 黄色: Trusted Advisor にポリシーを確認するアクセス許可がないか、その他の理由でポリシーを評価できませんでした。: バケット ACL では、「全員」または「任意の認証済みの AWS ユーザー」に対して「アップロード/削除」アクセスが許可されます。
    • 推奨アクション バケットでオープンアクセスを許可する場合、オープンアクセスが本当に必要かどうか判断してください。必要ない場合は、バケットのアクセス許可を更新して、所有者または特定のユーザーのみにアクセスを制限します。Amazon S3 のパブリックアクセスのブロックを使用して、データへのパブリックアクセスを許可する設定を制御します。「バケットとオブジェクトのアクセス許可の設定」を参照してください。
  • AWS CloudTrail ロギング
    • AWS Cloud Trail のご利用状況をチェックします。Cloud Trail ではアカウントで実行された AWS APIコ ールについてのログ情報を記録することにより、アクティビティの可視性を高めます。Cloud Trail は、例えば、特定のユーザーが特定の時間内にどのようなアクションを実行したか、どのユーザーが特定の時間内に特定のリソースを用いてアクションを実行したかを調べることができます。Cloud Trail はログファイルを Amazon S3 にアップロードしますので、対象のバケットに対しての書き込み許可が設定されている必要があります。証跡がすべてのリージョンに対応している場合は (新規証跡作成時でのデフォルト)、証跡は Trusted Advisor のレポートに複数回表示されます。
    • アラート基準 黄色: CloudTrailは、特定の証跡に対するログの取得に失敗しました。 赤色: 証跡は特定のリージョンで有効にされていない、またはロギングが証跡に対して無効になっています。
    • 推奨アクション CloudTrail のAPI呼出し履歴のログを開始するには、AWS CloudTrail コンソールへログインします。 ロギングを有効化する手順は、Stopping and Starting Logging for a Trailを確認してください。 ログ取得時にエラーが発生した場合には、ログ保管先のバケットが存在しているか、CloudTrailの書き込みに必要な権限がバケットに設定されているかを確認してください。バケットに対する権限設定の手順は Amazon S3 Bucket Policyを参照してください。
  • ELB セキュリティグループ
    • ロードバランサーに設定されているセキュリティグループがあるか、またはそのセキュリティグループがロードバランサーに設定されていないポートへのアクセスを許可していないかを確認します。ロードバランサーに関連付けられているセキュリティグループが削除されると、ロードバランサーは正常に動作しません。セキュリティグループが、ロードバランサーに設定されていないポートへのアクセスを許可していると、データを失ったり不正な攻撃を受けたりするリスクが増大します。
    • アラートの基準 黄色の場合、ロードバランサーに関連付けられている Amazon VPC セキュリティグループのインバウンドルールで、ロードバランサーのリスナー設定で定義されていないポートへのアクセスが許可されています。 の場合、ロードバランサーに関連付けられているセキュリティグループが存在しません。
    • 推奨のアクション セキュリティグループルールを設定して、ロードバランサーのリスナー設定で定義されているポートとプロトコルに加えて、パス MTU 検出をサポートする ICMP プロトコルのみにアクセスを制限します。「Classic Load Balancer のリスナー」および「VPC でのロードバランサーのセキュリティグループ」を参照してください。セキュリティグループがない場合は、ロードバランサーに新しいセキュリティグループを適用してください。ロードバランサーのリスナー設定で定義されているポートとプロトコルのみにアクセスを制限するセキュリティグループのルールを作成してください。「VPC でのロードバランサーのセキュリティグループ」を参照してください。
  • IAM の使用
    • この機能は、AWS Identity and Access Management (IAM)が使用されているかについてチェックします。IAMにより、AWSでのユーザー、グループ、ロールを作成することができます。 またパーミッションによって、AWSリソースへのアクセスをコントロールする事も可能です。
    • アラート基準 黄色:このアカウントでは IAM ユーザーが作成されていません。
    • 推奨アクション お客様のアカウントで1つ以上のIAMユーザーやグループを作成して下さい。 その後、AWS環境で特定のタスクを行う為に、限定されたパーミッションを与えたユーザーを追加します。より詳細な情報については、 使用開始をご参照ください。
  • IAM パスワードポリシー
    • お客様のアカウントのパスワードポリシーをチェックし、パスワードポリシーや、パスワード構成条件が有効化されていない場合に警告します。パスワード構成条件は、お客様に強度の高いパスワードを作成することを強制することにより、AWSの環境のセキュリティを全般的に向上させます。お客様がパスワードポリシーを作成、または変更した場合、そのポリシーは新規ユーザに対しては直ちに適用されますが、既存ユーザに対しパスワード変更を要求しません。
    • アラート基準 黄色:パスワードポリシーは有効化されていますが、少なくとも1つのパスワード構成条件が有効化されていません。 赤色: 有効化されているパスワードポリシーがありません。
    • 推奨アクション もし有効化されていないパスワード構成条件がある場合は、有効化を検討ください。有効化されているパスワードポリシーが無い場合は、パスワードポリシーを作成し設定してください。詳細はこちらを参照ください。IAM パスワードポリシーの管理。
  • IAM 証明書ストアの CloudFront 独自 SSL 証明書
    • IAM 証明書ストアで CloudFront 代替ドメイン名の SSL 証明書を確認し、証明書の期限切れ、期限切れ間近、古くなった暗号化方式の使用、ディストリビューションに対する不正な設定について警告します。代替ドメイン名の独自証明書の期限が切れると、CloudFront コンテンツを表示するブラウザにウェブサイトのセキュリティについての警告メッセージが表示されます。SHA-1 ハッシュアルゴリズムによって暗号化された証明書は、ChromeFirefox などのウェブブラウザでは廃止されつつあります。オリジンドメイン名とビューアリクエストの Host ヘッダーのドメイン名のいずれかに一致するドメイン名が証明書に含まれていない場合、CloudFront はユーザーに HTTP ステータスコード 502(不正なゲートウェイ)を返します。詳しくは、代替ドメイン名と HTTPS の使用を参照してください。
    • アラート基準 赤色: 独自 SSL 証明書の期限が切れている。 黄色: 独自 SSL 証明書の期限が今後 7 日以内に切れる。 黄色: 独自 SSL 証明書が SHA-1 ハッシュアルゴリズムによって暗号化されている。 黄色: ディストリビューションの代替ドメイン名の 1 つ以上が、独自 SSL 証明書の Common Name フィールドまたは Subject Alternative Names フィールドのどちらにも存在しない。
    • 推奨されるアクション 期限切れ証明書または期限切れ間近の証明書を更新してください。 SHA-1 ハッシュアルゴリズムによって暗号化された証明書を、SHA-256 ハッシュアルゴリズムによって暗号化された証明書に置き替えてください。証明書を、該当する値が Common Name フィールドまたは Subject Alternative Domain Names フィールドに含まれている証明書に置き換えてください。
  • オリジンサーバーの CloudFront SSL 証明書
    • SSL 証明書の期限切れ、期限切れ間近、証明書が見つからない、古くなった暗号化方式の使用についてオリジンサーバーを確認します。証明書が期限切れの場合、CloudFront はリクエストに対して HTTP ステータスコード 502(不正なゲートウェイ)を返します。SHA-1 ハッシュアルゴリズムによって暗号化された証明書は、ChromeFirefox などのウェブブラウザでは廃止されつつあります。CloudFront ディストリビューションと関連づけた SSL 証明書の数によっては、このチェックのために、お使いのウェブホスティングプロバイダから毎月数セントの請求が発生する場合があります。例えば、CloudFront ディストリビューションのオリジンとして EC2 または ELB をお使いの場合、AWS からの請求が発生する場合があります。この確認は、オリジン証明書チェーンあるいは認証機関は検証しません。これらは、 CloudFront の設定で確認できます。
    • アラート条件 赤色: オリジンの SSL 証明書の期限が切れている、または証明書が見つからない。 黄色: オリジンの SSL 証明書の期限が今後 7 日以内に切れる。 黄色: オリジンの SSL 証明書が SHA-1 ハッシュアルゴリズムによって暗号化されている。 黄色: オリジンの SSL 証明書が配置できない。接続タイムアウトで失敗した、CNAME とホストネームが整合しない、あるいは他の HTTP 接続の問題が考えらる。
    • 推奨されるアクション オリジンの証明書の期限が切れている、または期限切れが近い場合、更新してください。証明書が存在しない場合、証明書を追加してください。 SHA-1 ハッシュアルゴリズムによって暗号化された証明書を、SHA-256 ハッシュアルゴリズムによって暗号化された証明書に置き替えてください。
  • 公開されたアクセスキー
    • 一般に公開されてしまっているアクセスキーと、アクセスキー漏洩を原因とする可能性がある Amazon Elastic Compute Cloud (Amazon EC2) の不規則な使用状態についてのよくあるコードリポジトリをチェックします。アクセスキーは、アクセスキー ID とそれに対するシークレットアクセスキーによって構成されています。公開されたアクセスキーは、お客様のアカウントとその他のユーザーのセキュリティに リスクを発生させ、不正なアクティビティや乱用のために高額請求が発生する可能性があり、AWS カスタマーアグリーメントにも抵触します。アクセスキーが公開されてしまった場合、アカウントを保護するため、すぐにアクションを起 こしてください。さらに、アカウントへの高額請求を防止するため、AWS では一部の AWS リソース作成機能の利用を一時的に制限します。請求が発生する可能性のある不正利用を部分的に制限するための処置ですので、お客様のアカウントの安全性が向上することにはなりません。注:このチェックは、漏洩されたアクセスキーあるいは侵害された EC2 インスタンスの識別を保障しません。アクセスキーとAWS リソースの安全対策と安全性については最終的にはお客様の責任となります。アクセスキーに期限が関連付けられている場合、期限までに不正利用がなくならないのであれば、AWS でお客様の AWS アカウントを一時停止する場合があります。何らかの手違いで警告を受け取ったと考えられる場合は、AWS サポートにお問い合わせください。Trusted Advisor に表示された情報に、お客様のアカウントの最新情報が反映されていない場合があります。そのアカウントの公開されたアクセスキーすべてが解決されるまで、公開されたアクセスキーが解決済みとしてマークされることはありません。このデータ同期には最大 1 週間かかります。
    • アラート条件 赤色: 漏洩 – アクセスキー ID とそれに対応するシークレットアクセスキーがインターネットに公開され、漏洩しました(使用されました)。 赤色: 漏洩 – アクセスキー ID とそれに対応するシークレットアクセスキーがインターネットに公開されています。 赤色: 疑い – Amazon EC2 の使用状態からはアクセスキーの漏洩が疑われますが、インターネットでは特定されていません。
    • 推奨アクション 影響を受けているアクセスキーをできる限り速やかに削除してください。そのキーが IAM ユーザーに関連付けられている場合、IAM ユーザーのアクセスキーの管理 を参照してください。

以上