Amazon Macie を使って機密データを検出して SecurityHub と EventBridge と統合させて通知してみる
はじめに
皆さん、個人情報の取り扱い、どうされていますでしょうか。
個人情報漏洩に関する事件、被害事例は日々耳に入ってきているかと思います。
サービス提供する企業において、顧客の個人情報の漏洩は、顧客はもちろん、取引先からの信用の低下につながり、多大な損害賠償、慰謝料や補償金の支払いの請求などが発生する可能性は否めません。そのために、情報漏えいリスクを低減する対策は企業にとって非常に重要になってくると考えます。
リスクを考えると、他人事ではいられませんよね。
そこで Amazon Macie (以下 Macie) です。
Macie は Amazon S3 バケットとオブジェクトの使用状況の一元的な可視化と機械学習とパターンマッチングを使用して機密データを検出してくれるサービスです。
Macieのサービスページの言葉を引用すれば
組織で管理するデータが増大するにつれて、大規模な機密データを特定し保護することは、コストや時間のかかる、ますます複雑な作業となります。
Amazon Macie では、大規模な機密データの検出を自動化し、データ保護のコストを削減します。 Macie では、暗号化されていないバケット、パブリックアクセス可能なバケット、(中略) Amazon S3 バケットのインベントリが自動的に提供されます。
その後、選択したバケットに機械学習とパターンマッチング手法を適用し、個人識別情報 (PII) などの機密データを特定してアラートを発信します。
AWSにおいて、機密情報を何らかのかたちで保持せざるを得ない企業にとって、利用必須のサービスではないでしょうか。
そんなわけで Macie を使って、機密データの検出およびSecurityHubからのアラートを設定してみました。
料金について
とはいえ、利用するにあたって、気になるのは料金です。
詳細は料金 - Amazon Macie | AWS を参照頂きたいですが、概要をまとめると以下になります。
- セキュリティとアクセス制御について評価したバケットの数/月: 0.10USD (最初の 30 日間は無料)
- 機密データ検出のデータ処理量: GB あたり 1.25USD (毎月処理する最初の 1 GB は無料, ボリュームディスカウント有り)
- GET および LIST リクエストに対して標準の Amazon S3 料金
(1年以上前にかなり安くなりましたし) 個人的に料金は高くないかな、と思いますが、アカウントに大量のバケットおよびサポート対象のオブジェクトタイプで処理される大量のデータがある場合は要注意です。
何も考えずに全バケット、全データを分析対象にすると目玉が飛び出すかもしれません。
例えばですが、仮にアカウントに1,000GBのデータがあって、そのすべてを機密データ検出の対象とした場合、1,250USDが課金されます。
アカウントのバケット数や対象とするデータサイズには注意をして、不要な課金が生じる恐れがありそうならば、対象を限定する設定にしましょう。
利用するための条件について
機密データを分析するための条件について
次にどんな機密データを検出してくれるのでしょうか。
どんなデータでも自由に検出してくれるわけではありません。
Discovering sensitive data with Amazon Macie を確認しましょう。
次の条件が当てはまる場合、バケット内のデータを分析します。
- サポートされているファイルとストレージ形式
- S3オブジェクトが暗号化されている場合、オブジェクトの機密データを復号して検査するために必要なアクセス許可をMacieに付与していること
- バケットに制限付きバケットポリシーがある場合、Macieがバケット内のオブジェクトにアクセスすることをポリシーで許可していること。
- データはサポートされているストレージクラス(S3 Intelligent-Tiering、S3 One Zone-IA、S3 Standard、またはS3 Standard-IA)に保存されていること (つまり、S3 Glacierは対象外です)
AmazonRDS や AmazonAurora スナップショットを ApacheParquet 形式でAmazonS3にエクスポートしたり、AmazonDynamoDBテーブルをAmazonS3にエクスポートすることで、データを一時的または永続的にAmazonS3に移動して分析対象することもできます。
識別子について
マネージド識別子
機械学習やパターンマッチングなどの基準と手法を組み合わせて、指定したデータを分析できます。
機械学習やパターンマッチングなので、必ずしもすべてのアイテムが検出されるわけではありません。
どんな機密情報が検出できるのか、またどのような形式である必要があるのかは、Using managed data identifiers in Amazon Macie で要確認です。
例えば、名前ですが、フルネームのみを検出します。サポートはラテン文字セットに限定されています。
つまり、現状(2021/07/01)、漢字や平仮名は検出をすることができません。
カスタマーマネージド識別子
機密データを検出するために一致するテキストパターンを定義する正規表現(regex)を指定して識別子を作成できます。
単語やフレーズなどの特定の文字シーケンス、および近接ルールを指定して、データの分析を絞り込むこともできます。
詳細は、Building custom data identifiers in Amazon Macie をご参照下さい。
今回は、マネージド識別子を使って簡単な検出を実施します。
やってみる
S3バケットに以下イメージ(こちらで適当に作成した個人情報を記載したcsv)をアップロードします。
そして、(有効化をまだされていない方は) Macieを有効化します。
有効化すると、 S3 バケットとオブジェクトの使用状況が可視化されるのですが、本稿では機密データの検出から通知設定を主旨とするため、そちらは割愛します。
今回はワンタイムジョブで作成しますが、スケジュールされたジョブの設定も可能です。
また今回は使用しませんが、その他の設定から、分析する対象バケットの検出条件や除外設定ができます。
先述の通り、アカウントのバケット数や対象とするデータサイズには注意をして、不要な課金が生じる恐れがありそうならば、対象を限定する設定をしましょう。
先述のカスタマーマネージド識別子を選択する画面が表示されますが、今回は利用しないため次に進みます。
任意のジョブ名を付けて次に進み、確認して送信するとジョブが実行されます。
結果
結果の表示から検出結果を確認できます。
名前については、9つの検出から6つ、電話番号については、米国を2つの検出から2つの発生の位置データ表示しています。
(電話番号は日本の電話番号を対応していないため、米国の電話番号を2つ、ブラジルの電話番号を1つ検出している)
調査結果は次のような内容で提供できます。
- Microsoft Excelブック、CSVファイル、またはTSVファイルのセルまたはフィールドの列番号と行番号
- HTML、JSON、TXT、XMLファイルなどのCSVまたはTSVファイル以外の非バイナリテキストファイルの行の行番号
- Adobe Portable Document Format(PDF)ファイルのページのページ番号
- レコードインデックスと、ApacheAvroオブジェクトコンテナまたはApacheParquetファイルのレコード内のフィールドへのパス
詳細は、Locating sensitive data with Amazon Macie findings - Amazon Macie を参照下さい。
14行の個人情報を検出しましたが、機械学習とパターンマッチングがすべてのデータを検出してくれるわけではないのが分かるかと思います。(名前カラムで検出できていないアイテムもあります)
何にせよ、実際に利用する前に、S3に保存される予定の形式で、必ずテストしておく必要があるでしょう。
検出可能であることが確認できたら、調査結果の監視を設定しましょう。
Macie では EventBridge と SecurityHub とに統合することができます。
本稿では EventBridge および SecurityHubとの統合の両方で設定しますが、所有するAWS環境におけるセキュリティ状態を一元的に管理することができる SecurityHub の公開にまとめる方を推奨します。
SecurityHubとの統合
MacieとSecurityHubの統合を使用するには、前提として SecurityHubを有効にする必要があります。
SecurityHubを有効にする設定については、下記ブログを参照下さい。
入門 社内勉強会で AWS Security Hubの話をしました | DevelopersIO
Macie はデフォルトでは、新しいバケットポリシーの結果と更新されたバケットポリシーの結果のみをSecurityHubに公開します。
機密データの調査結果をSecurityHubに公開しないため、機密データの調査結果をSecurityHubに公開するようにMacieを設定する必要があります。
Macieは、抑制ルールによって自動的にアーカイブされないすべての機密データの結果に対して調査結果の処理が終了した直後に公開することができます。
抑制ルールとは、ある調査結果を確認し、ルールに当てはまる結果の通知を再度受けたくない場合に自動的にアーカイブ済みに設定することができます。
抑制ルールについては、詳細はSuppressing Amazon Macie findingsを参照ください。
調査結果の公開先の設定について
公開設定を調整するときは、MacieがSecurity Hubに公開する調査結果のカテゴリを選択します。 機密データの調査結果のみ、ポリシーの調査結果のみ、または機密データとポリシーの調査結果の両方です。また、検索結果のカテゴリをSecurityHubに公開しないように選択することもできます。
このイメージでは、機密データを公開しています。
なお、変更は現在のAWSリージョンにのみ適用されます。
ジョブを作成するアカウントでのみ、ジョブが生成した機密データの結果を公開できます。
SecurityHubに公開されたことで、以下イメージのように検出結果のリンクが表示されます。
調査結果の通知について
セキュリティイベントの検出通知について下記ブログも参照下さい。
セキュリティイベントを Security Hub から検出通知する | DevelopersIO
SecurityHub から EventBridge、 SNS からメール通知させています。
イベントフィルタリングについては、EventBridge のイベントパターンに下記のようなカスタムパターンを保存します。
(今回の例だと深刻度が"MEDIUM"だったため、"MEDIUM"を設定していますが、実際の運用において通知させる深刻度の高さについては検討して下さい)
{ "source": [ "aws.securityhub" ], "detail-type": [ "Security Hub Findings - Imported" ], "detail": { "findings": { "Severity": { "Label": [ "CRITICAL", "HIGH", "MEDIUM" ] }, "Workflow": { "Status": [ "NEW" ] }, "RecordState": [ "ACTIVE" ] } } }
Security Hub 検出結果のイベントフィルタリングについては以下などを参照して調整下さい。
- Security Hub 検出結果のフィルタリング例 | DevelopersIO
- Amazon Macie integration with AWS Security Hub - Amazon Macie
- AWS Security Finding Format (ASFF) - AWS Security Hub
EventBridgeとの統合
ついでなので、EventBridge とも統合しておきます。
(SecurityHub と統合した方は不要です。)
Amazon Macie integration with Amazon EventBridge - Amazon Macie を参考に設定するだけですが、下記のようなカスタムイベントパターンを作成定します。
(上記例ではLambdaですが、本稿では上記のように SNS から メール通知を想定しています)
EventBridge から通知させるのは、深刻度が中, 高のみとしています。
{ "source": ["aws.macie"], "detail-type": ["Macie Finding"], "detail": { "severity": { "score": [2, 3], "description": ["Medium", "High"] } } }
さいごに
AWS で今後さらに需要されてきそうなデータレイクを構成する上で、 Macie は重要なサービスになってくるのではないかと考えています。
機密情報を扱わざるを得ないサービスを AWS で提供する際に Macie および通知設定を検討してはいかがでしょうか。
以上です。
どこかのどなたかのお役に立てば幸いです。