View on GitHub

Today I Learned

Software Engineering Blog

10. Security And Privacy

データエンジニアがセキュリティに関して考慮すべきこと、特に、人、プロセス、テクノロジについて。

10.1 People

セキュリティが人間のレベルで侵害されることが多いので、常に自分自身が標的となっていると思って行動すべき。

10.1.1 The Power of Negative Thinking

データ活用のシナリオを考え、実際に必要な場合のみ機密データを収集すべき。そもそも機密データを取り込まないことが、センシティブなデータを保護する最善の方法。

利用するデータパイプラインやストレージシステムについて、攻撃や漏洩のシナリオを考える。

10.1.1 Always Be Paranoid

認証情報を求められたら常に最新の注意を払う。

10.2 Processes

セキュリティチェックを習慣化しよう、最小権限の原則を守ろう、クラウドにおける責任共有モデルを理解しよう。

10.2.1 Security Theater Versus Security Habit

誰も読まない膨大なセキュリティポリシーや、年に1回のチェックボックスだけのセキュリティチェックはやめよう。

例えば、月に1回のセキュリティトレーニング、セキュリティポリシーの見直しを実施し、セキュリティのDNAを根付かせよう。

セキュリティはすべての人にとって最優先事項。

10.2.2 Active Security

アクティブセキュリティは、動的に変化するセキュリティの脅威について考え、成功した攻撃を研究し、組織のセキュリティ脆弱性を熟考することで、能動的なセキュリティ体制を取る。

10.2.3 The Principle of Least Privilege

最小権限の原則を守る。クラウドでは不要なIAMロールが与えられがち。

機密データに対しても列単位、行単位、セル単位のアクセス制御を行う。

10.2.4 Shared Responsibility in the Cloud

クラウドにおけるセキュリティは、クラウドベンダーとユーザの共同責任であり、クラウドベンダーはデータセンターとハードウェアのセキュリティを確保し、利用者はクラウド上に構築されるアプリケーションやシステムのセキュリティを担う。

10.2.5 Always Back Up Your Data

ハードウェア故障やミスオペレーション、悪意のある者の攻撃に備えて、データを定期的にバックアップする。

また、バックアップしたデータの復元テストを定期的に行う。

10.2.6 An Example Security Policy

セキュリティポリシーは、シンプルに、すぐ実践できる実用的なリストにするべき。

10.3 Technology

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

10.3.1 Patch and Update Systems

OSやソフトウェアには常にパッチを当て、新しいアップデートが利用可能になったらすぐにアップデートしよう。

10.3.2 Encryption

暗号化は、ネットワークトラフィックの傍受などの基本的な攻撃から守ってくれる。

データがストレージデバイス上にあるときは必ず暗号化する。

鍵の扱いには最新の注意を払う。

古いプロトコルのセキュリティの限界を知っておく。FTPは中間者攻撃に脆弱なので避けたほうが無難。

10.3.3 Logging, Monitoring, and Alerting

監視、ロギング、アラートを自動化し、システムで以上が発生したときに気付けるようにしておく。可能であれば自動異常検知を設定する。

監視すべき領域は、アクセス、リソース使用量、課金、余分なアクセス権限。

10.3.4 Network Access

ネットワークセキュリティは社内のセキュリティスペシャリストに任せるべきだが、データエンジニアは少なくともネットワークアクセスに関する適切なプラクティスに従っているかを確認する方法を知っておかなければならない。

10.3.5 Security for Low-Level Data Engineering

特定の技術の専門家は、その技術のセキュリティホールを特定するのに適した立場にある。

データエンジニア全員に、セキュリティに積極的に関与するよう奨励しよう。システムの潜在的なセキュリティリスクを特定したら、緩和策を検討し、その緩和策の実践に積極的な役割を果たすべきだ。