[アップデート]Amazon CloudWatch Logsでログデータに含まれた機密情報を保護出来るようになりました #reinvent

ログデータに機密情報が漏れてもこれですぐに検知出来ますね
2022.11.28

こんにちは、AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。

遂にAWS re:Invent 2022が始まりましたね。それに合わせてたくさんのアップデートが出てきました。

本記事ではそのうちの一つ、「Amazon CloudWatch Logsでの転送中の機密データ保護」についてまとめます。

ざっくりまとめ

  • Amazon CloudWatch Logsで転送中の機密情報が含まれたログデータを保護(マスク)することが出来るようになった
  • HIPAAやGDPR、PCI-DSS、FedRAMPに則った保護が可能
  • 監査結果をAmazon CloudWatch Logs、Amazon Kinesis Data Firehose、Amazon S3に送ることも可能
  • logs:Unmask権限を持つユーザーであればマスクを外した状態でログデータを確認することも可能
  • 住所や運転免許証番号などは記事執筆時点(2022/11/28)で日本語未対応

アップデート内容

Amazon CloudWatch Logsで転送中のログデータに含まれる機密情報を保護(マスク)する機能が追加されました。

この機能は任意のロググループを作成後、追加の操作を行うことで有効化することが可能です。有効化の操作はマネジメントコンソールからだけでなくAWS CLIでも行うことが出来ます。

この機能の公式ドキュメントは下記です。記事執筆時点では英語版のみです。

どんなデータタイプを保護出来るのか

保護が可能なデータタイプは下記ページにまとめられています。

上記ページに記載されているデータタイプは下表のとおりです。

データ 分類
Address Personal
AwsSecretKey Credentials
CreditCardExpiration Financial
CreditCardNumber Financial
CreditCardSecurityCode Financial
EmailAddress Personal
IpAddress Personal
LatLong Personal
Name Personal
OpenSshPrivateKey Credentials
PgpPrivateKey Credentials
PkcsPrivateKey Credentials
PuttyPrivateKey Credentials
VehicleIdentificationNumber Personal

また、国別で対応しているデータもあります。

データ 分類 対応国名コード
BankAccountNumber Financial DE, ES, FR, GB, IT
CepCode Personal BR
Cnpj Personal BR
CpfCode Personal BR
DriversLicense Personal AT, AU, BE, BG, CA, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HR, HU, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, US
DrugEnforcementAgencyNumber Health US
ElectoralRollNumber Personal GB
HealthInsuranceCardNumber Health EU
HealthInsuranceClaimNumber Health US
HealthInsuranceNumber Health FR
HealthcareProcedureCode Health US
IndividualTaxIdentificationNumber Personal US
InseeCode Personal FR
MedicareBeneficiaryNumber Health US
NationalDrugCode Health US
NationalIdentificationNumber Personal DE, ES, IT
NationalInsuranceNumber Personal GB
NationalProviderId Health US
NhsNumber Health GB
NieNumber Personal ES
NifNumber Personal ES
PassportNumber Personal CA, DE, ES, FR, GB, IT, US
PermanentResidenceNumber Personal CA
PersonalHealthNumber Health CA
PhoneNumber Personal BR, DE, ES, FR, GB, IT, US
PostalCode Personal CA
RgNumber Personal BR
SocialInsuranceNumber Personal CA
Ssn Personal ES, US
TaxId Personal DE, ES, FR, GB
ZipCode Personal US

やってみた

今回はマネジメントコンソールから有効化してみました。

この機能はロググループ作成時には設定出来ず、作成されたロググループに有効化する仕様になっています。そのため、今回は適当なロググループを作成します。

ロググループ作成後、ロググループ一覧からアクション -> Create data protection policyを選択します。

すると、このようなData protection機能の設定画面に遷移します。

設定可能な項目は主に保護対象のデータタイプ。また、監査結果をどこかに保存したい場合、Amazon CloudWatch Logs、Amazon Kinesis Data Firehose、Amazon S3のいずれかに送信することが可能です。

今回は監査結果は保存せず、保護対象のデータとしてAddress、AWSSecretKey、IPAddressを選んでみました。

それでは手動でログストリームを作成し、ログイベントを流してみます。まずはIPAddressから。

ちゃんとマスクされて表示されていますね。(0.0.0.0を流す前に「test start」というログを流しています。)

その後、Addressに引っ掛けるために以下の値を送ってみました。

  1. 〒812-0011 福岡県福岡市博多区博多駅前2丁目20−1 大博多ビル 11F(クラスメソッド福岡オフィスの住所です。)
  2. 1600 Pennsylvania Avenue NW, Washington, D.C. 20500 U.S.A.(ホワイトハウスの住所らしいです。)

結果はこんな感じ。どうやら日本語には対応してないようです。

最後にAWSSecretKeyを試したのですが、マスクされませんでした。。マスク出来た方は教えてください。

また、機密情報が含まれていると検知されたログの件数はロググループのData protectionタブで確認することが出来ます。

追記: ロググループ一覧にアラートも出てました。

マスクを外した状態で保護されたログデータを見てみた

マスクされたログデータの中身を見る手段も用意されています。

logs:Unmask という権限を持つユーザーで操作を行うことでマスクされていない状態でログデータを見ることが可能です。

マネジメントコンソール上であれば、Display -> Temporally unmask protected dataを選択することでマスクを外してログデータを見ることが出来ます。

また、再度マスクすることも可能です。

公式ドキュメントは下記

まとめ

今回のアップデート、結構望まれていたものだったのではないでしょうか。うっかりログに機密データを流してしまった場合にすぐ気付ける良い機能ですね。

ただし、多くのデータタイプで日本語未対応のため、まだ使用場面はかなり限られそうですが。。。

本記事がどなたかのお役に立てれば幸いです。

以上、べこみんでした。