このプラクティスでは、Kubernetesクラスターとアプリケーションのセキュリティを強化するための技術について学習します。
クラウドネイティブ環境において、セキュリティは設計の初期段階から組み込まれるべき重要な要素です。以下のような各レイヤーでセキュリティ対策を実装する必要があります。
- クラウド
- K8sクラスタ(コントロールプレーン、ノード)
- Pod
- イメージレジストリ
- Gitリポジトリ
クラウドに関しては一般的なクラウドセキュリティに準ずるため、本プラクティスではK8sやIaCに特化したセキュリティ対策に焦点を当てます。
自身のGitHubアカウントに作成したcloudnative-practiceリポジトリにIssueを作成します。issueを作成するスクリプトを用意しているためそれを使います。
-
まずはリポジトリのルートから以下コマンドで
scriptsディレクトリに移動cd scripts -
環境変数に値を設定
export GITHUB_TOKEN={あなたのGitHubのPAT} export GITHUB_REPO={あなたのGitHubアカウント名}/cloudnative-practice
-
スクリプト実行
python create_issues.py security
自身のGitHubアカウントのcloudnative-practiceリポジトリを開き、Issuesタブにセキュリティのラベルがついたissueが作成されていることを確認してください。
本プラクティスでは、多層防御(Defense in Depth)の考え方に基づき、各レイヤーでセキュリティを強化します。
- EKSクラスタエンドポイントのアクセス制御
- EKSアクセスエントリーによる認証・認可の管理
- EKSクラスタの監査ログ有効化
- Kubernetes NetworkPolicyによるネットワークセキュリティ
- EKSのSecurity Groups for Podsによるセキュリティ制御
- Kubernetes RBACによるアクセス制御
- ReadOnlyRootFilesystemによるセキュリティ強化
- 非rootユーザーでのPod実行によるセキュリティ強化
- allowPrivilegeEscalationによる特権昇格の防止
- 特権のはく奪(Capability Drop)によるセキュリティ強化
- Seccompプロファイルによるシステムコール制限
- SELinuxによるファイルアクセスの制限
- 信頼できるベースイメージの選定
- 信頼できる提供元のコンテナイメージの使用
- イメージスキャンによる脆弱性検査
- マルチステージビルドによるイメージサイズとセキュリティの最適化
- ECRレポジトリのアクセス制限とセキュリティ設定
- SOPSを使ったK8s Secretの暗号化
- Terraformにおける機密情報の管理
- ノードの暗号化
- ServiceMeshによるPod間通信の暗号化(mTLS)
- Falcoによるランタイムセキュリティ監視
- GuardDuty EKS Protectionの有効化とセキュリティ監視
- 静的解析ツールによるTerraformのセキュリティスキャン
- SBOMによるソフトウェア部品の可視化