Searching...
日本語
English
Español
简体中文
Français
Deutsch
日本語
Português
Italiano
한국어
Русский
Nederlands
العربية
Polski
हिन्दी
Tiếng Việt
Svenska
Ελληνικά
Türkçe
ไทย
Čeština
Română
Magyar
Українська
Bahasa Indonesia
Dansk
Suomi
Български
עברית
Norsk
Hrvatski
Català
Slovenčina
Lietuvių
Slovenščina
Српски
Eesti
Latviešu
فارسی
മലയാളം
தமிழ்
اردو
Building Secure and Reliable Systems

Building Secure and Reliable Systems

Best Practices for Designing, Implementing, and Maintaining Systems
by Heather Adkins 2020 555 pages
Technology
Engineering
Technical
聞く

つの重要なポイント

1. フレームワークはアプリケーション全体のセキュリティと信頼性を強化する

フレームワークはコードの再利用を可能にする:特定の機能や特徴に影響を与えるすべてのセキュリティと信頼性の側面を考慮するのではなく、開発者は特定のビルディングブロックをカスタマイズするだけでよい。

標準化された保護。 フレームワークは、複数のアプリケーションに共通するセキュリティと信頼性の懸念に対処する一貫したアプローチを提供する。認証、認可、エラーハンドリングなどの重要な機能を集中管理することで、一貫性のない実装から生じる脆弱性の可能性を減少させる。このアプローチにより、ドメインの専門家が安全なビルディングブロックを設計・開発し、フレームワークを使用するすべてのチームに利益をもたらす。

生産性の向上。 フレームワークを使用することで、開発者はセキュリティと信頼性の機能を再発明するのではなく、ビジネスロジックに集中できるため、生産性が向上する。フレームワークには、モニタリング、ロギング、パフォーマンス最適化のためのツールが組み込まれていることが多く、開発プロセスをさらに効率化する。この標準化により、コードのセキュリティと信頼性を一貫して適用することが容易になる。

2. コード設計のシンプルさがセキュリティと保守性を向上させる

YAGNIコードを避けることで信頼性が向上し、シンプルなコードはセキュリティバグが少なく、ミスの機会が減り、未使用のコードの保守に費やす開発者の時間が減る。

複雑さの削減。 シンプルなコードは理解しやすく、レビューしやすく、保守しやすい。YAGNI(You Aren't Gonna Need It)の原則に従い、過剰設計を避けることで、開発者はより堅牢で安全なシステムを作成できる。シンプルなコードは潜在的な故障点が少なく、隠れた脆弱性が含まれる可能性も低い。

保守性の向上。 定期的なリファクタリングと技術的負債の解消は、コードのシンプルさを維持するために重要である。この継続的なプロセスは、複雑で理解しにくいコードの蓄積を防ぎ、セキュリティと信頼性の問題を引き起こす可能性を減少させる。リンターやコードヘルスメトリクスなどのツールは、改善の余地がある領域を特定し、高いコード品質基準を維持するのに役立つ。

3. 強い型付けとサニタイズが一般的な脆弱性を防ぐ

強い型を使用することで、コンパイラが捕捉しないタイプのエラーからコードを保護する。

型の安全性。 強い型付けは、ランタイムではなくコンパイル時にエラーを捕捉し、多くの一般的な脆弱性を本番環境に到達する前に防ぐ。異なるコンテキストに対して特定の型(例:HTMLコンテンツ用のSafeHtml、URL用のSafeUrl)を使用することで、設計上のセキュリティ特性を強制する。このアプローチにより、SQLインジェクションやクロスサイトスクリプティング(XSS)などの脆弱性を導入することが非常に難しくなる。

入力の検証。 適切な入力サニタイズは、セキュリティ脆弱性を防ぐために重要である。ユーザー入力を処理するための専用ライブラリやフレームワークを使用することで、すべてのデータが敏感な操作に使用される前に適切に検証およびサニタイズされることを保証できる。これには以下が含まれる:

  • ユーザー生成コンテンツの特殊文字のエスケープ
  • URLやファイルパスの検証とサニタイズ
  • すべての入力に対する厳密な型チェックの強制

4. ユニットテストは個々のコンポーネントの動作を検証する

ユニットテストは通常、エンジニアリングワークフローの一環としてローカルで実行され、コードベースに変更を加える前に開発者に迅速なフィードバックを提供する。

細かい検証。 ユニットテストは、個々のソフトウェアコンポーネントの動作を単独で検証することに焦点を当てる。このアプローチにより、開発プロセスの早い段階でバグを発見し、統合前に各コンポーネントが正しく機能することを保証する。効果的なユニットテストの実践には以下が含まれる:

  • 実際のコードと並行して、または前にテストを書く(テスト駆動開発)
  • 通常のケースとエッジケースの両方をカバーする
  • 依存関係を分離するためにモックやスタブを使用する

継続的なフィードバック。 ユニットテストを開発ワークフローに統合することで、リグレッションや意図しない副作用を迅速に発見できる。この継続的なフィードバックループは、コード品質を維持し、新しいバグの導入を防ぐ。自動化されたCI/CDパイプラインは、コード変更ごとにユニットテストを実行し、開発者に即時のフィードバックを提供する。

5. 統合テストはシステム全体の相互作用を評価する

統合テストは、個々のユニットや抽象化を超えて、データベースやネットワークサービスなどの抽象化のフェイクやスタブを実際の実装に置き換える。

システムレベルの検証。 統合テストは、システムの異なるコンポーネントがどのように連携するかを評価し、単独でユニットをテストする際には明らかにならない問題を発見する。これらのテストは、データベースやAPIなどの外部依存関係との相互作用を含め、システム全体が正しく機能することを保証する。統合テストの重要な考慮事項には以下が含まれる:

  • 現実的なテスト環境の設定
  • テストデータの安全な管理
  • 非同期操作やタイミングの問題の処理

カバレッジと速度のバランス。 統合テストはシステムの動作に関する貴重な洞察を提供するが、通常、ユニットテストよりも遅く、リソースを多く消費する。チームは包括的な統合テストと迅速なフィードバックループの維持とのバランスを見つける必要がある。リスク評価に基づく選択的な統合テストなどの戦略は、開発速度を犠牲にせずにテストカバレッジを最適化するのに役立つ。

6. 動的解析ツールはランタイムエラーと脆弱性を検出する

動的プログラム解析は、テスト以外の目的でプログラムを実行してソフトウェアを解析する。

ランタイムエラーの検出。 サニタイザなどの動的解析ツールは、静的解析や通常のテストでは明らかにならないさまざまなランタイムエラーや脆弱性を検出できる。これらのツールは、コンパイル時にコードにランタイムチェックを追加し、以下の問題を検出する:

  • メモリリークやバッファオーバーフロー
  • 解放後の使用エラー
  • データ競合やデッドロック
  • 未定義の動作

パフォーマンスの考慮。 動的解析ツールは貴重な洞察を提供するが、パフォーマンスに大きな影響を与える可能性がある。チームはこれらのツールを夜間ビルドや専用のテストパイプラインの一部として実行し、徹底的な解析と開発速度のバランスを取る。動的解析から得られる洞察は、バグ修正の優先順位を決定し、全体的なコード品質を向上させるのに役立つ。

7. ファズテストはエッジケースと予期しない入力を発見する

ファズテストは、サービスの回復力をテストするのに役立つ。

自動入力生成。 ファズテストは、大量のランダムまたは半ランダムな入力を生成してバグや脆弱性を発見する。この手法は、手動テストでは見逃されがちなエッジケースや予期しない動作を発見するのに特に効果的である。ファズテストは以下を特定するのに役立つ:

  • メモリ破損の問題
  • 入力検証の欠陥
  • サービス拒否の脆弱性
  • ファイル形式やネットワークプロトコルの解析エラー

継続的なファズテスト。 ファズテストを継続的インテグレーションパイプラインに統合することで、チームはシステムの新しい脆弱性を常に探ることができる。コードベースが進化するにつれて、ファズテストは変更によって導入されたリグレッションや新しい問題を発見する。libFuzzerやAFL(American Fuzzy Lop)などのツールは、さまざまなタイプのソフトウェアに対してファズテストを実装するのを容易にする。

8. 継続的な検証がシステムの回復力を確保する

注意深く設計されたテストスイートは、同じタスクを実行する異なるソフトウェアの正確性を評価できる。

積極的な回復力。 継続的な検証は、従来のテストを超えて、さまざまな条件下でシステムを常に運用する。このアプローチは、システムが時間の経過とともに障害や攻撃に対して回復力を維持するのに役立つ。継続的な検証技術には以下が含まれる:

  • カオスエンジニアリングの実験
  • 定期的な災害復旧訓練
  • 自動化されたセキュリティスキャンとペネトレーションテスト
  • 現実的な負荷条件下でのパフォーマンスストレステスト

進化する脅威モデル。 システムが成長し進化するにつれて、新しい脆弱性や故障モードが出現する可能性がある。継続的な検証は、これらの課題に先んじるために、システムの回復力を定期的に再評価するのに役立つ。このプロセスには、脅威モデルの更新、テストシナリオの見直し、実際のインシデントやニアミスから得られた教訓の取り入れが含まれるべきである。

Last updated:

レビュー

3.9 out of 5
Average of 100+ ratings from Goodreads and Amazon.

本書『Building Secure and Reliable Systems』は、平均評価が5点中3.90と賛否両論の評価を受けている。読者は特に大規模な組織向けのセキュリティと信頼性の原則を包括的にカバーしている点を評価している。多くの人々がトレーニングや参考ガイドとして有用だと感じている。しかし、その構成や冗長さ、時折の不明瞭さについて批判もある。本書はセキュリティと信頼性の概念を統合している点で称賛されているが、Google中心であることも指摘されている。いくつかの章は理論的すぎる、または詳細すぎるとされる一方で、他の章は非常に実践的である。総じて、セキュリティ専門家やSREに推奨される一冊である。

著者について

ヘザー・アドキンスは、サイバーセキュリティおよび情報技術の分野で優れた専門家である。著者として、彼女は安全で信頼性の高いシステムに関する文献に大きく貢献しており、業界での豊富な経験を活かしている。アドキンスは、Googleでの業績で知られており、セキュリティ実践の開発と実施において重要な役割を果たしてきた。彼女の専門知識は、リスク管理、インシデント対応、セキュリティエンジニアリングなどの分野にまで及ぶ。アドキンスは、執筆を通じて、大規模な技術環境で得たベストプラクティスや洞察を共有し、他の組織がセキュリティと信頼性の向上を図る手助けをすることを目指している。

0:00
-0:00
1x
Create a free account to unlock:
Bookmarks – save your favorite books
History – revisit books later
Ratings – rate books & see your ratings
Listening – audio summariesListen to the first takeaway of every book for free, upgrade to Pro for unlimited listening.
Unlock unlimited listening
Your first week's on us
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 5: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Sep 26,
cancel anytime before.
What our users say
“...I can 10x the number of books I can read...”
“...exceptionally accurate, engaging, and beautifully presented...”
“...better than any amazon review when I'm making a book-buying decision...”
Compare Features
Free Pro
Read full text summaries
Listen to full summaries
Unlimited Bookmarks
Unlimited History
Benefits
Get Ahead in Your Career
People who read at least 7 business books per year earn 2.3 times more on average than those who only read one book per year.
Unlock Knowledge Faster (or Read any book in 10 hours minutes)
How would your life change if we gave you the superpower to read 10 books per month?
Access 12,000+ hours of audio
Access almost unlimited content—if you listen to 1 hour daily, it’ll take you 33 years to listen to all of it.
Priority 24/7 AI-powered and human support
If you have any questions or issues, our AI can resolve 90% of the issues, and we respond in 2 hours during office hours: Mon-Fri 9 AM - 9 PM PT.
New features and books every week
We are a fast-paced company and continuously add more books and features on a weekly basis.
Fun Fact
2.8x
Pro users consume 2.8x more books than free users.
Interesting Stats
Reduced Stress: Reading for just 6 minutes can reduce stress levels by 68%
Reading can boost emotional development and career prospects by 50% to 100%
Vocabulary Expansion: Reading for 20 minutes a day are exposed to about 1.8 million words per year
Improved Cognitive Function: Reading can help reduce mental decline in old age by up to 32%.
Better Sleep: 50% of people who read before bed report better sleep.
Can I switch plans later?
Yes, you can easily switch between plans.
Is it easy to cancel?
Yes, it's just a couple of clicks. Simply go to Manage Subscription in the upper-right menu.
Save 62%
Yearly
$119.88 $44.99/yr
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.