ソフトウェアサプライチェーン攻撃は、ソフトウェアのビルドと配信に使用されるコンポーネント、ツール、プロセスを標的とします。Container Service for Kubernetes (ACK) 上で実行されるコンテナベースのワークロードは、開発、デリバリー、ランタイムという 3 つの異なるステージで脅威にさらされます。このトピックでは、サプライチェーンの脅威から ACK クラスターを保護するための、各ステージにおけるセキュリティ推奨事項について説明します。
サプライチェーンのステージごとの攻撃対象領域
| ステージ | 攻撃対象領域 |
|---|---|
| 開発 | IDE ツールの汚染、サードパーティライブラリの脆弱性とバックドア、ソースコードの直接的な改ざん |
| デリバリー | ソフトウェアストレージの置換と改ざん、通信ハイジャック、バンドルダウンロード攻撃 |
| ランタイム | アップグレードのハイジャックと汚染、実行環境のバックドアと脆弱性、サードパーティライブラリのゼロデイ脆弱性 |
アーティファクトのセキュリティは、ビルドとテストにおける最初の防衛線です。悪意を持って作成されたイメージはコンテナエスケープを引き起こし、攻撃者がホストにアクセスして、ご利用の Alibaba Cloud アカウントを使用してクラスター内で水平移動する可能性があります。デプロイメント時には、Kubernetes ネイティブの Admission Controller がデプロイメントインスタンスを検証しますが、デプロイメントが成功したからといって作業が完了したわけではありません。アプリケーションのセキュリティをリアルタイムで監視し、発生したランタイムセキュリティイベントに対応してください。
ビルド時のセキュリティ
最小限のコンテナイメージの作成
コンテナイメージから不要なバイナリをすべて削除してください。完全に信頼できない Docker Hub のイメージを使用する場合は、Dive を使用して検査します。これにより、各イメージレイヤーの内容が表示されます。イメージを Container Registry (ACR) にプッシュした後、ACR コンソールにもイメージレイヤー情報が表示されます。
SETUID と SETGID ビットを持つすべてのファイルを削除してください。攻撃者はこれらのビットを悪用して権限を昇格させる可能性があります。また、nc や curl のように悪用される可能性のあるユーティリティも削除してください。これらのビットを持つファイルを見つけるには、次のコマンドを実行します。
find / -perm /6000 -type f -exec ls -ld {} \;Dockerfile でこれらの権限を削除するには、次のように記述します。
RUN find / -xdev -perm /6000 -type f -exec chmod a-s {} \; || trueマルチステージビルドの使用
マルチステージビルドは、単一の Dockerfile 内で複数の FROM 文を使用することで、イメージを最小限に保ちます。各 FROM 命令は異なるベースイメージを指定し、独立したビルドステージを表します。マルチステージビルドは、CI/CD (Continuous Integration/Continuous Deployment) パイプラインで使用できます。マルチステージビルドでアプリケーションをパッケージングすると、イメージサイズが削減され、ビルドのセキュリティが向上し、ビルド時間が短縮されます。詳細については、「Dockerfile を使用したイメージのビルドと実行」をご参照ください。
Dockerfile への USER 命令の追加
コンテナイメージは非 root ユーザーとして実行してください。Dockerfile に USER 命令を含めます。これを設定すると、RUN、ENTRYPOINT、CMD 命令はすべて指定されたユーザーとして実行されます。このアプローチは、PodSpec だけで設定するよりも信頼性が高くなります。
信頼できるソースからの依存関係のダウンロード
開発中は、信頼できるソースのパッケージのみを参照してください。信頼できる Alibaba Cloud のイメージおよびソフトウェアアーティファクトソースの設定に関するガイダンスについては、「Alibaba Cloud ミラーサイト」をご参照ください。
企業内の依存関係を管理するには、Alibaba Cloud DevOps を使用して独自のソフトウェアリポジトリを構築します。Apsara DevOps Packages は、Alibaba Cloud が提供するエンタープライズグレードのプライベートリポジトリサービスで、Maven、Gradle、NPM をサポートしています。Maven および NPM アーティファクトの管理、リモートリポジトリの構成、既存のプライベートリポジトリのワンクリック移行をサポートし、テナントの分離、アクセス制御、高可用性ストレージを提供します。Apsara DevOps Packages
レジストリのセキュリティ
ACR Enterprise Edition の使用
本番環境では、ACR Enterprise Edition を使用してください。クラウドネイティブアーティファクトの暗号化ストレージ、イメージセキュリティスキャン、多次元の脆弱性レポートをサポートし、ストレージとコンテンツの両方を保護します。また、コンテナイメージと Helm チャートに対するネットワークアクセス制御、および詳細な操作監査も提供します。
本番リポジトリに以下の設定を適用してください。
リポジトリのアクセスポリシーをデフォルトで [非公開] に設定する
アクセスには内部 VPC ドメイン名を使用する
パブリックネットワークアクセスを無効にする
ホワイトリストを構成してアクセス元を制限する
詳細については、「Enterprise Edition インスタンスの作成」をご参照ください。
ACR リポジトリ用の RAM ポリシーの作成
複数のチームが Alibaba Cloud アカウントを共有している場合、認証情報が漏洩すると組織全体のリポジトリが危険にさらされる可能性があります。RAM ポリシーを作成して、各チームがアクセスできる名前空間やリポジトリを制限してください。
たとえば、cr:ListInstance* は cr:ListInstance で始まるすべての操作を許可します。Resource フィールドを acs:cr:cn-hangzhou:1234567:repository/cri-123456/ns/* に設定すると、アカウント ID 1234567 に、中国 (杭州) リージョンにあるインスタンス cri-123456 の ns 名前空間内のイメージリポジトリをクエリする権限のみが付与されます。
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"cr:ListRepository",
"cr:GetImageLayer",
"cr:GetRepoTag"
],
"Resource": "*"
},
{
"Action": [
"cr:List*"
],
"Effect": "Allow",
"Resource": [
"acs:cr:cn-hangzhou:1234567:repository/cri-123456/ns/*"
]
}
],
"Version": "1"
}ACR での RAM ポリシーの設定に関する詳細については、「RAM 認可情報」および「カスタム OSS バケット使用時の RAM アクセス制御の設定」をご参照ください。
イメージの脆弱性スキャン
コンテナイメージには脆弱なバイナリやアプリケーションが含まれている可能性があり、時間の経過とともに新たな脆弱性が出現します。ACR では、新しくプッシュされたイメージや既存のイメージに対して 24 時間ごとにスキャンを設定してください。HIGH または CRITICAL の脆弱性を持つイメージは削除または再ビルドしてください。デプロイ済みのイメージに脆弱性が発見された場合は、直ちに置き換えてください。
脆弱なイメージがクラスターに到達するのをブロックするには、Kubernetes の Validating Webhook を使用します。Webhook は、Kubernetes API がリクエストを処理する前にインターセプトし、基準を満たさないリクエストを拒否します。ACR が提供する CreateRepoTagScanTask 操作を呼び出して、Pod が重大な脆弱性を持つイメージをプルしているかどうかを確認します。脆弱性が発見された場合、Pod の作成は拒否され、CVE のリストを含むイベントが返されます。
ACR クラウドネイティブアプリケーションデリバリーチェーンの使用
ACR のクラウドネイティブアプリケーションデリバリーチェーンを使用すると、イメージのビルド、スキャン、グローバル同期、ディストリビューションを単一のパイプラインでオーケストレーションでき、エンドツーエンドの可観測性、トレーサビリティ、セキュリティ保護を提供します。
イメージがプッシュされると、ACR は自動的にセキュリティスキャンを実行します。セキュリティブロッキングポリシーを設定している場合、ACR は高リスクの脆弱性を特定し、非準拠のイメージをブロックします。セキュリティポリシーに合格したイメージのみがディストリビューションとデプロイメントに進みます。また、ACR のセキュリティスキャン API を統合して、カスタムのイメージスキャンをスケジュールすることもできます。詳細については、「デリバリーチェーンの作成」をご参照ください。
イメージ署名と署名検証の有効化
デプロイメント時にイメージの整合性を検証することで、信頼できる認証局によって署名されたイメージのみがクラスターで実行されるようになり、不正または改ざんされたコードが環境に侵入するリスクを低減します。
ACR は、名前空間レベルでの自動署名をサポートしています。コンテナイメージがプッシュされるたびに、署名ルールに一致する場合、ACR は自動的に署名を行い、中間者攻撃やイメージの不正な更新・実行を防ぎます。詳細については、「イメージ署名の使用」をご参照ください。
ACK クラスターで署名検証を強制するには、コンポーネント管理を通じて kritis-validation-hook コンポーネントをインストールします。これはオープンソースの Kritis プロジェクトおよび ACR と深く統合されており、Alibaba Cloud Key Management Service (KMS) を使用して署名されたイメージの検証をサポートし、自動的な署名検証を実現します。詳細については、「kritis-validation-hook コンポーネントを使用したコンテナイメージ署名の自動検証」および「Key Management Service (KMS) とは」をご参照ください。
イメージ署名を有効にした後、署名検証ポリシーを構成して、検証済みのイメージのみがクラスターにデプロイされるように許可します。サードパーティコンポーネントによって自動的に挿入されるサイドカーコンテナイメージが署名検証に失敗し、Pod のデプロイメントを妨げるケースに対応するために、ホワイトリストを定義してください。詳細については、「kritis-validation-hook コンポーネントの概要」をご参照ください。
ランタイムセキュリティ
Alibaba Cloud Security Center の使用
ランタイムフェーズでは、Alibaba Cloud Security Center を使用してリアルタイムの脅威検知とブロッキングを行い、各アプリケーション Pod を保護します。Security Center は、脅威データの収集、特定、分析、対応、修復を自動化し、環境全体で統一されたセキュリティ管理を実現します。
複数ログの相関分析とコンテキスト分析を使用して、Security Center はコマンド実行、コード実行、SQL インジェクション、データ侵害などのリスクをリアルタイムで検知し、一般的なビジネス脆弱性の悪用シナリオをカバーします。Kubernetes ログとクラウドプラットフォームの操作ログを相関させることで、リアルタイムの動作監査を実行し、コンテナサービスやオーケストレーションプラットフォームにおけるコンテナエスケープ、AccessKey の漏洩、不正アクセスなどの脅威を軽減するのに役立ちます。詳細については、「Security Center とは」をご参照ください。