ソフトウェアのサプライチェーンセキュリティとは、ソフトウェアの開発、配信、使用のパイプライン全体でソフトウェアとその関連コンポーネントの安全性を確保し、侵入、悪意のあるコードの拡散、脆弱性、その他のセキュリティリスクを防止することを指します。 このトピックでは、サプライチェーンの観点からセキュリティに関する推奨事項を示します。
背景情報
ソフトウェアのサプライチェーンは、ビルド、デプロイ、およびランタイムの各段階で構成されます。 攻撃者は、これらの段階でワークロードに対してさまざまな種類の攻撃を開始できます。
段階 | タイプの攻撃 |
ビルド |
|
デプロイ |
|
ランタイム |
|
アーティファクトのセキュリティは、ビルドとテストの段階で最初の防御です。 攻撃者は、悪意のあるコンテナイメージを悪用してコンテナから脱出し、ホストを制御することができます。 その結果、攻撃者はネットワークを介して、Alibaba Cloudアカウントで機密データやその他の重要なデータ資産にアクセスすることができます。 オープンソースKubernetesが提供するアドミッション制御メカニズムは、デプロイ段階でプロビジョニングされたポッドのセキュリティを検証するのに役立ちます。 アプリケーションをデプロイした後、アプリケーションのランタイムをリアルタイムで監視する必要があります。 これにより、セキュリティイベントをできるだけ早く処理できます。
クラスターセキュリティに関する提案
これらの提案に従って、ACKクラスターのライフサイクルを保護することを推奨します。
小さなコンテナイメージの作成
使用するコンテナーイメージから不要なバイナリファイルを削除します。 コンテナイメージをDocker Hubからダウンロードする場合は、Diveを使用してイメージを分析する必要があります。 Diveは、各画像レイヤーのコンテンツを探索するのに役立ちます。 詳細については、「Dive」をご参照ください。
イメージをAlibaba Cloud Container Registryにプッシュした後、Container Registryコンソールで各イメージレイヤーのコンテンツを表示することもできます。
SETUID
およびSETGID
ビットを持つすべてのバイナリファイルを削除する必要があります。 また、攻撃者が悪用する可能性のあるシェルやアプリケーション (nc
やcurl
など) を削除する必要がある場合もあります。 次のコマンドを実行して、SETUID
およびSETGID
ビットを持つバイナリファイルを検索できます。find / -perm /6000 -type f -exec ls -ld {} \;
バイナリファイルから権限を削除する場合は、コンテナイメージに次のコマンドを追加します。
RUN find / -xdev -perm /6000 -type f -exec chmod a-s {} \; || true
マルチステージビルドの使用
マルチステージビルドを使用して、より小さなコンテナイメージを作成できます。 マルチステージビルドを使用して、CI/CDパイプラインでの継続的な統合を自動化できます。 マルチステージビルドでは、複数のFROMステートメントを
Dockerfile
に含めることができます。 各FROMステートメントは異なるベースイメージを使用でき、各FROMステートメントは新しいビルドステージを開始します。 マルチステージビルドでは、信頼できるコンテナイメージをすばやくビルドし、コンテナイメージのサイズを抑えることができます。 詳細については、「マルチステージビルディングを含むDockerfileを使用したJavaアプリケーションのイメージの構築」をご参照ください。Container RegistryリポジトリのRAMポリシーの作成
企業内の複数のチームが、同じAlibaba Cloudアカウントを使用してクラウドリソースを管理したい場合があります。 これらのチームがリソースを共有しない場合は、リソースアクセス管理 (RAM) ポリシーを作成して、各チームがアクセスできる名前空間またはリポジトリを制限する必要があります。 たとえば、
cr:ListInstance *
は、cr:ListInstance
で始まるすべてのアクションを指定します。acs:cr:*:*:repository/$instanceid/$namespace/*
をacs:cr:cn-hangzhou:1234567:repository/cri-123456/ns/*
に設定して、cn-hangzhouリージョンのインスタンスcri-123456に名前空間のリポジトリを照会する権限を付与できます。 インスタンスはAlibaba Cloudアカウント1234567に属しています。{ "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" }
Container RegistryでRAMポリシーを設定する方法の詳細については、「RAM認証ルール」および「カスタムOSSバケットへのアクセスに使用されるRAMロールへの権限付与」をご参照ください。
Container Registry Enterprise Editionの使用
Container Registry Enterprise Editionでは、Container Registryに保存されているクラウドネイティブのアーティファクトを暗号化できます。 Container Registry Enterprise Editionは、画像スキャンと多次元脆弱性レポートもサポートしており、ストレージとコンテンツのセキュリティ保護に役立ちます。 コンテナイメージとHelmチャートにアクセス制御を適用し、詳細なアクション監査を実行して、アーティファクトのセキュリティを確保できます。 セキュリティを強化するには、次のタスクを実行することを推奨します。運用環境でContainer Registry Enterprise Editionを使用し、リポジトリをプライベートに設定し、内部エンドポイントを使用して仮想プライベートクラウド (VPC) 経由でContainer Registryインスタンスにアクセスし、インターネットアクセスを無効にし、ネットワークアクセス制御リスト (ACL) を構成します。 詳細については、「Container Registry Enterprise Editionインスタンスの作成」をご参照ください。
Container Registryが提供するクラウドネイティブアプリケーション配信チェーンの使用
Container Registryは、クラウドネイティブのアプリケーション配信チェーンを提供します。 配信チェーンでは、画像の構築、画像のスキャン、画像のグローバル同期、画像の配布などのタスクを合理化できます。 配信チェーン全体は、観察可能であり、追跡可能であり、保護される。 詳細については、「配信チェーンの作成」をご参照ください。
コンテナイメージをcontainer Registryにプッシュすると、Container Registryは自動的にイメージをスキャンします。 また、セキュリティポリシーを設定して、Container Registryが、重大度が高いコンテナイメージおよびブロックイメージのセキュリティリスクを特定できるようにすることもできます。 セキュリティポリシーで許可されているイメージのみが配布およびデプロイされます。 配信チェーンは、コンテナ化されたアプリケーションの安全な配信と効率的な展開を保証します。 画像スキャンのAPI操作をシステムに統合して、画像スキャンをスケジュールすることもできます。
コンテナーイメージの脆弱性を定期的にスキャン
仮想マシンによって使用されるOSイメージと同様に、コンテナイメージは、脆弱性が存在するバイナリファイルまたはアプリケーションを含み得るか、または脆弱性は、バイナリファイルまたはアプリケーションが更新された後に追加され得る。 そのため、コンテナイメージの脆弱性を定期的にスキャンすることを推奨します。 Container Registryは、新しくアップロードされたコンテナイメージと既存のコンテナイメージを24時間ごとに自動的にスキャンできます。 重要度レベルが
HIGH
またはCRITICAL
の脆弱性が含まれているコンテナイメージの場合、コンテナイメージを削除または再構築する必要があります。 すでにデプロイされているコンテナイメージで脆弱性が検出された場合は、できるだけ早い機会に関連するコンテナを置き換える必要があります。Kubernetes validating webhook
を呼び出して、コンテナイメージの重大な脆弱性を特定することもできます。Kubernetes API
を呼び出して、webhook
で定義されている承認ポリシーに準拠していないリクエストを拒否する前に、検証webhook
を呼び出します。 Container Registry APIのCreateRepoTagScanTask操作を呼び出して、クラスターによってプルされているコンテナーイメージに重大な脆弱性が含まれているかどうかを確認できます。 コンテナーイメージに重大な脆弱性が含まれている場合、container Registryはクラスターがコンテナーイメージからポッドをデプロイすることを禁止し、イベントを生成します。 イベントには、検出された脆弱性が含まれます。 詳細については、「CreateRepoTagScanTask」をご参照ください。DockerfilesにUSER命令を追加し、非rootユーザーとしてコンテナーを実行します
ポッドのセキュリティを確保するには、rootユーザーとしてコンテナーを実行しないようにする必要があります。 PodSpecにUSER命令を追加できます。 ポッドのセキュリティを確保するためのベストプラクティスとして、DockerfilesのUSER命令を使用できます。 USER命令を追加すると、指定されたユーザーアカウントでRUN、ENTRYPOINT、およびCMDが実行されます。
信頼できるソースからの依存関係のダウンロード
ソフトウェア開発段階で信頼できないソースからダウンロードされる依存関係を使用しないでください。 Alibaba Cloudによって信頼されるコンテナイメージ、アーティファクト、または依存関係の詳細については、「Alibaba Cloudイメージ」をご参照ください。
Apsara Devopsを使用して独自のリポジトリを構築できます。 Apsara Devopsアーティファクトリポジトリパッケージ は、Alibaba Cloudが提供するエンタープライズクラスのプライベートリポジトリサービスです。 このサービスにより、企業はプライベートリポジトリを構築して、Maven、Gradle、およびnpmのパッケージとリポジトリを管理できます。 このサービスを使用して、数回クリックするだけでMavenとnpmのアーティファクトを管理し、リモートリポジトリを構築し、リポジトリを移行することもできます。 Apsara Devops Artifact Repository Packagesサービスは、テナントの分離、権限管理、および高可用性ストレージをサポートして、アーティファクトを保護します。
イメージ署名の使用と署名検証ポリシーの設定
クラスターにアプリケーションをデプロイするときは、信頼できる機関によって署名されたコンテナイメージのみが使用されるように、コンテナイメージの署名を検証する必要があります。 これにより、例外や悪意のあるコードの実行を防ぐことができます。
Container Registry Enterprise Editionはイメージ署名をサポートしています。 これにより、MITM (man-in-the-middle) 攻撃や不正なイメージの更新や展開が防止されます。 このようにして、配布から展開までのイメージの一貫性とセキュリティが保証されます。 Container Registryは、特定の名前空間のイメージに自動的に署名できます。 イメージがContainer Registryにプッシュされると、Container Registryは一致した署名ルールに基づいてイメージに自動的に署名します。 これにより、コンテナイメージが信頼されます。 詳細については、「コンテナーイメージの署名」をご参照ください。
Kritis-validation-hookコンポーネントをACKクラスターにインストールして、Key Management Service (KMS) によって署名されたコンテナイメージの署名を自動的に検証できます。 このコンポーネントは、オープンソースのKritisに基づいて開発されており、Container Registryと深く統合できます。 詳細については、「kritis-validation-hookを使用してコンテナーイメージのシグネチャを自動的に検証する」、「Kritis」、および「KMS」をご参照ください。
イメージ署名を有効にすると、署名検証ポリシーを設定できます。 ACKクラスターにデプロイできるのは、署名検証ポリシーによって検証された信頼できるイメージのみです。 署名検証ホワイトリストを設定し、サードパーティのコンポーネントによって挿入されたサイドカーコンテナイメージをホワイトリストに追加することもできます。 このようにして、システムはサイドカーコンテナ画像の署名を検証せず、ポッドは予想通りにこれらの画像から展開することができる。 詳細については、「Introduction to kritis-validation-hook」をご参照ください。
Alibaba Cloudセキュリティセンターの使用
Security Centerを使用して、クラウドネイティブアプリケーションのランタイムで脅威を検出およびブロックできます。 これにより、各ポッドのランタイムが確保されます。 Security Centerは、クラウドネイティブアプリケーションの脅威に関する情報を自動的に取得し、その情報を使用して脅威の分析、脅威の発生源の特定、適切な応答の生成、および脅威の処理を行うことができます。 また、Security Centerは、さまざまな種類のログを関連付け、コンテキストを分析し、悪意のあるコードやコマンドの実行、SQLインジェクション、データ侵害などのリスクをリアルタイムで検出します。 これにより、ビジネスシステムの侵入を防ぎ、脆弱性を特定できます。 Security Centerは、Kubernetesログと操作ログに基づいて、アクションを監査し、リスクをリアルタイムで特定できます。 これにより、ACKやその他のオーケストレーションプラットフォームでのコンテナエスケープ、AccessKey違反、不正アクセスのリスクを軽減できます。 詳しくは、「Security Center の概要」をご参照ください。
関連ドキュメント
Container Registry Enterprise Editionでは、Container Registryに保存されているクラウドネイティブのアーティファクトを暗号化できます。 Container Registry Enterprise Editionは、画像スキャンと多次元脆弱性レポートもサポートしており、ストレージとコンテンツのセキュリティ保護に役立ちます。 詳細については、「Container Registry Enterprise Editionインスタンスの作成」をご参照ください。
Alibaba Cloudによって信頼されるコンテナイメージ、アーティファクト、または依存関係の詳細については、「Alibaba Cloudイメージ」をご参照ください。