流沙河鎮

情報技術系のこと書きます。

Fundamentals of data engineering 輪読会「Chapter 10.Security and Privacy」まとめ

datatech-jpで開催中のFundamentals of Data Engineering (English Edition)読書会に向けた、「Chapter 10. Security and Privacy」のまとめ。
以下は基本的には本文の要約であり、★マークがついている部分は私のコメントや付加情報である。

  • セキュリティとプライバシーの重要性を再確認し、日々のワークフローに取り入れることができる簡単なプラクティスを紹介
  • 人、プロセス、テクノロジーの観点から整理

security and privacy are critical to data engineering


Introduction

security is the first thing a data engineer needs to think about in every aspect of their job and every stage of the data engineering lifecycle

  • セキュリティはデータエンジニアリングの実践に不可欠だが、データ・エンジニアはセキュリティを後回しにしがち
  • データエンジニアは毎日、機密性の高いデータ、情報、アクセスを扱う
    • 財務情報、私的な通信(電子メール、テキスト、電話)のデータ、病歴、教育記録、職歴など、人々の私生活に関わるデータ
    • 組織、顧客、ビジネスパートナーは、これらの貴重な資産が細心の注意と配慮を持って取り扱われることを期待
      • 様々な規制
        • Family Educational Rights and Privacy Act (FERPA)
        • Health Insurance Portability and Accountability Act (HIPAA)
        • 罰則は時に重大/壊滅的な影響
        • 個人情報保護法
        • GDPR
      • たった一度のセキュリティ侵害やデータ漏えいで、あなたのビジネスは水の泡になりかねない
  • データエンジニアの役割と責任は組織の状況により異なる
    • 小規模な新興企業
      • データエンジニアがデータセキュリティエンジニアと兼務することもある
    • 大企業
      • 多くの場合、データエンジニアは、専任のセキュリティ担当者と協力する

People

The weakest link in security and privacy is you.

  • 常にデータエンジニア自身がターゲットになり得ることを意識する
The Power of Negative Thinking
  • 常に最悪のケースを想定する
  • ポジティブ思考が称賛される世界では、ネガティブ思考は嫌われるが、過度なポジティブ思考はロ攻撃や医療緊急事態の可能性を見えなくし、備えを妨げるという見方もある
  • ★『最悪の事故が起こるまで人は何をしていたのか』
Always Be Paranoid
  • botハッカーが機密情報やクレデンシャルを狙っている
  • オンラインでもオフラインでも、すべての行動で防御の姿勢をとるべき
    • プライバシーと倫理を尊重するための最初の防衛ラインはデータエンジニア
    • 自分の仕事が法的にも倫理的にも遵守されていることを確認する
      • 誰かに認証情報を要求されたら、常に注意を払う
      • 資格証明書の提示を求められたときは、常に細心の注意を払う
      • 同僚を含め、認証情報、機密データ、機密情報を要求されたら、額面通りには誰も信用しない
    • ensure that your approach delivers proper security and not just the illusion of safety.
      • ★リスクベースで実効性のある対策が重要ですよね
  • データ基盤で個人情報や機密データを保護する最善の方法は、そもそもそのようなデータを取り込まないこと
    • データエンジニアはデータのユースケースを深く検討し、下流で実際に必要な場合のみ機密データを収集するべき

Processes

正規のセキュリティ・プロセス(regular security processes)に従えば、セキュリティは仕事の一部になる。セキュリティを習慣化し、実効性のあるセキュリティ(real security)を定期的に実践し、最小権限の原則を行使し、クラウドにおける共有責任モデルを理解しよう

「劇場のセキュリティ」と「日常のセキュリティ」
  • 劇場のセキュリティ(security theater)
  • 日常のセキュリティ(security habit)
    • セキュリティ・マインドセットを企業文化に根付かせる
      • 全員に責任があり、役割がある
        • セキュリティは、あなた自身にとっても、一緒に働く他のすべての人にとっても、最優先事項でなければならない
      • データチームにとってセキュリティは後回しになってはならない
        • 例えば筆者の会社では、少なくとも月に1回はセキュリティ・トレーニングとポリシーの見直しを行い、これをチームのDNAに定着させ、改善できるセキュリティ慣行について互いにアップデートしている
Active Security
  • アクティブ・セキュリティは、ダイナミックに変化する世界におけるセキュリティの脅威について考え、研究すること
    • 単に予定されたフィッシング攻撃のシミュレーションを展開するのではなく、成功したフィッシング攻撃を研究し、組織のセキュリティの脆弱性を考え抜くことで、能動的なセキュリティ態勢を取る
    • 単に標準的なコンプライアンス・チェックリストを採用するのではなく、組織特有の内部的な脆弱性や、従業員が個人情報を漏えいしたり悪用したりする可能性のある誘因について考える
最小権限の原則
  • 最小権限の原則とは、人やシステムには、目の前のタスクを完了するために必要な権限とデータだけを与える考え方
  • クラウドでよく見られるアンチパターンとして、一般ユーザーにすべての管理者権限を与えてしまいがち
    • 誰かに無制限の管理者アクセス権を与えることは、大きな間違い
  • ユーザー(または所属するグループ)やマシンが仕事をするのに必要な権限とデータだけを、必要なときに必要な期間だけ与える
  • あなたのユーザーや顧客は、機密データが必要なときだけ参照されることを期待している
    • 機密データの列、行、セルレベルのアクセス制御を導入する
    • PIIやその他の機密データのマスキングを検討し、閲覧者がアクセスする必要のある情報のみを含むビューを作成
    • ★能動的なSensitive Data Detectionも併せてやるとより効果的か
  • データアクセスをガラス張りにする(behind a broken glass process)
    • 緊急時のみアクセスできるようにする
    • 問題の解決や重要な履歴情報の照会など、緊急の承認プロセスを経た後でなければ、ユーザーはデータにアクセスできないようにする
    • 作業が完了したら、アクセス権を即座に取り消す
Shared responsibility in the cloud
常にデータをバックアップする
  • データは様々な要因で消失する
    • ハードディスクやサーバーの故障
    • オペレーションミス
    • 悪意のある攻撃者によるデータのロック
      • 保険会社の中には、ランサムウェアによる被害に対する保険金を減額するところもある
  • ディザスタリカバリやビジネスコンティンジェンシー、ランサムウェアによる攻撃などに備えて
    • 常にデータを定期バックアップする
    • 定期的にバックアップしたデータの復元テストを行う
      • ★「一応取ってるけど復旧できるのかわからないバックアップ」、たまに見るなぁ... スキーマが変わっていて整合性が取れなかったり、特定のベンダ製品を使わないと復旧できなかったり、取り出すのに非現実的な時間がかかったり...etc
セキュリティ・ポリシー例

クレデンシャル、デバイス、および機密情報に関するベーシックなポリシーの見本

- クレデンシャルの保護
あらゆる手段でクレデンシャルを守ること。クレデンシャルに関する基本ルールを以下に示す
    - すべてにシングルサインオン(SSO)を使用すること。可能な限りパスワードを避け、デフォルトとしてSSOを使用する
    - SSOでは多要素認証を使用する
    - パスワードや認証情報を共有しない。これにはクライアントのパスワードや認証情報も含まれる。疑わしい場合は、報告先の担当者に確認すること。その担当者が疑わしい場合は、答えが見つかるまで調べ続けること
    - フィッシングや詐欺電話に注意する。パスワードは絶対に教えないこと(ここでもSSOを優先する)
    - 古いクレデンシャルは無効にするか削除すること。できれば後者
    - 認証情報をコードに書かないこと。シークレットはconfigとして扱い、決してバージョン管理システムにコミットしないこと。可能であればシークレットマネージャーを使うこと
    - 最小特権の原則を常に行使すること。仕事をするのに必要以上のアクセス権を与えてはならない。これは、クラウドとオンプレミスにおけるすべての認証情報と権限に適用される
- デバイスの保護
    - 従業員が使用するすべてのデバイスにデバイス管理を使用する。従業員が退職した場合やデバイスを紛失した場合は、リモートでデバイスを消去することができるようにする
    - すべてのデバイスに多要素認証を使用する
    - 会社の電子メール認証情報を使用してデバイスにサインインする
    - 認証情報と行動に関するすべてのポリシーがあなたのデバイスに適用される
    - 自分のデバイスを自分の延長として扱う。割り当てられたデバイスから目を離さない
    -  画面共有する場合は、機密情報やコミュニケーションを保護するために、何を共有しているかを正確に把握する。共有するのは1つの文書、ブラウザのタブ、ウィンドウだけにし、デスクトップ全体を共有するのは避ける。要点を伝えるために必要なものだけを共有する
    - ビデオ通話の際は通知を切る。これにより、通話中や録画中にメッセージが表示されるのを防ぐことができる
- ソフトウェア・アップデート・ポリシー 
    - アップデートのアラートが表示されたら、ウェブブラウザを再起動する
    - 会社および個人のデバイスで、OSのマイナーアップデートを実行する
    - 会社は、重要なメジャーOSアップデートを特定し、ガイダンスを提供する
    - OSのベータ版は使用しない
    - OSの新しいメジャーバージョンのリリースの利用は1~2週間待つ

Technology

人とプロセスによるセキュリティ対策が完了したら、次はテクノロジーを活用してシステムとデータ資産のセキュリティを確保する方法を検討する

パッチ適用とアップデート
  • ソフトウェアは古くなり、セキュリティの脆弱性は常に発見される
  • オペレーティング・システムやソフトウェアには常にパッチを当て、新しいアップデートが利用可能になったらアップデートする
    • 多くのSaaSクラウドマネージドサービスは、あなたが介入しなくても自動的にアップグレードやその他のメンテナンスを実行してくれる
  • 自分自身のコードや依存関係をアップデートするため、ビルドを自動化するか、リリースや脆弱性に関するアラートを設定して、アップデートを手動で実行するよう促されるようにする
暗号化
  • 暗号化は、セキュリティとプライバシーを尊重する組織の基本要件である。ネットワーク・トラフィックの傍受など、基本的な攻撃から守ってくれる
  • 暗号化は魔法の弾丸ではない。
    • 人為的なセキュリティ侵害が発生し、認証情報へのアクセスが許可された場合はあまり有効ではない
保管時の暗号化(Encryption at rest)
  • データが静止状態(ストレージ・デバイス上)にあるときは、暗号化されていることを確認する
  • 会社のノートパソコンは、デバイスが盗まれた場合にデータを保護するために、フルディスク暗号化を有効にしておく
  • サーバー、ファイルシステム、データベース、クラウド上のオブジェクトストレージに保存されているすべてのデータについて、サーバーサイドの暗号化を導入する
  • アーカイブ目的のデータバックアップもすべて暗号化する
  • 最後に、必要に応じてアプリケーション・レベルの暗号化を導入する
    • ★アプリレベルの暗号化が必要な場面ってどんな時なんだろう?
通信時の暗号化(Encryption over the wire)
  • 通信時の暗号化は、現在の通信プロトコルではデフォルトになりつつある
  • データエンジニアは、鍵の扱いについて常に注意を払うべき。鍵の扱いが悪いと、データ漏洩の重大な原因となる
  • 古いプロトコルのセキュリティ上の限界も認識しておく必要がある
    • 例えば、FTPは公衆ネットワーク上では単純に安全ではない
      • データがすでに公開されている場合でも、FTPは中間者攻撃に対して脆弱であり、攻撃者はダウンロードされたデータを傍受し、クライアントに到着する前にそれを変更できる可能性がある
  • レガシー・プロトコルを使わざるを得ない場合でも、すべてが暗号化されていることを確認して使うべき
    • 疑わしい場合は、暗号化を組み込んだ堅牢なテクノロジーを使用する
ロギング、モニタリング、アラート
  • 攻撃者は、通常、システムに侵入していることを公表しない
    • ほとんどの企業は、セキュリティ・インシデントについて、かなり後になってから知る
  • DataOpsの一部は、インシデントを観察、検出、警告すること
    • データ・エンジニアとして、自動化されたモニタリング、ロギング、アラートを設定し、システムで特異な事象が発生したときに気づくようにする必要がある
    • 可能であれば、自動異常検知を設定する

監視すべき領域の例

アクセス
  • 誰が、いつ、どこから、何にアクセスしているか?
  • どのような新しいアクセスが許可されたか?
  • 通常アクセスしない、またはアクセスすべきでないシステムにアクセスしようとするなど、アカウントが侵害されていることを示すような奇妙なパターンが現在のユーザにあるか?
  • 認識されていない新しいユーザがシステムにアクセスしていないか?
  • 定期的にアクセスログ、ユーザー、およびそのロールに目を通し、すべてが問題ないことを確認する
リソース
  • リソース ディスク、CPU、メモリ、I/Oを監視して、通常と異なるパターンがないか確認する
    • リソースが突然変化している場合、セキュリティ侵害の可能性がある
請求
  • SaaSクラウド管理サービスでは、コストを監視する必要がある
    • 予算アラートを設定して、支出が想定内であることを確認する
      • 請求額が予想外に急増した場合は、何者かが悪意のある目的でリソースを利用している可能性がある
過剰なパーミッション
  • ユーザーやサービス・アカウントが一定期間使用していないパーミッションを監視するツールが出てきている
    • 自動的に管理者に警告を発したり、指定された経過時間の後にパーミッションを削除するように設定することができる
  • 例えば、あるアナリストが6ヶ月間Redshiftにアクセスしていないとする。その権限を削除することで、潜在的セキュリティホールを塞ぐことができる。将来、そのアナリストがRedshiftにアクセスする必要があれば、権限を復元するためのチケットを発行すればよい

  • これらの横断的なビューを得るため、モニタリングでこれらの領域を組み合わせることが最善

    • データチームの全員がモニタリングを閲覧できるダッシュボードを作り、何か異常があればアラートを受け取れるようにしておく
    • セキュリティ侵害が発生した場合に対処するために、効果的なインシデント対応計画を策定し、定期的にその計画を実行する
ネットワーク・アクセス
  • データ・エンジニアがネットワーク・アクセスに関してかなり乱暴なことをしているのをよく見かける
    • 一般公開されているAmazon S3バケットに機密データが大量に格納
    • 0.0.0.0/0(すべてのIP)のインバウンドSSHアクセスを全世界に公開しているAmazon EC2インスタンス
    • パブリックインターネット上のすべてのインバウンドリクエストを許可するデータベース
    • これらは、ひどいネットワーク・セキュリティ慣行のほんの一例に過ぎない
  • 原則として、ネットワーク・セキュリティは会社のセキュリティ専門家に任せるべき
    • 実際には、小さな会社ではネットワーク・セキュリティに大きな責任を負う必要があるかもしれない
    • ★個人的にはこれは反対で、適切な統制を効かせる上でも、実効性のある利活用を推進する上でも、データエンジニアがネットワークについてもある程度理解して、専門のロールと対話できるようにしておくべきだと思う。「会社のセキュリティ専門家」が専門家であるとは限らないし、仮にそうであってもデータの専門家ではないだろうし、役職上のモチベーションの違い(セキュリティ専門家はデータ活用に責任を持たないのでとにかく安全に倒したい)もあると思うので
  • データ・エンジニアとして、データベース、オブジェクト・ストレージ、サーバーに遭遇する機会は非常に多いので、少なくとも、ネットワーク・アクセスの適切な慣行に沿っていることを確認するためにできる簡単な対策を知っておくべき
    • どのIPとポートが、誰に対して、なぜ開いているのかを理解する
    • これらのポートにアクセスするシステムやユーザーの受信IPアドレスを許可し(IPのホワイトリスト化)、いかなる理由であれ接続を広範に開くことを避ける
    • クラウドSaaSツールにアクセスする際は、暗号化された接続を使用する
    • 例えば、喫茶店から暗号化されていないウェブサイトを使わないこと
  • 本書ではワークロードをクラウドで実行することにほぼ焦点を絞ってきた
    • 第3章では、ハード化された境界とゼロトラスト・セキュリティの違いについて説明した
    • クラウドは一般的にゼロトラスト・セキュリティに近い
    • クラウドは、ゼロ・トラストを実践し、パブリック・クラウドの裏にいるセキュリティ・エンジニア軍団の力を借りることができるため、ほとんどの組織にとって、クラウドはより安全な選択肢であると筆者は考える
  • しかしながら、境界型セキュリティが有効な場面もある
    • Air-gapped serversは、強固なセキュリティ境界の究極の例である(Air-gappedとはネットワークに接続されていないこと)
    • 核ミサイルのサイロがネットワークに接続されていないことを知れば、少しは安心できるだろう
    • ただ、閉域であっても、人間のセキュリティ上の失敗に対しては脆弱であることを覚えておく必要がある
低レイヤにおけるデータエンジニアリングのセキュリティ

No link in the chain can be taken for granted.

  • データ・ストレージやデータ処理システムの中枢で働くエンジニアにとって、あらゆる要素のセキュリティへの影響を考慮することは極めて重要
  • どのようなソフトウェア・ライブラリ、ストレージ・システム、計算ノードも潜在的なセキュリティの脆弱性を抱え得る
  • 本書は、ライフサイクル全体を処理するためのツールをつなぎ合わせた、ハイレベルなデータエンジニアリングを主なテーマとしているため、技術的な詳細については他の文献を読むべし

  • テクノロジーに対してもアクティブ・セキュリティのアプローチを採用するべき

    • 具体的には、技術部門の従業員全員がセキュリティ問題について考えるべき
    • たとえあなたの会社にセキュリティ・リサーチャーがいたとしても、データ・エンジニアは、自分の担当する特定のデータ・システムやクラウド・サービスに精通することに意味がある
  • データエンジニア全員に、セキュリティに積極的に関与するよう促す
    • システムにおける潜在的なセキュリティリスクを特定したら、緩和策を検討し、その展開に積極的な役割を果たすべき

結論

  • セキュリティを心と行動の習慣にする必要がある
  • データを財布やスマートフォンと同じように扱う
  • 会社の直接的なセキュリティ担当者でなかったとしても、基本的なセキュリティ慣行を知り、セキュリティを常に念頭に置くことで、組織におけるデータ・セキュリティ侵害のリスクを減らすことができる

Additional Resources