ソフトウェアサプライチェーンセキュリティは、開発、デリバリー、使用の過程で、ソフトウェアとそのコンポーネントを悪意のあるコード、脆弱性、その他のリスクから保護します。このトピックでは、Container Service for Kubernetes (ACK) クラスターにおけるビルド、デプロイ、ランタイムの各段階におけるコンテナイメージ、レジストリ、ワークロードに関するセキュリティ推奨事項を説明します。
段階別の攻撃対象領域
| 段階 | 攻撃の種類 |
|---|---|
| ビルド | IDE ツールの汚染、サードパーティライブラリの脆弱性と Web シェル、ソースコードの汚染 |
| デプロイ | 保存データの置換と改ざん、データ伝送のハイジャック、ドライブバイダウンロード攻撃 |
| ランタイム | ソフトウェア更新のハイジャック、ランタイムの脆弱性と Web シェル、サードパーティライブラリのゼロデイ脆弱性 |
侵害されたコンテナイメージは、コンテナエスケープ、ホストの乗っ取り、機密データへのラテラルムーブメントにつながる可能性があります。Kubernetes アドミッションコントロールはデプロイ時に Pod のセキュリティを検証し、継続的なランタイム監視により迅速な脅威対応を可能にします。
ビルド段階
最小限のコンテナイメージのビルド
コンテナイメージを可能な限り小さく保ち、攻撃対象領域を削減します。
-
イメージから不要なバイナリを削除します。Dive を使用して Docker Hub のイメージレイヤーを検査するか、プッシュ後に Container Registry コンソールでレイヤーのコンテンツを確認してください。
-
SETUIDおよびSETGIDのパーミッションビットを持つすべてのバイナリを削除します。攻撃者はこれらを権限昇格に悪用する可能性があります。 -
ncやcurlなど、攻撃者が一般的に悪用するシェルやツールを削除します。
SETUID または SETGID ビットを持つバイナリを検索するには:
find / -perm /6000 -type f -exec ls -ld {} \;
Dockerfile でこれらのパーミッションビットを削除するには:
RUN find / -xdev -perm /6000 -type f -exec chmod a-s {} \; || true
マルチステージビルドの使用
マルチステージビルドは、Dockerfile 内で複数の FROM ステートメントを使用します。最終イメージには、ビルドツールチェーンではなく、アプリケーションアーティファクトのみが含まれます。
これにより、イメージサイズと攻撃対象領域を削減し、CI/CD パイプラインに統合できます。
詳細については、「マルチステージ Dockerfile を使用した Java アプリケーション用のイメージのビルド」をご参照ください。
非 root ユーザーとしてのコンテナの実行
Dockerfile に USER 命令を追加します。USER の後、RUN、ENTRYPOINT、および CMD はそのユーザーで実行されます。PodSpec でも同様の設定を適用します。
信頼できるソースからの依存関係のダウンロード
ソフトウェア開発段階では、信頼できないソフトウェアソースのパッケージを使用しないでください。
内部の依存関係管理には、Apsara DevOps Artifact Repository Packages を使用できます。これは、リモートプロキシ、ワンクリック移行、テナント分離、権限制御、高可用性ストレージをサポートし、Maven、Gradle、npm パッケージに対応したプライベートリポジトリです。
レジストリ段階
RAM ポリシーによるアクセス制限
Resource Access Management (RAM) ポリシーを使用して、特定のコンテナレジストリインスタンス、名前空間、またはリポジトリへのアクセスを制限します。たとえば、cr:ListInstance* は、cr:ListInstance で始まるすべてのアクションに一致します。リソースを acs:cr:*:*:repository/$instanceid/$namespace/* に設定します。たとえば、acs:cr:cn-hangzhou:1234567:repository/cri-123456/ns/* は、アカウント 1234567 が所有する cn-hangzhou のインスタンス cri-123456 に、名前空間 ns 内のすべてのリポジトリへのクエリ権限を付与します。次のポリシーは、特定のインスタンスの名前空間への読み取り専用アクセスを許可します。
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"cr:ListRepository",
"cr:GetImageLayer",
"cr:GetRepoTag"
],
"Resource": [
"acs:cr:cn-hangzhou:1234567:repository/cri-123456/ns/*"
]
}
],
"Version": "1"
}
詳細については、「RAM 認証ルール」および「カスタム OSS バケットに対する RAM ロールへの権限付与」をご参照ください。
本番環境での Container Registry Enterprise Edition の使用
Container Registry Enterprise Edition は、コンテナイメージと Helm チャートに対して、アーティファクトの暗号化、多次元の脆弱性レポート、きめ細かなアクション監査、およびアクセス制御を提供します。
本番環境では:
-
リポジトリを [private] に設定します。
-
内部エンドポイントを使用して、仮想プライベートクラウド (VPC) 経由で Container Registry にアクセスします。パブリックインターネットアクセスを無効にします。
-
ネットワークアクセスコントロールリスト (ACL) を設定して、インバウンドトラフィックを制限します。
詳細については、「Container Registry Enterprise Edition インスタンスの作成」をご参照ください。
イメージの脆弱性スキャン
Container Registry は、新しくアップロードされたイメージを自動的にスキャンし、既存のすべてのイメージを 24 時間ごとに再スキャンします。
-
イメージに
高または緊急と評価された脆弱性が含まれている場合は、直ちに削除または再ビルドしてください。 -
脆弱なイメージがすでにデプロイされている場合は、影響を受けるコンテナをできるだけ早く置き換えてください。
デプロイ前のスキャンを強制するには、アドミッションポリシーに違反するリクエストを拒否する Kubernetes validating webhook を設定します。CreateRepoTagScanTask を呼び出して、プルされるイメージに重大な脆弱性が含まれているかどうかを確認します。脆弱性が検出された場合、Container Registry は Pod のデプロイをブロックし、問題の一覧を示すイベントを生成します。
詳細については、「CreateRepoTagScanTask」をご参照ください。
イメージの署名と署名検証
イメージ署名は、中間者 (MITM) 攻撃や不正なイメージの更新・デプロイを防ぎ、配布からデプロイまでのイメージの整合性を保証します。
Container Registry Enterprise Edition は、特定の名前空間での自動署名をサポートしています。プッシュ後、Container Registry は一致する署名ルールに基づいてイメージに署名します。詳細については、「コンテナイメージの署名」をご参照ください。
デプロイ段階
kritis-validation-hook による署名検証の強制
ACK クラスターに kritis-validation-hook をインストールすると、デプロイ時にコンテナイメージの署名を検証できます。このフックは、オープンソースの Kritis プロジェクトに基づいて構築されており、コンテナレジストリおよびキー管理サービス (KMS) と統合されています。
検証に合格したイメージのみがクラスターで実行できます。サードパーティコンポーネントによって挿入されたサイドカーコンテナイメージを除外するには、それらを検証ホワイトリストに追加してください。
関連資料:
クラウドネイティブデリバリーチェーンの使用
Container Registry は、イメージのビルド、スキャン、グローバル同期、配布をカバーする、観測可能、追跡可能、かつ安全なクラウドネイティブデリバリーチェーンを提供します。
イメージをプッシュすると、Container Registry はそれをスキャンし、設定されたセキュリティポリシーを適用します。深刻度のしきい値を超えたイメージは、配布とデプロイがブロックされます。
イメージスキャン API をシステムに統合して、オンデマンドでスキャンをスケジュールできます。詳細については、「デリバリーチェーンの作成」をご参照ください。
ランタイム段階
Security Center によるランタイムの監視
Security Center は、クラウドネイティブのランタイムにおける脅威を検出およびブロックすることで、各 Pod を保護します。
脅威インテリジェンスを自動的に収集し、攻撃の発生源を追跡し、リアルタイムで対応します。機能は次のとおりです:
-
悪意のあるコードやコマンドの実行、SQL インジェクション、データ侵害の検出
-
複数のソースからのログデータを関連付けて、コンテキスト内でリスクパターンを特定
-
Kubernetes ログと操作ログからアクションを監査し、リスクを特定
-
ACK およびその他のオーケストレーションプラットフォーム全体で、コンテナエスケープ、AccessKey の侵害、不正アクセスを緩和
詳細については、「Security Center とは」をご参照ください。