Mit dem Feature 'IBM Container Image Security Enforcement' können Sie die Integrität Ihrer Container-Images prüfen, bevor Sie sie in einem IBM Cloud Private-Cluster bereitstellen.
IBM Container Image Security Enforcement steuert, aus welcher Quelle Images bereitgestellt werden, und setzt Richtlinien von Vulnerability Advisor (VA) durch. Falls ein Image Ihre definierten Richtlinienanforderungen nicht erfüllt, wird der Pod nicht implementiert.
Auf jedes Image in einem Repository wird ein Geltungsbereich für Imagerichtlinien angewendet (entweder Cluster oder Namensbereich). Wenn Sie eine Anwendung bereitstellen, überprüft IBM Container Image Security Enforcement,
ob der Kubernetes-Namensbereich, in dem die Bereitstellung erfolgt, Richtlinienbestimmungen aufweist, die angewendet werden müssen. Falls keine Richtlinie mit dem Geltungsbereich Namensbereich vorhanden ist, wird die Richtlinie mit dem
Geltungsbereich Cluster angewendet. Wenn sich die Richtlinien Namensbereich und Cluster überschneiden, wird der Clustergeltungsbereich ignoriert. Ist weder eine Richtlinie mit dem Geltungsbereich Cluster noch mit dem Bereich Namensbereich vorhanden, schlägt der Start der Bereitstellung fehl. Es könnte eine Fehlernachricht wie die folgende angezeigt werden:
... release ... failed: Internal error occurred: admission webhook "trust.hooks.securityenforcement.admission.cloud.ibm.com" denied the request:
Deny "docker.io/rook/rook:v0.7.1", no matching repositories in ClusterImagePolicy and no ImagePolicies in the "default" namespace
Hinweis: Jeder Pod, der in Namensbereichen bereitgestellt ist, die für IBM Cloud Private-Services reserviert sind, umgeht die Sicherheitsprüfung des Container-Images. Die folgenden Namensbereiche sind für IBM Cloud Private-Services reserviert:
kube-systemcert-manageristio-systemErstellen Sie eine Richtlinie, um das Problem zu lösen.
Die Richtliniendefinition wird in der Datei <installation_cluster>/cluster/config.yaml oder mithilfe der Managementkonsole konfiguriert.
apiVersion: securityenforcement.admission.cloud.ibm.com/v1beta1
kind: <ClusterImagePolicy_or_ImagePolicy>
metadata:
name: <crd_name>
spec:
repositories:
- name: <repository_name>
policy:
va:
enabled: <true_or_false>
<repository_name> - Gibt die Repositorys an, aus denen Images zulässig sind. Dies ist die Liste der Repositorys, die vertrauenswürdigen Inhalt enthalten. Ein Platzhalterzeichen (*) im Repository-Namen ist zulässig.
Dieses Platzhalterzeichen (*) gibt an, dass Images aus allen Repositorys zulässig, also vertrauenswürdig sind. Wenn Sie alle Repositorys als vertrauenswürdig definieren möchten, geben Sie den Repository-Namen mit (*) an
und füllen Sie die Unterabschnitte für die Richtlinien nicht aus. Mit Ausnahme des Standard-Repositorys mycluster.icp:8500 müssen Repositorys standardmäßig einer Richtlinienprüfung unterzogen werden. Ein leerer Wert für den Repository-Namen
blockiert die Bereitstellung aller Images.va der Wert enabled: true angegeben ist, wird jeder Versucht blockiert, Pods aus Images in dieser Registry bereitzustellen. Falls Sie Images aus diesen Registrys bereitstellen
wollen, müssen Sie die Richtlinienspezifikation va entfernen. Die integrierte Standard-Container-Registry von IBM Cloud Private ist die einzige Registry, von der die Richtliniendurchsetzung durch Vulnerability Advisor unterstützt wird.IBM Container Image Security Enforcement ist als Kubernetes-Diagramm verfügbar. IBM Container Image Security Enforcement wird während der IBM Cloud Private-Installation standardmäßig aktiviert.
Wenn Sie IBM Container Image Security Enforcement während der Installation inaktivieren möchten, fügen Sie image_security_enforcement zur Liste der inaktivierten Services (management_services) in der Datei config.yaml im IBM Cloud Private-Cluster hinzu.
Nach der Installation eines IBM Cloud Private-Clusters kann der Clusteradministrator das Kubernetes-Diagramm deinstallieren.
Die Standardrichtlinie für die Durchsetzung der Imagesicherheit verfügt über den Geltungsbereich Cluster. Bei Verwendung dieser Richtlinie können nur die Images im Cluster verwendet werden, die in der integrierten Container-Registry (die
erste in der Whitelist der Richtlinie) gespeichert sind sowie die Images, die im IBM Cloud Private-Katalog verwendet werden (die anderen in der Whitelist der Richtlinie). Beispiel:
image-security-enforcement:
clusterImagePolicy:
- name: "{{ cluster_CA_domain }}:8500/*"
- name: "registry.bluemix.net/ibm/*"
- name: ...
Hinweis: Standardmäßig gilt Vulnerability Advisor (VA) Container Image Security Enforcement nicht für die Standardrichtlinie.
Sie können die Imagerichtlinie entweder auf der Ebene des Clusters oder des Namensbereichs ändern, nachdem Sie den IBM Cloud Private-Cluster installiert haben. In der Richtlinie können Sie unterschiedliche Durchsetzungsregeln
für unterschiedliche Images angeben.
Sie können die Imagerichtlinie mit dem Geltungsbereich Cluster auch vordefinieren, bevor Sie IBM Cloud Private installieren. Diese vordefinierte Einstellung überschreibt die Standardimagerichtlinie für den Geltungsbereich Cluster während der Installation.
Um die Imagerichtlinie für den Geltungsbereich Cluster vor der Installation zu definieren, ändern Sie die Datei config.yaml.
Wenn Sie beispielsweise den folgenden Code zur Datei config.yaml hinzufügen, dürfen alle Images, die im Repository quay.io vorhanden sind, für Bereitstellungen in Ihrem Cluster verwendet werden.
image-security-enforcement:
clusterImagePolicy:
- name: "quay.io/*"
policy:
Die Richtlinie kann auch nach der Installation Ihres Clusters in Form eines Kubernetes-Objekts bereitgestellt werden. Um die Richtlinie als Kubernetes-Objekt bereitzustellen, verwenden Sie den Befehl kubectl apply.
Erstellen Sie die Datei policy.yaml mit den Richtlinienspezifikationen. Nachfolgend finden Sie einige Beispielrichtlinienkonfigurationen, die Sie für Ihre Datei policy.yaml verwenden können.
Die folgende Richtlinie lässt Container-Images aus der Container-Registry für Docker Hub, der Container-Registry für CoreOS, der Container-Registry für Google, der Container-Registry für Azure, der Container-Registry für Amazon Elastic und der Container-Registry für IBM zu.
apiVersion: securityenforcement.admission.cloud.ibm.com/v1beta1
kind: ClusterImagePolicy
metadata:
name: ibmcloud-default-cluster-image-policy
spec:
repositories:
# Docker hub Container Registry
- name: "docker.io/*"
policy:
# CoreOS Container Registry
- name: "quay.io/*"
policy:
# Google Container Registry
- name: "gcr.io/*"
policy:
# Azure Container Registry
- name: "*azurecr.io/*"
policy:
# Amazon Elastic Container Registry
- name: "*amazonaws.com/*"
policy:
# IBM Container Registry
- name: "registry*.bluemix.net/*"
policy:
Die folgende Richtlinie lässt Images aus jeder beliebigen Container-Registry zu.
apiVersion: securityenforcement.admission.cloud.ibm.com/v1beta1
kind: ClusterImagePolicy
metadata:
name: ibmcloud-default-cluster-image-policy
spec:
repositories:
# allow all images
- name: "*"
policy:
Die folgende Richtlinie weist alle Images aus jeder beliebigen Container-Registy zurück (auch das Image von IBM Container Image Security Enforcement).
apiVersion: securityenforcement.admission.cloud.ibm.com/v1beta1
kind: ClusterImagePolicy
metadata:
name: ibmcloud-default-cluster-image-policy
spec:
repositories:
Wenden Sie die Richtlinie an.
kubectl apply -f policy.yaml
Sie können eine Durchsetzungsrichtlinie für Images mithilfe der IBM Cloud Private-Webkonsole erstellen, von der Leitlinien für Pods festgelegt werden, die im Cluster erstellt werden. Führen Sie die folgenden Schritte aus, um eine Richtlinie für Images zu erstellen:
Melden Sie sich an der IBM Cloud Private-Webkonsole des Clusters mit einer ID an, die einem Clusteradministrator Zugriff gewährt.
Wählen Sie im Navigationsmenü Verwalten > Ressourcensicherheit aus.
Wählen Sie Imagerichtlinien aus. Eine Liste der verfügbaren Richtlinien für Images wird angezeigt.
Wählen Sie Imagerichtlinie erstellen aus.
Geben Sie einen Namen für die Imagerichtlinie ein. Der Name muss eine einzelne Zeichenfolge sein, die nur Buchstaben, Zahlen, Unterstreichungszeichen (_) und Bindestrichen (-) enthält.
Wählen Sie aus den folgenden Optionen den Geltungsbereich der Richtlinie aus, um zu definieren, welche Ressourcen durch die Richtlinie eingeschränkt werden:
Wenn Sie als Geltungsbereich 'Namensbereich' ausgewählt haben, wählen Sie einen vorhandenen Namensbereich aus der Liste aus, um den Namen anzugeben.
Wählen Sie Registry hinzufügen aus, um einen vertrauenswürdigen Bereich anzugeben, von dem Sie Images empfangen können. Standardmäßig werden alle Images zurückgewiesen. Durch das Hinzufügen einer Registry wird festgelegt, dass die Position eine zulässige Quelle für Images ist.
docker.io/*docker.io/ibmcom/*Wählen Sie Hinzufügen aus, um die neue Imagerichtlinien zu speichern und zu erstellen.
Wenn Sie eine Imagerichtlinie entfernen möchten, wählen Sie das Symbol zum Öffnen und Schließen der Optionsliste (...) für die Imagerichtlinie und anschließend Entfernen** aus.