アラート管理ができるPagerDutyとnOpsを統合させてみた

どうもさいちゃんです。この記事は、アライアンス統括部アドベントカレンダー2022の14日目の記事です。今回はアラートの管理ができるPagerDutyとnOpsを連携してセキュリティのルールに違反した変更を通知するための設定をしてみました。
2022.12.14

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

PagerDutyについて

PagerDutyはAWSや監視ソフトウェアなどの多くのツールにネイティブに対応しています。そういったツールから発せられる大量のアラートを分析し必要なアラートを必要なチームやメンバーにエスカレーションすることができます。

アラート管理(オンコール)の重要性

システム上の異常が発生した場合、監視ソフトウェアやAWSサービスが異常を検知します。そのあと必要になってくるのが、こういった異常検知に対する対応です。

  • インシデントに対して誰が対応するのか
  • インシデントの優先度はどの程度なのか
  • 対応者以外に通知しておくべき人は誰か(マーケティング担当、プロダクトマネージャー、経営陣など)
  • 担当者が不在/他の件について対応中だった場合の2次オンコール受付の準備
  • インシデント対応後の分析やレポートの共有

一口にインシデント対応といっても上記のように(ほんの一例ですが)考えなければならないことはたくさんあります。 こういった対応のフロー作成やエスカレーションの自動化することで、インシデント発生時の初期対応が素早くなりシステム復旧までを最小限の時間で行うことができるのです。

nOpsとの統合について

nOpsとPagerDutyを連携することで、セキュリティのベストプラクティスに関連するセキュリティ監査証跡をnOpsからPagerDutyに送ることができるようになります。 この証跡はnOpsRuleに基づいた違反項目が更新されるたびに生成されます。 
つまり、環境にセキュリティ上影響がある変更がされた際にPagerDutyを通して担当者に通知をエスカレーションすることが可能ということです。 ではさっそく統合してみます。

さっそく統合してみる

まずはPagerDuty側の操作からしていきます。 PagerDutyにログインします。 ログイン後上記タブのServiceからService Directoryを選択し、右上のNew Serviceをクリックします。

 

Name and Description

名前は任意のもので構いませんので今回は「nOps-Alerts」とします。説明の部分にもわかりやすく説明を入れておきましょう。

 

Nextで次に進みます。

Assign an Escalation Policy

新しいサービスを作成するためにはEscalation Policyが必要になります。 現時点でEscalation Policyは作成していないのでサービスの作成と同時に新しく作る設定にします。そのため、Generate a new Escalation Policyの方にチェックを入れておきます。

 

次へ進みます。

Reduce Noise

ここでは通知の間隔について設定することができます。 先にご説明した通りPagerDutyは必要な通知を洗い出し、より運用効率を上げるサービスになっています。 ここではアラートをグループ化することと、アラートの通知間隔を定めることで大量のアラートから運用管理者を開放するための設定です。 各項目について詳しく見ていきます。

 

  • Alert Grouping
    • Intelligent - コンテンツの類似性や過去の挙動などの機械学習ベースのアルゴリズムに基づきアラートのグループ化を行います。こちらが推奨されています。
    • Content-Based - コンテンツが指定したアラートフィールド(Class、Component、Summary、Source等)の内容にに完全に一致した場合にグループ化されます。
    • Time-Based - こちらを選択すると一定期間に発生したアラートを一つのグループにすることができます。時間ベースでのグループ化をする場合はこちらを選択しましょう。
    • Turn Off Alert Grouping - グループ化をオフにする場合はこちらを選択します。
  • Transient Alerts
    • アラートを一次停止するかどうかを決める項目。短時間で自動解決されるようなアラートを検出し、インシデント通知を一時的に停止することができる。

今回は最初なのでグルーピングは推奨のIntelligentに設定をしておきますが、アラートの一時停止に関しては設定せずにサービスを作ってみたいと思います。次へ進みます。

Integrations

最後にIntegrationの項目でnOpsとの連携に必要な情報を取得できるよう設定します。  

Integrationsの中からEvents API V2を選択しましょう。

 

サービスを作成されると画像のように統合に必要な情報が表示されます。今回必要なのはIntegration Keyだけなので、こちらをコピーして置きましょう。 

nOps

ここからはnOps側の操作に移ります。

 

nOpsにログインし画面右上のアカウント名の部分からOrganization Settingを選択します。

 

左側のバーからIntegration>PagerDutyと進むと先ほどコピーしたPagerDutyのIntegration Keyの入力を求められるので入力し、Integrationをクリックすれば統合完了です。

インシデントが発生した際の通知

統合することはできたので実際にインシデントが発生した際に、メールに通知が飛んでくる部分も見ていきたいと思います。

簡単にPagerDuty側でSampleのアラートを飛ばしてみます。Incidents>New IncidentからnOpsAlertsをターゲットにしたサンプルのインシデントを作成します。  
Service Directoryを確認すると先ほど作成したnOps-Alertsにアラートが出ていることが確認できます。 

メールが飛んできているのか確認すると、このようなメールが来ていました。

まとめ

今回はnOpsとPagerDutyの統合をしてみました。統合のステップとしてはかなり簡単だったので、セキュリティ違反を素早く検知したい、うまくエスカレーションしたい方はnOpsだけでなくPagerDutyの活用がオススメです。

PagerDutyにはアラートを集約し分析する機能や自動化アクションが追加できる機能など他にもたくさんの機能があるようです。サービスから受け取ったアラートをPagerDutyを通じて別のサービス統合と組み合わせることなどもできるようなのでそういった機能との組み合わせに関しても検証をしていき、次回以降でご紹介したいと考えています。