Über den Vertrag
Die IBM Cloud Hyper Protect Virtual Servers für VPC ist veraltet. Ab dem 28. Februar 2026 können Sie keine neuen Instanzen mehr anlegen. Bestehende Instanzen werden bis zum 20. Februar 2027 unterstützt. Alle Instanzen, die zu diesem Zeitpunkt noch existieren, werden gelöscht. Sie können Ihre Workloads mit IBM Confidential Computing Container Runtime(früher bekannt als Hyper Protect Virtual Servers ) oder IBM Confidential Computing Container Runtime for Red Hat Virtualization Solutions(früher bekannt als Hyper Protect Container Runtime for Red Hat Virtualization Solutions) neu bereitstellen. Informationen zur Datenmigration finden Sie in der Anleitung zur Migration. Weitere Informationen finden Sie in der Ankündigung zur Abschaffung des Dienstes.
Wenn Sie eine IBM CloudHyper Protect Virtual Servers für eine VPC-Instanz mit dem IBM Hyper Protect Container Runtime (HPCR)-Image erstellen, müssen Sie im Feld „Benutzerdaten“ einen Vertrag angeben.
Was ist ein Vertrag?
Der Vertrag ist eine Definitionsdatei im YAML-Format, die für die Hyper Protect Virtual Servers for VPC-Instanz spezifisch ist. Diese Datei muss vom Cloudbenutzer erstellt werden, um eine Instanz zu erstellen. Nachdem diese Datei erstellt wurde, muss sie als Eingabe im Feld Benutzerdaten übergeben werden, wenn eine Instanz erstellt wird. Sie können keine Instanz ohne gültigen Vertrag erstellen. Wenn Sie eine Instanz ohne Vertrag erstellen, wird die Implementierung gestartet und schlägt dann fehl und die Instanz wird in den Beendigungsstatus versetzt. Der Vertrag gilt speziell für die Erstellung einer Hyper Protect Virtual Servers for VPC-Instanz und ist eine Erweiterung der IBM Secure Execution-Technologie von Hyper Protect.
Wenn die Workload die entschlüsselten Token entweder über SSH oder REST-APIs offenlegt, dann enthalten die entschlüsselten Daten sowohl die Workload als auch die Umgebungsgeheimnisse. Es enthält jedoch nicht die Samen, die für die Volumenverschlüsselung verwendet wurden.
Vertragsabschnitte
Eine Vertragsdatei kann die folgenden vier gültigen übergeordneten Abschnitte enthalten, von denen die Abschnitte workload und env obligatorisch sind.
workloadist ein obligatorischer Abschnitt.envist ein obligatorischer Abschnitt.attestationPublicKeyist ein optionaler Abschnitt. Sie können einen öffentlichen RSA-Schlüssel als Teil des Vertrags angeben, der zum Verschlüsseln des Attestierungsdokuments verwendet wird. Das Attribut muss den NamenattestationPublicKeyhaben.envWorkloadSignatureist ein optionaler Abschnitt und enthält die Signatur der anderen Abschnitte des Vertrags.
Die beiden primären Abschnitte in einem Vertrag sind die Abschnitte workload und env. Diese beiden Abschnitte sind erforderlich, weil die Informationen, die dem Vertrag hinzugefügt werden, aus zwei verschiedenen Personas
stammen, nämlich der Persona "workload" und der Persona "deployer".
Die Workloadpersona stellt Informationen zu dem Container (oder der Workload) bereit, der in der Hyper Protect Virtual Servers for VPC-Instanz gestartet werden muss. Es enthält Informationen über den Namen des Containers, die Container Registry wo es sich befindet, Anmeldeinformationen des Container Registry, der Image Digest, die Notarserverinformationen (erforderlich für die Imagevalidierung), die Umgebungsvariablen, die an den Container übergeben werden müssen, und die Docker-Compose-Datei oder Pod-Deskriptoren mit den Containerinformationen.
Wenn Sie eine Docker Compose-Datei verwenden, wird nur ein Container unterstützt. Pod-Deskriptoren unterstützen einen oder mehrere Container.
Der Deployer arbeitet eng mit dem „ IBM Cloud ” zusammen. Diese Persona empfängt die Workloadinformationen (vorzugsweise einen verschlüsselten Workloadabschnitt) von der Workloadpersona. Der Implementierer erstellt dann den Abschnitt env des Vertrags. Dieser env Abschnitt enthält Informationen, die speziell für die Umgebung von IBM Cloud gelten. In der Regel handelt es sich um Informationen, die die Workloadpersona nicht hat und nicht wissen muss. Ein Beispiel
sind Informationen zur IBM Cloud-Protokollierungsinstanz, die der Implementierer erstellt, bevor er Informationen zum Abschnitt env des Vertrags hinzufügt.
Abschnitt 'workload'
Dieser Abschnitt ist einer der wichtigsten Abschnitte des Vertrags. Der Abschnitt workload kann über mehrere Unterabschnitte verfügen. Der Zweck der Unterabschnitte besteht darin, Informationen bereitzustellen, die zum Hochfahren
der Workload erforderlich sind. Der Abschnitt workload ist der übergeordnete Abschnitt, der die folgenden Unterabschnitte enthalten kann:
type: Arbeitsbelastung. Dieser Unterabschnitt ist obligatorisch.authsDieser Unterabschnitt ist optional.compose(für Einzelcontainer) oderplay(für Einzelcontainer oder mehrere Container). Sie schließen sich gegenseitig aus; einer der Abschnitte muss vorhanden sein.imagesDieser Unterabschnitt ist optional.volumesDieser Unterabschnitt ist optional.
Das folgende Snippet zeigt ein übergeordnetes Beispiel für den Workloadabschnitt des Vertrags. Das Minimum, das ein Workloadabschnitt benötigt, ist der Erstellungsabschnitt. Die anderen Abschnitte können je nach Anforderung hinzugefügt werden.
workload: |
type: workload
auths:
<registry url>:
password: <password>
username: <user name>
<registry url>:
password: <password>
username: <user name>
compose:
archive: <base64 encoded of tgz of docker-compose.yaml>
images:
dct:
<docker image name (without the tag, an example is docker.io/redbookuser/s390x:)>:
notary: "<notary URL>"
publicKey: <docker content trust signed public key>
<docker image name>:
notary: "<notary URL>"
publicKey: <docker content trust signed public key>
volumes:
<volume key>:
mount: "<data volume mount path>"
seed: "<Passphrase of the LUKS encryption>"
filesystem: "ext4"
Unterabschnitt auths
Der Abschnitt auths enthält Informationen zur Registry des Containers. Wenn ein öffentliches Image im Vertrag verwendet wird, benötigen Sie den Abschnitt auths nicht, da keine Berechtigungsnachweise erforderlich sind.
Der Unterabschnitt auths ist nur erforderlich, wenn die Container-Images privat sind. Dieser Unterabschnitt enthält keine Bildinformationen, wie im folgenden Beispiel gezeigt. Dieser Unterabschnitt muss den Namen der Image-Registry
und die Berechtigungsnachweise (z. B. Benutzername/Kennwort) enthalten. Der Schlüssel muss der Hostname des Container Registry oder die folgende Zeichenfolge für das Standard-Docker-Register:
https://index.docker.io/v1/
Das folgende Snippet zeigt ein Beispiel für IBM Cloud Registry. Weitere Informationen zur Verwendung des API-Schlüssels finden Sie unter Client-Software für die Authentifizierung in der Automatisierung verwenden.
auths:
us.icr.io:
password: <apikey>
username: iamapikey
Unterabschnitt compose
Sie besteht aus einem Archivunterabschnitt. Der Unterabschnitt 'archive' enthält das mit Base64 codierte TGZ-Dateiarchiv der Datei docker-compose.yaml. Da das Hyper Protect Container Runtime-Image Docker Engine und Docker Compose
verwendet, um den Container zu starten, müssen die Informationen zum Container zuerst unter Verwendung einer standardmäßigen Docker Compose-Datei erstellt werden. Diese Datei wird dann archiviert und Base64 verschlüsselt. Das Ergebnis dieses
Vorgangs wird als Wert für den Unterabschnitt "Archiv" im Abschnitt "Erstellen" bereitgestellt. Weitere Informationen finden Sie unter Übersicht über Docker Compose.
Die unter den Datenträgerinformationen der Datei 'docker-compose' angegebenen Mountpunkte können an dem Datenträgermountpunkt ausgerichtet sein, der im Abschnitt 'workload' des Vertrags angegeben ist.
Die Ausführung eines Builds als Teil einer Docker Compose-Datei wird nicht unterstützt. Stellen Sie sicher, dass Ihre Docker Compose-Datei keinen Abschnitt build enthält.
Sowohl das Format "yaml" als auch das Format "yml" werden für die Datei "docker-compose" unterstützt. Sehen Sie sich das folgende Beispiel für eine Docker-Compose-Datei an.
version: '3'
services:
nginx:
image: nginx@sha256:e73ba8654ba7fd1834e78a3d4e9d72ffaaa3372d42996af5c34ba3e1abc293e8
privileged: true
user: 0:0
restart: always
ports:
- 80:80
Es gibt Anwendungsfälle, bei denen das Register nicht bekannt ist, wenn der Workload-Abschnitt vorverschlüsselt ist. Wenn der Workload-Anbieter beispielsweise dem Bereitsteller die Verwendung eines Registrierungsspeegels oder eines privaten zulassen Container Registry möchte, ist es möglich, die Registrierung und die Pull-Anmeldedaten dynamisch zu überschreiben. Diese Bemühungen müssen zwischen demjenigen, der die Arbeitslast bereitstellt, und demjenigen, der sie einsetzt, koordiniert werden. Weitere Informationen finden Sie unter Dynamische Registry-Referenz verwenden.
Führen Sie die folgenden Schritte aus, um die Base64 verschlüsselte Archivdatei. Der Base64 Die Ausgabe erfolgt im compose.b64 Datei. Wechseln Sie in das Verzeichnis <COMPOSE_Folder> und führen Sie die folgenden Befehle
aus:
tar czvf compose.tgz docker-compose.yml
base64 -w0 compose.tgz > compose.b64
Stellen Sie sicher, dass die erstellte TGZ-Datei nur Verzeichnisse und normale Dateien enthält. Links oder Pipes werden nicht unterstützt.
Kopieren Sie den Inhalt von compose.b64 als Wert von 'compose-> archive'.
compose:
archive: <paste the content of compose.b64 >
Für das hier aufgeführte Beispiel wird eine Ausgabe wie die folgende zurückgegeben:
compose:
archive: H4sIAKOFmGIAA+2RTW6DMBBGs84pRuyB8Q8k+DIRwZOGtmBkkyrcvhgnLVVV1EWkqhJv4ZHt8ednWZvqhWxcmaYzjpKhed08HETMpQRfd3k2VeRhPpEJCUxymTPkIuOALBOIG8DHq3zn4vrSjiqdLY/nsv+xb2w7nRZywlPgo/4THNm3uiKntgCWdO1aowmZnwLUTflECpwo8Jpu9NyZ2zvQgdADFEudoXyQzSu+fPPzseSvedo6qjV7mDa2anZbdH8totL6somtUlvX8K4SJshDsFKU2NmFvAZuMc9U37wceeys+Y6BI8Fi6+6vxK5RS+YFDh6RNu//tuVlZWVJd4BcjKckQAIAAA=
Unterabschnitt play
Im play Im Unterabschnitt können Sie die Arbeitslast definieren durch Pod-Deskriptoren. Jeder Pod kann eine oder mehrere Containerdefinitionen
enthalten. Beschreibungen können auf eine der folgenden Weisen bereitgestellt werden:
-
Im einfachen YAML-Format im Unterabschnitt
resourcesvonplay. Dieser Abschnitt ist ein Array von Deskriptoren und unterstützt zwei Deskriptortypen: Pods und ConfigMaps.Das folgende Beispiel veranschaulicht, wie der Abschnitt
resourcesverwendet wird:workload: | type: workload play: resources: - apiVersion: v1 kind: Pod metadata: name: busybox spec: containers: - name: main image: ... command: - printenv envFrom: - configMapRef: name: contract.config.map optional: false restartPolicy: NeverDas folgende Beispiel veranschaulicht die Verwendung von
initcontainersmit dem Abschnittresources:workload: | type: workload play: resources: - apiVersion: v1 kind: Pod metadata: name: busybox spec: initContainers: - name: attest image: ... volumeMounts: - mountPath: /var/hyperprotect name: datavolume containers: - name: main image: ... command: - printenv envFrom: - configMapRef: name: contract.config.map optional: false restartPolicy: Never -
Im
archiveUnterabschnitt vonplay, das Archiv ist ein Base64 codierte, gzippte TAR-Datei. Die Pods oder ConfigMaps werden als YAML-Dateien auf der höchsten Ebene in dieser TAR-Datei dargestellt. Die Datei kann auch zusätzliche Dateien enthalten und alle Dateien werden in das Host-Dateisystem extrahiert, bevor die Pods gestartet werden. Das aktuelle Arbeitsverzeichnis ist das Verzeichnis, in das die Dateien extrahiert wurden, sodass es möglich ist, einen Datenträgermount mit einem relativen Pfad zu verwenden, um die Dateien oder Verzeichnisse aus der YAML-Datei anzuhängen.Beispiel:
workload: | type: workload play: archive: ${COMPOSE_VALUE} auths: us.icr.io: username: iamapikey password: Eqx0TS.... volumes: test-volume: mount: /var/hyperprotect seed: "workload_phrase" filesystem: ext4 -
In einem Vorlagenformat im Unterabschnitt
templatesvonplay. Dieser Abschnitt ist ein Array von Deskriptoren im YAML-Format. Pods oder ConfigMaps können variable Punkte (POV) aufweisen, die zum Zeitpunkt der Erstellung der Deskriptoren nicht bekannt sind. Diese POVs können als Vorlagen dargestellt werden und die Werte werden zum Zeitpunkt der Bereitstellung aus den Informationen im Vertrag vervollständigt. Wir verwenden Go-Vorlagen als Vorlagensyntax, die mit der für Helm-Diagrammeidentisch ist, sodass Vorlagen problemlos mit k8sausgetauscht werden können. Die folgendenBuilt-In-Objekte werden unterstützt:- Umgebung: Dieses Objekt enthält die Umgebungsvariablen, die zwischen der Workload und dem Umgebungsabschnitt zusammengeführt wurden. Das Objekt ist als
{{ .Env }}verfügbar.
Beispiel:
workload: | type: workload auths: docker.io: password: <password> username: test play: templates: - apiVersion: v1 kind: Pod metadata: name: busybox spec: initContainers: - name: initcontainer image: docker.io/library/init-config@sha256:b1306efee704017b0e02efadc011d374063a4e9c47b86bdc57744fc3f0666383 containers: - name: main image: "{{ .Env.REGISTRY }}/hpse-docker-busybox-s390x@sha256:732efa374f1e6c964caeacab0bcb370385ee386041a14d4a32176462e3f75c7b" command: - printenv envFrom: - configMapRef: name: contract.config.map optional: false restartPolicy: Never env: | type: env logging: logRouter: hostname: 34be57c7-6ff2-903921e90ab9.ingress.jp-tok.logs.cloud.ibm.com iamApiKey: <iamApiKey of the service instance> / xxxx port: 443 env: REGISTRY: docker-io/testDer Ausdruck
{{ .Env REGISTRY }}referenziert die UmgebungsvariableREGISTRY, die in diesem Beispiel im Abschnittenvdes Vertrags definiert ist.Die Vorlagen müssen gültig YAMLsein, daher muss ein Ersetzungsausdruck mit Escapezeichen versehen werden, wenn er als erster Teil einer Zeichenfolge angezeigt wird. Andernfalls kollidiert es mit dem Blockzuordnung Syntax. Dies unterscheidet sich von Helm-Vorlagen, bei denen Ausdrücke auf die Textdarstellung des Dokuments und nicht auf die Modelldarstellung angewendet werden.
- Umgebung: Dieses Objekt enthält die Umgebungsvariablen, die zwischen der Workload und dem Umgebungsabschnitt zusammengeführt wurden. Das Objekt ist als
Umgebungsvariablen
Im Vertrag können Sie Umgebungsvariablen in den Abschnitten workload und env definieren. Beide Variablensets werden mit workload zusammengeführt, die Vorrang haben. Pods verwenden das Konzept einer
ConfigMap zum Definieren der Konfiguration, sodass HPCR die zusammengeführten Umgebungsabschnitte als spezielle ConfigMap mit dem Namen contract.config.map darstellt. Im folgenden Beispiel werden alle Umgebungsvariablen aus dem Vertrag in den Container angehängt:
apiVersion: v1
kind: Pod
metadata:
name: busybox
spec:
containers:
- name: main
image: ...
command:
- printenv
envFrom:
- configMapRef:
name: contract.config.map
optional: false
restartPolicy: Never
Pod-Kommunikation
-
Container zu Container
Container innerhalb eines Pods kommunizieren miteinander über
localhost. Jeder Container muss auf einem anderen Port lauschen, da sie sich die IP-Adresse teilen. -
Pod zu Host
Normalerweise muss ein Pod mindestens einen seiner Container dem Host aussetzen, damit der Container über die IP-Adresse auf dem Host über einen zugeordneten Port zugänglich ist. Für diesen Anwendungsfall verwenden Sie die
hostPortFunktion auf einem Container. Beachten Sie, dass dies in der Welt von „ Kubernetes “ keine gute Praxis ist, in der stattdessen ein Dienst verwendet würde.Geben Sie sowohl
hostPortals auchcontainerPortexplizit an. Wenn Sie nurcontainerPortangeben, werden Ports nicht gebunden.Beispiel:
apiVersion: v1 kind: Pod metadata: name: nginx-with-busybox spec: containers: - image: ... name: frontend ports: - containerPort: 80 hostPort: 80 volumeMounts: - mountPath: /etc/nginx name: local-frontend readOnly: true - command: - httpd - -vv - -f - -p - "8080" - -h - /www image: ... name: backend volumeMounts: - mountPath: /www name: local-backend readOnly: true volumes: - hostPath: path: ./www type: Directory name: local-backend - hostPath: path: ./nginx type: Directory name: local-frontend -
Pod zu Pod
Um von einem Pod zu einem anderen zu gelangen, machen Sie einen
hostPortauf dem Zielpod zugänglich. Der Quellen-Pod kann dann eine Anfrage an den Host am verfügbar gemachten Port stellen, um den Ziel-Pod abzurufen.Der Quell-Pod kann die IP-Adresse des Hosts mit dem folgenden Befehl finden:
ip route | awk '/default/ { print $3 }'
Datenträger
Bei Hyper Protect Container Runtime werden Datenträger im Abschnitt volumes des Vertrags verwaltet. Basierend auf diesen Informationen verschlüsselt und mountet HPCR externe Blockgeräte auf dem Host. Verwenden Sie zum Anhängen dieser Datenträger an den Pod die Mountoption hostPath auf dem Datenträger.
Beispiel:
apiVersion: v1
kind: Pod
metadata:
name: busybox
spec:
containers:
- name: main
image: ...
volumeMounts:
- name: test-volume
readOnly: true
mountPath: /fromHost
volumes:
- name: test-volume
hostPath:
path: /var/hyperprotect
type: Directory
restartPolicy: Never
Das Feld volumes definiert hier die Daten auf dem Host, die an den Pod angehängt werden. Es unterscheidet sich von volumes im HPCR-Vertrag.
Unterabschnitt images
Docker hat das Ausscheiden von Docker Content Trust (DCT ) bekannt gegeben. Da DCT auf dem veralteten Notary v1 Framework aufbaut, das nicht mehr aktiv gepflegt wird, wird es nicht als zukunftsfähige oder nachhaltige Lösung für die Bildsignierung und -verifizierung angesehen. Daher werden die Kunden ermutigt, von DCT abzurücken und OCI-konforme Bildsignier- und Verifizierungstechnologien zu verwenden, die mit den aktuellen Sicherheitsstandards für die Lieferkette übereinstimmen. Sie können Container-Images auf IBM Cloud Container Registry (ICR) migrieren. ICR ist in den Red Hat Signing Service (RHS ) als vertrauenswürdige Signierquelle integriert und bietet ein herstellergestütztes Vertrauensmodell sowie eine Anpassung an die aktuellen Best Practices für Containersicherheit und Lieferketten. Weitere Informationen finden Sie unter Ausscheiden von Docker Content Trust.
Der Unterabschnitt images ist nur für ein signiertes Image gedacht.
Von Docker Compose beschriebene Images
Das Container-Image, das in der Docker Compose-Datei aufgelistet ist, kann mit Docker Content Trust (DCT) signiert oder nicht signiert werden.
Das folgende Beispiel zeigt ein Bild URL:
<container registry>/<username or namespace>/<image name>
eg- us.icr.io/mynamespace/my-haproxy:
Im Folgenden finden Sie ein Beispiel für eine Notar- URL:
notary: "https://notary.us.icr.io"
publicKey ist der entsprechende öffentliche Schlüssel, mit dem das Image mit DCT signiert wird. Verwenden Sie den folgenden Befehl, um den öffentlichen Schlüssel abzurufen:
cat ~/.docker/trust/tuf/us.icr.io/<username>/<imagename>/metadata/root.json
Der folgende Ausschnitt dient als Beispiel:
images:
dct:
us.icr.io/mynamespace/my-haproxy:
notary: "https://notary.us.icr.io"
publicKey: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpRENDQVM2Z0F3SUJBZ0lSQUxCMXBPYlpEQlRRc09GSFlxazMzaWd3Q2dZSUtvWkl6ajBFQXdJd0tqRW8KTUNZR0ExVUVBeE1mZFhNdWFXTnlMbWx2TDNCeVlXSm9ZWFF4TWpNdmJYa3RhR0Z3Y205NGVUQWVGdzB5TWpBMApNVE14TURFd01ETmFGdzB6TWpBME1UQXhNREV3TUROYU1Db3hLREFtQmdOVkJBTVRIM1Z6TG1samNpNXBieTl3CmNtRmlhR0YwTVRJekwyMTVMV2hoY0hKdmVIa3dXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBU1AKWGsrelE2MlFZNjI3MWQ1cTBMZHY3SGc3QzZkMGZOUlRsQmJXekhOWWFDZzlpU0piYnVNdjVBY0JmMjlqQi83eApqYzhzVitxMksyemtkTHV4QWxGWm96VXdNekFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJCkt3WUJCUVVIQXdNd0RBWURWUjBUQVFIL0JBSXdBREFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUIzd0JTa0IxaXAKZHZZYlBMbFBmS3RZT0hsYnZzUllKa0FZM2hnY0xuNWhwQUloQUt6cmhsU3p4K1I5bmdtMTBlZVkyaFNCRmgrawpMWHp6SFkwaktTVzhyM1FhCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
Für ein nicht signiertes Image ist kein Eintrag im Unterabschnitt 'images' erforderlich. Für nicht signierte Images ist jedoch ein Digest erforderlich. Führen Sie die folgenden Schritte aus, um die Zusammenfassung zu erhalten:
- Melden Sie sich beim Container Registry-Dashboard an.
- Öffnen Sie das Bild.
- Klicken Sie auf Tag und anschließend auf Digest.
Nachdem Sie den Digest abgerufen haben, fügen Sie diesen Digest zur Datei docker-compose.yaml hinzu. Sehen Sie sich das folgende Beispiel an:
services:
<imagename>:
image: s390x/redis@sha256:db467ab5c53bdeef65762a7534e26fecb94a0f218bd38afd2eaba1a670c472b1
Durch Pod-Deskriptoren beschriebene Images
Containerbilder, die durch Pod-Deskriptoren beschrieben werden, können von Red Hat Simple Signing validiert werden.
Wenn das Image von einem Digest referenziert wird, lässt der Service seine Verwendung ohne zusätzliche Prüfungen zu.
Für Images ohne Digest muss ein GPG-Schlüssel validiert werden. Der Schlüssel wird in einem Base64-codierten Binärformat übertragen, das erstellt werden kann. Sehen Sie sich das folgende Beispiel an:
gpg -a --export ${KEY_ID}|base64 -w0
Dieser Schlüssel wird übermittelt durch die rhs Unterabschnitt des images Abschnitt. Dieser Abschnitt ist eine Map mit der Bildkennung als Schlüssel und dem GPG-Schlüssel im Feld publicKey:
Beispiel:
images:
rhs:
OCI-image-identifier:
publicKey: abcdef
Der Unterabschnitt workload- volumes
Der Abschnitt volumes muss im Vertrag nur angegeben werden, wenn zum Zeitpunkt der Erstellung ein Datenvolumen an die Instanz angehängt wird. Die in diesem Abschnitt bereitgestellten Informationen werden verwendet, um das angehängte
Datenvolumen (vom Benutzer bereitgestellt) zu mounten, und werden später mithilfe der in den Abschnitten " workload " und " env " bereitgestellten "Seeds" verschlüsselt. Sie können
einen beliebigen Pfad für das Feld "mount" angeben. Der vom Benutzer bereitgestellte Pfad wird intern zum Mounten des Datenvolumens verwendet. Der im Vertrag angegebene Mount-Pfad muss mit dem Pfad übereinstimmen, der im Abschnitt
"Volumes" der docker-compose.yaml-Datei angegeben ist, damit alle Daten, die mit der Container-Arbeitslast verbunden sind, in diesem Datenvolumen gespeichert werden.
Der Unterabschnitt volumes unterstützt die automatische Verschlüsselung des Datenvolumens mit vom Benutzer bereitgestellten Seedwerten. Wenn ein Datenträger an die Hyper Protect Virtual Servers-Instanz angehängt ist, wird er automatisch
mit den Seedwerten verschlüsselt, die über das Feld "seed" in den volumes-Unterabschnitten des Vertrags bereitgestellt werden. Daher müssen zwei Seedwerte bereitgestellt werden, einer über den Abschnitt workload (durch die Workloadpersona) und der andere über den Abschnitt env (durch die Bereitstellerpersona). Diese beiden Seedwerte werden intern in UTF8-Sequenzen konvertiert und anschließend verkettet. Später wird der Hash (SHA256)
der verketteten Sequenz als Hexdigest berechnet, der als LUKS-Kennphrase zum Verschlüsseln des Datenträgers verwendet wird.
Derzeit müssen die Seeds env und workload eine Mindestlänge von 3 Zeichen aufweisen. Ab März 2026 wird dieses Minimum auf 15 Zeichen erhöht. Alle Seed-Werte, die
kürzer als 15 Zeichen sind, können nach März 2026 zu Fehlern oder fehlgeschlagenen Bereitstellungen führen. Um Störungen zu vermeiden, aktualisieren Sie alle Seed-Werte so bald wie möglich auf eine Länge
von mindestens 15 Zeichen. Die Regeln werden im folgenden Abschnitt definiert.
Ab März 2026 müssen Sie diese Regeln befolgen, um Saatgut zu erzeugen:
- Keine Leerzeichen erlaubt.
- Muss mindestens
15Zeichen enthalten. Nachfolgend sind die zulässigen Zeichen aufgeführt:- Kleinbuchstaben
(a-z) - Großbuchstaben
(A-Z) - Zahlen
(0-9) - Sonderzeichen
!@#$%^&*(),.?":{}|<>_-
- Kleinbuchstaben
Mit dem folgenden Befehl können Sie den Hexdigest überprüfen:
echo -n "seed1seed2" | sha256sum
Hier erfahren Sie, wie der "Seed" im Workloadabschnitt des Vertrags bereitgestellt werden kann. Weitere Informationen dazu, wie die Eingabe "Seed" über den Abschnitt env bereitgestellt wird, enthält der Abschnitt
env. Es ist obligatorisch, beide Seeds für die Verschlüsselung bereitzustellen. Die Verschlüsselung schlägt fehl, wenn nur einer der Seeds bereitgestellt wird und die Instanz beendet wird.
Durch die Integration mit können Sie Ihren gespeicherten Daten ein höheres Hyper Protect Crypto Services Maß an Verschlüsselungsschutz und -kontrolle hinzufügen. Beginnend mit können Sie ibm-hyper-protect-container-runtime-1-0-s390x-11 verwenden, Hyper Protect Crypto Services um einen Zufallswert als dritten Startwert zu generieren und diesen mit Ihrem Root-Schlüssel zu verpacken. Die LUKS-Kennphrase wird mit drei Seedwerten generiert-dem Seedwert in der
Metadatenpartition und den beiden Seedwerten aus dem Vertrag. Weitere Informationen finden Sie im Abschnitt Eigene Daten schützen.
Das folgende Snippet ist ein Beispiel für den Datenträgerabschnitt:
volumes:
test:
filesystem: ext4
mount: /mnt/data
seed: "workload_phrase"
Beginnend mit der HPCR-Image-Version wird bei Hyper Protect Virtual Servers neuen VPC-Instanzen das ibm-hyper-protect-container-runtime-1-0-s390x-9 Datenvolumen in zwei Teile partitioniert. Die erste Partition ( 100Mib ) ist für
interne Metadaten reserviert; die zweite Partition bleibt als Datenvolumen für die Arbeitslast erhalten. Es werden nur neue Datenträger partitioniert und Sie können den partitionierten Datenträger nicht mit einer älteren Version des HPCR-Image
verwenden. Die Bereitstellung mit einem vorhandenen verschlüsselten Datenträger funktioniert ebenfalls. Der Unterschied besteht darin, dass der vorhandene Datenträger nicht partitioniert wird und Sie auch zu einem älteren Image mit diesem
Datenträger zurückkehren können.
Ab ibm-hyper-protect-container-runtime-1-0-s390x-12 können der Bereitsteller und der Provider das Feature "Rolling of Seeds" verwenden. Es wird eine Option bereitgestellt, um die Samen zu rollen oder zu rotieren, um
die Sicherheitslage zu erhöhen, oder wenn der Samen beeinträchtigt wird. Wenn der Bereitsteller und/oder der Provider die Seedwerte übertragen möchten, müssen die aktuellen Seedinformationen im Parameter previousSeed und die
neuen Seedinformationen im Parameter seed angegeben werden.
Das folgende Snippet ist ein Beispiel für den Datenträgerabschnitt:
volumes:
test:
filesystem: ext4
mount: /mnt/data
seed: "workload_phrase1"
previousSeed: "workload_phrase"
Ab ibm-hyper-protect-container-runtime-1-0-s390x-13 können Sie mehrere Datenträger zuordnen, wenn Sie die virtuelle Serverinstanz starten. Volumes, die angehängt werden, während die Instanz ausgeführt wird, werden ignoriert.
Das folgende Snippet ist ein Beispiel für den Datenträgerabschnitt:
volumes:
test1:
filesystem: "ext4"
mount: "/mnt/data"
seed: "seed_value_with_minimum_15_characters"
test2:
filesystem: "ext4"
mount: "/mnt/test2"
seed: "seed_value_with_minimum_15_characters"
test3:
filesystem: "ext4"
mount: "/mnt/test3"
seed: "seed_value_with_minimum_15_characters"
Abschnitt env
Der Abschnitt env ist auch einer der wichtigsten Abschnitte eines Vertrags. Der Abschnitt env eines Vertrags befasst sich mit Informationen, die für die Cloudumgebung spezifisch und der Workloadperson nicht bekannt
sind. Dieser Abschnitt wird von der Bereitstellerpersona erstellt.
Die Unterabschnitte für den Abschnitt env sind:
type: Umwelt Dieser Unterabschnitt ist obligatorisch.loggingDieser Unterabschnitt ist obligatorisch.volumesDieser Unterabschnitt darf nur verwendet werden, wenn ein Datenträger angehängt ist.signingKeyDieser Unterabschnitt darf nur verwendet werden, wenn Sie eine Vertragssignatur verwenden wollen.envIn diesem Unterabschnitt werden Werte fürenv-Variablen angegeben, wenn sie vom Workload-Provider definiert werden.
Unterabschnitt logging
ICL
Für diesen Abschnitt ist mindestens der Unterabschnitt logRouter erforderlich. Weitere Informationen finden Sie unter Logging für Hyper Protect Virtual Servers für VPC.
Das folgende Snippet ist ein Beispiel für den Unterabschnitt ICL:
env:
logging:
logRouter:
hostname: <host name of the service instance> /
iamApiKey: <iamApiKey of the service instance> / xxxx
port: <port of the service instance(443)
Der Unterabschnitt env- volumes
Lesen Sie den Unterabschnitt workload-volumes des Workloadabschnitts, bevor Sie mit diesem Abschnitt fortfahren. Wie bereits erwähnt, müssen Sie für die automatische Plattenverschlüsselung des angehängten
Datenträgers zwei Seedwerte für Kunden bereitstellen, einen im Unterabschnitt workload- volumes und einen im Unterabschnitt env- volumes. Die Samen können ein beliebiger Zufallstext Ihrer
Wahl sein.
Sehen Sie sich das folgende Beispiel für den Unterabschnitt env- volumes an:
volumes:
test:
seed: "seed_value_with_minimum_15_characters"
Wenn Sie die Funktion "rolling of seeds" verwenden, können Sie das folgende Snippet als Beispiel verwenden:
volumes:
test:
seed: "seed_value_with_minimum_15_characters"
previousSeed: "env_phrase12345"
Wenn Sie mehrere Datenträger verwenden, muss der Implementierer sicherstellen, dass die Datenträger im Voraus erstellt werden, und die Datenträger-ID in der Vertragsdatei angeben. Andernfalls muss der Datenträgername angegeben und der Datenträger mit demselben Namen erstellt werden. Wenn beide nicht angegeben sind, wird der Volume-Schlüssel als Volume-Name betrachtet und das Volume muss mit demselben Namen erstellt werden, während oder bevor die virtuelle Serverinstanz erstellt wird. Der folgende Ausschnitt dient als Beispiel:
env: |
logging:
logRouter:
hostname: 34be57c7-6ff2-903921e90ab9.ingress.jp-tok.logs.cloud.ibm.com
iamApiKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
port: 443
volumes:
test1:
apiKey: "L4SsSE32xxxxxjAgfHCVkdW8xl_CiqMn4Lpc1dzTD"
volumeID: "r006-f7b44467-01af-xxx-xxxx-xxxxxxx"
seed: "seed_value_with_minimum_15_characters"
test2:
apiKey: "L4SsSE32xxxxxjAgfHCVkdW8xl_CiqMn4Lpc1dzTD"
volumeName: "volume2"
seed: "seed_value_with_minimum_15_characters"
test3:
apiKey: "L4SsSE32xxxxxjAgfHCVkdW8xl_CiqMn4Lpc1dzTD"
seed: "seed_value_with_minimum_15_characters"
Dabei gilt:
- Volumenname: Dies ist der Name, den Sie beim Erstellen des Volumes in der VPC angegeben haben.
- Datenträger-ID: Die vom System generierte Datenträger-ID des erstellten Datenträgers.
- Datenträgerschlüssel: Der eindeutige Datenträgername für jeden Datenträger.
Der Datenträger-Schlüssel muss mit dem Schlüssel im Unter abschnitt "Datenträger-Arbeitslast" übereinstimmen.
Wie bereits erwähnt, können Sie eine Integration mit Hyper Protect Crypto Services durchführen, um einen dritten Seed zu generieren und ihn mit Ihrem Rootschlüssel einzuschließen. Beispiel: Weitere Informationen finden Sie im Abschnitt Eigene Daten schützen.
volumes:
test:
kms:
- apiKey: "L4SsSE32xxxxxjAgfHCVkdW8xl_CiqMn4Lpc1dzTD"
crn: "crn:v1:bluemix:public:hs-crypto:us-south:a/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
type: "public"
- apiKey: "L4SsSE32xxxxxjAgfHCVkdW8xl_CiqMn4Lpc1dzTD"
crn: "crn:v1:bluemix:public:hs-crypto:us-south:a/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
type: "private"
seed: "seed_value_with_minimum_15_characters"
apiKey: "**********************"
kmsTimeout: 10
Unterabschnitt signingKey
Weitere Informationen zur Verwendung der signingKey finden Sie unter Vertragssignatur.
Unterabschnitt env
-
Wenn Pod-Deskriptoren im Abschnitt
workloadverwendet werden:Ein Beispiel für das Vorlagenformat finden Sie im Unterabschnitt
play. -
Wenn eine Docker Compose-Datei im Abschnitt
workloadverwendet wird:Wenn die Docker Compose-Datei einen Umgebungsabschnitt enthält, können Sie das folgende Snippet als Beispiel verwenden:
environment: KEY1: "${Value1}" KEY2: "${Value2}"Wenn die docker-compose-Datei einen Umgebungsabschnitt enthält, wie im vorherigen Beispiel gezeigt, können Sie die Werte im Abschnitt
envdes Deployers übergeben. Das folgende Beispiel zeigt, wie die Werte für die Variablenenvangegeben werden:env: value1: "abc" value2: "xyz"
Vertragsverschlüsselung
Sie können den Inhalt eines Vertrags verschlüsseln. Obwohl Sie den Vertrag auch ohne Verschlüsselung über die Benutzerdaten übergeben können, wird empfohlen, den Vertrag zu verschlüsseln. Es wird auch empfohlen, dass Sie zunächst versuchen, einen nicht verschlüsselten Vertrag für Testzwecke zu verwenden, und nachdem er wie erwartet funktioniert, können Sie einen verschlüsselten Vertrag für Ihre Produktionsumgebung verwenden.
Sie können entscheiden, welche Abschnitte des Vertrags Verschlüsselung erfordern. Sie können beispielsweise nur den Abschnitt workload verschlüsseln oder nur den Abschnitt env verschlüsseln.
Wenn die Hyper Protect Virtual Servers for VPC-Instanz bootet, entschlüsselt das Bootladeprogramm den Vertrag. Er nimmt den Wert jedes Abschnitts im Vertrag und entschlüsselt ihn, wenn er verschlüsselt ist. Wenn er feststellt, dass ein Abschnitt nicht verschlüsselt ist, betrachtet er ihn als unverschlüsselt. Sie müssen den öffentlichen Schlüssel verwenden, um den Vertrag zu verschlüsseln, bevor Sie ihn als Eingabe über den Abschnitt Benutzerdaten übergeben.
Die Verschlüsselungs- und Beglaubigungszertifikate werden vom Zwischenzertifikat IBM signiert. Das Zwischenzertifikat IBM wird von IBM Digicert intermediate cert signiert, das wiederum von DigiCert Trusted Root G4 signiert wird. Weitere Informationen zu den Zertifikaten finden Sie unter DigiCert "Trusted Root Authority Certificates ".
Verschlüsselungszertifikat herunterladen und öffentlichen Schlüssel extrahieren
- Laden Sie das Zertifikat herunter. In der folgenden Tabelle sind die Ablaufdaten der Verschlüsselungszertifikate sowie die Daten, an denen die Images als veraltet gelten, je nach Version des Images aufgeführt.
| Imageversion | Zertifikatlink | Ablaufdatum des Verschlüsselungszertifikats | Einstellung der Unterstützung |
|---|---|---|---|
ibm-hyper-protect-container-runtime-1-0-s390x-29 |
certificate |
|
|
ibm-hyper-protect-container-runtime-1-0-s390x-28 |
certificate |
|
|
ibm-hyper-protect-container-runtime-1-0-s390x-26 |
certificate |
|
|
ibm-hyper-protect-container-runtime-1-0-s390x-25 |
certificate |
|
|
Hinweis
- Veraltet- Sie können das Image verwenden, um eine Instanz über die IBM Cloud CLI zu erstellen. Der Status "veraltet" kann von der Verwendung des Bildes abhalten, bevor der Status auf "veraltet" geändert wird. Der Image-Katalog enthält immer die beiden neuesten Image-Versionen: n und n-1. Wenn eine neue Version ( n+1 ) verfügbar ist, wird die älteste Version ( n-1 ) vom System veraltet.
- Veraltet: Nachdem das mit dem Image verknüpfte Zertifikat abgelaufen ist, ist das Image nicht mehr für die Bereitstellung einer Instanz verfügbar.
- Laden Sie immer die Verschlüsselungszertifikate herunter, die dem Bild entsprechen, und verschlüsseln Sie die Verträge.
Sie können auch den Befehl IBM Cloud image list verwenden, um den Status der veralteten oder veralteten Images zu überprüfen.
Informationen zum Abrufen des Status des Image finden Sie in der Dokumentation zum Befehl 'image list'.
- Validieren Sie das Verschlüsselungszertifikat, indem Sie den Anweisungen im Thema "Validierung des Vertragsverschlüsselungszertifikats " folgen.
Verschlüsselten Abschnitt workload eines Vertrags erstellen
Der Wert eines Abschnitts in einem Vertrag kann einfacher Text oder verschlüsselt sein. Führen Sie die folgenden Schritte auf einem Ubuntu-System aus, um den in einem Vertrag verwendeten Abschnitt "Arbeitslast" zu verschlüsseln:
-
Erstellen Sie die Datei
docker-compose.yamlauf der Basis Ihrer Workloadanforderungen. Beispiel:services: redisnode01: image: s390x/redis@sha256:db467ab5c53bdeef65762a7534e26fecb94a0f218bd38afd2eaba1a670c472b1 ports: - "6379:6379"Weitere Informationen finden Sie unter Übersicht über Docker Compose.
-
Erstellen Sie den Workloadabschnitt des Vertrags und fügen Sie den Inhalt in der Datei
workload.yamlhinzu.Im Folgenden finden Sie ein Beispiel
workload.yamlfür:type: workload auths: us.icr.io: password: ${API_KEY} username: iamapikey compose: archive: ${COMPOSE_VALUE} volumes: test0: mount: "/mnt/data" seed: "workload_seed12" filesystem: "ext4" env: key: "value" -
Exportieren Sie den vollständigen Pfad der Datei
workload.yamlundibm-hyper-protect-container-runtime-1-0-s390x-29-encrypt.crt:WORKLOAD="<PATH to workload.yaml>" CONTRACT_KEY="<PATH to ibm-hyper-protect-container-runtime-1-0-s390x-29-encrypt.crt>" -
Verwenden Sie den folgenden Befehl, um ein zufälliges Passwort zu erstellen. Der Vertrag wird durch symmetrisches AES mit einem zufälligen Passwort verschlüsselt.
PASSWORD="$(openssl rand 32 | base64 -w0)" -
Beginnend mit OpenSSL 3.0 ist der Unterbefehl OpenSSL
rsautlveraltet und wird durch den Unterbefehlpkeyutlersetzt. Verwenden Sie einen der folgenden Befehle, um das Passwort mitibm-hyper-protect-container-runtime-1-0-s390x-29-encrypt.crtzu verschlüsseln:- Verwendung von
rsautl(veraltet):
ENCRYPTED_PASSWORD="$(echo -n "$PASSWORD" | base64 -d | openssl rsautl -encrypt -inkey $CONTRACT_KEY -certin | base64 -w0)"-
Verwendung von
pkeyutl(empfohlen):ENCRYPTED_PASSWORD="$(echo -n "$PASSWORD" | base64 -d | openssl pkeyutl -encrypt -inkey $CONTRACT_KEY -certin -pkeyopt rsa_padding_mode:pkcs1 | base64 -w0)"
- Verwendung von
-
Verwenden Sie den folgenden Befehl, um die Datei
workload.yamlmit einem automatisch generierten Kennwort zu verschlüsseln:ENCRYPTED_WORKLOAD="$(echo -n "$PASSWORD" | base64 -d | openssl enc -aes-256-cbc -pbkdf2 -pass stdin -in "$WORKLOAD" | base64 -w0)" -
Verwenden Sie den folgenden Befehl, um den verschlüsselten Abschnitt des Vertrags abzurufen:
echo "hyper-protect-basic.${ENCRYPTED_PASSWORD}.${ENCRYPTED_WORKLOAD}" -
Rufen Sie die Ausgabe aus Schritt 7 ab und fügen Sie sie zur Datei
user-data.yamlhinzu.workload: hyper-protect-basic.js7TGt77EQ5bgTIKk5C0pViFTRHqWtn..............Das Präfix
hyper-protect-basicist obligatorisch.
Verschlüsselten Abschnitt env eines Vertrags erstellen
Führen Sie die folgenden Schritte auf einem Ubuntu-System aus, um den in einem Vertrag verwendeten env-Abschnitt zu verschlüsseln:
-
Erstellen Sie den
env-Abschnitt des Vertrags und fügen Sie den Inhalt in der Dateienv.yamlhinzu.Im Folgenden finden Sie ein Beispiel für
env.yaml:type: env logging: syslog: hostname: ${RSYSLOG_SERVER_IP} port: 6514 server: "${RSYSLOG_SERVER_ROOT_CA}" cert: "${RSYSLOG_CLIENT_CA}" key: "${RSYSLOG_CLIENT_KEY}" volumes: test0: seed: "stsolutiontest1" -
Exportieren Sie den vollständigen Pfad der Datei
env.yamlundibm-hyper-protect-container-runtime-1-0-s390x-29-encrypt.crt:ENV="<PATH to env.yaml>" CONTRACT_KEY="<PATH to ibm-hyper-protect-container-runtime-1-0-s390x-29-encrypt.crt>" -
Verwenden Sie den folgenden Befehl, um ein zufälliges Passwort zu erstellen:
PASSWORD="$(openssl rand 32 | base64 -w0)" -
Beginnend mit OpenSSL 3.0 ist der Unterbefehl OpenSSL
rsautlveraltet und wird durch den Unterbefehlpkeyutlersetzt. Verwenden Sie einen der folgenden Befehle, um das Passwort mitibm-hyper-protect-container-runtime-1-0-s390x-29-encrypt.crtzu verschlüsseln:rsautl(veraltet):
ENCRYPTED_PASSWORD="$(echo -n "$PASSWORD" | base64 -d | openssl rsautl -encrypt -inkey $CONTRACT_KEY -certin | base64 -w0)"-
pkeyutl(empfohlen):ENCRYPTED_PASSWORD="$(echo -n "$PASSWORD" | base64 -d | openssl pkeyutl -encrypt -inkey $CONTRACT_KEY -certin -pkeyopt rsa_padding_mode:pkcs1 | base64 -w0)"
-
Verwenden Sie den folgenden Befehl, um
env.yamlmit einem automatisch generierten Kennwort zu verschlüsseln:ENCRYPTED_ENV="$(echo -n "$PASSWORD" | base64 -d | openssl enc -aes-256-cbc -pbkdf2 -pass stdin -in "$ENV" | base64 -w0)" -
Verwenden Sie den folgenden Befehl, um den verschlüsselten Abschnitt des Vertrags abzurufen:
echo "hyper-protect-basic.${ENCRYPTED_PASSWORD}.${ENCRYPTED_ENV}" -
Informationen zum Verschlüsseln des Workloadabschnitts finden Sie unter Verschlüsselten
workload-Abschnitt eines Vertrags erstellen. -
Rufen Sie die Ausgabe von Schritt 6 ab und fügen Sie sie zur Datei
user-data.yamlhinzu.env: hyper-protect-basic.VWg/5/SWE+9jLfhr8q4i.........
Vertragsunterschrift
Die Vertragsunterschrift ist eine optionale Funktion, die Sie für den Vertrag verwenden können. Sie können einen Vertrag unterzeichnen, bevor er als Eingabe übergeben wird. Sie können auch das Vertragsende bei der Unterzeichnung festlegen. Verträge,
die in Klartext oder verschlüsselt sind, können signiert werden. Die Validierung der Vertragssignatur wird vom Hyper Protect Virtual Servers for VPC-Image durchgeführt. Mit dieser Signaturfunktion soll sichergestellt werden, dass die Abschnitte
workload und env immer zusammen verwendet werden und nicht von einem anderen Anbieter manipuliert werden. Diese Funktion unterstützt auch das Festlegen des Ablaufs für Verträge. Das heißt, wenn die Instanz nach Ablauf
der Signatur gebootet wird, schlägt der Bootvorgang fehl. Die Signatur der Abschnitte workload und env wird als Wert zum Abschnitt envWorkloadSignature hinzugefügt. Im Folgenden sind zwei Abschnitte in
einem Vertrag aufgeführt, die beim Erstellen und Hinzufügen einer Vertragssignatur relevant sind:
envWorkloadSignature: In diesem Abschnitt wird die Unterschrift der anderen Abschnitte des Vertrags hinzugefügt. Dieser Abschnitt ist für einen nicht unterzeichneten Vertrag nicht erforderlich.signingKey: Dieser Unterabschnitt muss dem Abschnittenvdes Vertrags hinzugefügt werden. Dieser Unterabschnitt enthält den Wert des benutzergenerierten öffentlichen Schlüssels, dessen entsprechender privater Schlüssel zur Erstellung der Vertragssignatur verwendet wurde. Ein öffentlicher Schlüssel oder ein Zertifikat kann auch als Base64-Zeichenfolge analysiert werden.
Führen Sie die folgenden Schritte auf einem Ubuntu-System aus, um die Vertragsunterzeichnung zu erstellen:
-
Verwenden Sie den folgenden Befehl, um ein Schlüsselpaar zum Signieren des Vertrags zu erstellen (beachten Sie, dass "test1234" die Kennphrase zum Generieren von Schlüsseln ist; Sie können Ihre eigene verwenden):
openssl genrsa -aes128 -passout pass:test1234 -out private.pem 4096 openssl rsa -in private.pem -passin pass:test1234 -pubout -out public.pem -
Der folgende Befehl ist ein Beispiel dafür, wie Sie den Signierschlüssel abrufen:
key=$(awk -vRS="\n" -vORS="\\\n" '1' public.pem) echo ${key%\\n} -
Optional, wenn Sie den Signaturschlüssel weitergeben möchten als Base64:
key=$(cat public.pem | base64 -w 0) echo $key -
Optional können Sie die folgenden Schritte ausführen, wenn Sie das Vertragsende aktivieren möchten:
- Verwenden Sie den folgenden Befehl, um eine Zertifikatsanforderung zu generieren:
openssl req -new -key private.pem -passin pass:test1234 -out csr.pem- Der Befehl generiert das Zertifikat.
- Verwenden Sie den folgenden Befehl, um einen privaten Schlüssel für CA zu generieren:
openssl genrsa -out personal_ca.key 2048- Erstellen Sie ein selbstsigniertes CA-Zertifikat mit dem folgenden Befehl:
openssl req -new -x509 -key personal_ca.key -out personal_ca.crt- Der folgende Befehl signiert CSR mit einem selbstsignierten CA-Zertifikat zusammen mit der Anzahl der Tage, für die das Zertifikat gültig sein soll. Das Enddatum des generierten Zertifikats ist das Ablaufdatum des Vertrags:
openssl x509 -req -in csr.pem -CA personal_ca.crt -CAkey personal_ca.key -CAcreateserial -out certificate.pem -days 365 - Der folgende Befehl ist ein Beispiel zum Abrufen des Zertifikats:
certificate=$(awk -vRS="\n" -vORS="\\\n" '1' certificate.pem) echo ${certificate%\\n} - Optional können Sie den folgenden Befehl als Beispiel verwenden, um das Zertifikat abzurufen in Base64 Format:
certificate=$(cat certificate.pem | base64 -w 0) echo $certificate -
Erstellen Sie die Datei
env.yaml. Sehen Sie sich das folgende Beispiel an:- Wenn
signingkeyein öffentlicher Schlüssel ist:
env: | type: env logging: logRouter: hostname: 34be57c7-6ff2-903921e90ab9.ingress.jp-tok.logs.cloud.ibm.com iamApiKey: <iamApiKey of the service instance> / xxxx port: 443 volumes: test: seed: "seed_value_with_minimum_15_characters" signingKey: "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvLaeSA8Nc3p99HNUMwon\n5lMMALAsIxRRpWUaEZ5IcUky2sgCi/rSmxU2sm6FK/BmCftk33f5W2BsYHdY9R/0\nELZ9A4POQcJsPF3ronU2QHwnRjcqYuUFXmf1VqfPPLpELriFNoCb2FN2zCa+VUmu\n+fGhroZ3Fr9kBPwJhGr917E5jeCQ+MzsGkulcTvr0SfvThiZQQ/KlU0R35ThamF3\n8C0F5IQBpqDUwDFmWvD5lF2SmprpluDBFEj8LLfLxvW9M2Qwku6nGUnnFReg3vNH\n7IF0SRr1K1AdO5hEmevCdyG9hgTdUY6dXcjntiN/kbqXErILknvzDnb4jyPZZRdK\ndrOzVt8hjbdmkS396SrMFtA++QrV3GNZl5zCscpn6d8S7BEA8mDzroo2UAbrypVP\n9l9AmzUnmnPCpZQySUUHoY0xG2vgMSA50CWH7Uwjmpixr02Td4/LU8fE7NWCO6ci\nx4++ANSaxu+uuZ2Pe1OjjgV98r06ZUs38eaxptLZqLpn3N6w8WAJxGwSLapZwNtP\ng2spUXu2Eh/TN5t4/ly5iXOsyIy8IPtTrUPX7rpaaqFZ72P6BJLj3WLEvOG/eF/8\nBTjrsZAjb8YjkO1uGk10IPa63sniZWe5vlm9w9UKy2uGuy6RhWxwoVHRRbfhboQF\nsO20dsVwgTZn8c46HMD2PoMCAwEAAQ==\n-----END PUBLIC KEY----"- Wenn
signingkeyein Zertifikat ist:
env: | type: env logging: logRouter: hostname: 34be57c7-6ff2-903921e90ab9.ingress.jp-tok.logs.cloud.ibm.com iamApiKey: <iamApiKey of the service instance> / xxxx port: 443 volumes: test: seed: "seed_value_with_minimum_15_characters" signingKey: "-----BEGIN CERTIFICATE-----\nMIIFETCCAvkCFBAMxyO6Cl7BNKBGxtlAzHpI2oiNMA0GCSqGSIb3DQEBCwUAMEUx\nCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl\ncm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMjQwMTMwMDM1ODMzWhcNMjQwNTA5MDM1\nODMzWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE\nCgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIICIjANBgkqhkiG9w0BAQEFAAOC\nAg8AMIICCgKCAgEAv5h6i7Fn1DMUM+3AnPPZUNMe1ss3KL/AmUmptwlAPErVoH1k\naiqTUsSNjXctj+nk95I+e2nugw/HlaVT1eRgEtvjssheXKboFn+zW/i31Nq9USgQ\nZA325VtchYlgJLXMPaH/ukBUr0UI4LnjC/dNdAQzKwWPNF2Jlv5wKX8OBVOQO9Df\nExVmcEkKDoh0nZk5eOA8vzJGhfr8TvQx9FQFsP4OXTwQgcdZV26mLm0bMkqEt3o5\n8OSpisqNGY1XnMHjOWNqSbErkpbIKEFAQSnWmzEvJdHsQX+7eTF7CisHJREseT4s\nUSuIFBZKXbS3qq6EL/EYviu0EGnY/rkJJcIRb8hycqHRgoITT2bWT7PSMUyXoX3G\nVKfp/xKFhkYzoRDSb5S0lh8sugmoRkioAkw6G56CP2hablPZRUMmUKceFfOG/k4L\nei8qJtbfQJ9BlCNRPpjqY3sGSdeXI4zefyQ8xxcus9Sl5wXZV86lz2lO/fz3Cvpd\n0eKvfv5uXyvF3O36lrlEERmSukaZYaEJECjxOUeafc7E1DVyIaMpc2SOum1crwMG\nRKhnU1JShDON0yClnKOlACfjFIpdpEMpE4lLps1x+PXV+x21zGBMUvXYa4xpbyWR\nK1gfMWmuvGOivl9y0mPSIeyJ9R/7bSRAbcYJR4N99TrtWxZU1yQi7HSRV5cCAwEA\nATANBgkqhkiG9w0BAQsFAAOCAgEAg006zJ4ZKwT8moOOl3PdThFUcf8rrIlec9Iy\nqPcWSqt5UTeYLIe58oGhhQmcaIRUOQaib5JqH2ukzqpo+gsJ3zZb3eIn4FB7cKef\nLqaiemOveEe1/qSwAGqMZyZELssiOflhnJdzuYSRWO8DO6Q6JMqQthDcw20budjO\nzP4nhXQqT+s8ljzqSJW77hDbrNAezTz/0SJFDtaMBs5UweX//7/4sXtJ8kBIBSxd\n7y4w8tuuxUaXOtYMjNrJAYLwFVeeO8CFURpbEuv7ABT0k8U4E8C6j4U4Jysx4XVP\nZj36rIAtvctchh0yAhHz8whXe1tvaFw9wzRDATnThFAuJG4Z07K2/rlDP9kO9wmn\ng8hHxKeqQMJDp29e0sGkz8oDi6Mz24k9CqFJJ0CUz1ntz7rrDkA3QwQbFRzk938y\n3rSfePO5qXlUQ9mm05hYr1EKKceTLEowc4XOouNLlUWGiRshRR1szMw5C29prFJ2\nyYuV9tBaFYkq7dnh8JnmrreEvAnsKyyECxMmtV/W701OSUYBcThwgAo+hkEeOJ+/\nwrOS7yoJqDF1y+5LLQJmUlrLCPXem3ZTa4UMe1p2g7ge7Dg6Zud9NDBcMigdHByt\nJP/i9PcJSEWrccWJ1ajToUCZ0wqfJ3Z4KqoEd0fadQhb32AuDUbu7E12EUFNPGIH\n8rQKbDU=\n-----END CERTIFICATE-----"- Wenn
signingkeyist ein Base64 verschlüsselter Signaturschlüssel oder Zertifikat:
env: | type: env logging: logRouter: hostname: 34be57c7-6ff2-903921e90ab9.ingress.jp-tok.logs.cloud.ibm.com iamApiKey: <iamApiKey of the service instance> / xxxx port: 443 volumes: test: seed: "seed_value_with_minimum_15_characters" signingKey: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG5NSUlGRVRDQ0F2a0NGQkFNeHlPNkNsN0JOS0JHeHRsQXpIcEkyb2lOTUEwR0NTcUdTSWIzRFFFQkN3VUFNRVV4XG5DekFKQmdOVkJBWVRBa0ZWTVJNd0VRWURWUVFJREFwVGIyMWxMVk4wWVhSbE1TRXdId1lEVlFRS0RCaEpiblJsXG5jbTVsZENCWGFXUm5hWFJ6SUZCMGVTQk1kR1F3SGhjTk1qUXdNVE13TURNMU9ETXpXaGNOTWpRd05UQTVNRE0xXG5PRE16V2pCRk1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQXdLVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFXG5DZ3dZU1c1MFpYSnVaWFFnVjJsa1oybDBjeUJRZEhrZ1RIUmtNSUlDSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DXG5BZzhBTUlJQ0NnS0NBZ0VBdjVoNmk3Rm4xRE1VTSszQW5QUFpVTk1lMXNzM0tML0FtVW1wdHdsQVBFclZvSDFrXG5haXFUVXNTTmpYY3RqK25rOTVJK2UybnVndy9IbGFWVDFlUmdFdHZqc3NoZVhLYm9Gbit6Vy9pMzFOcTlVU2dRXG5aQTMyNVZ0Y2hZbGdKTFhNUGFIL3VrQlVyMFVJNExuakMvZE5kQVF6S3dXUE5GMkpsdjV3S1g4T0JWT1FPOURmXG5FeFZtY0VrS0RvaDBuWms1ZU9BOHZ6SkdoZnI4VHZReDlGUUZzUDRPWFR3UWdjZFpWMjZtTG0wYk1rcUV0M281XG44T1NwaXNxTkdZMVhuTUhqT1dOcVNiRXJrcGJJS0VGQVFTbldtekV2SmRIc1FYKzdlVEY3Q2lzSEpSRXNlVDRzXG5VU3VJRkJaS1hiUzNxcTZFTC9FWXZpdTBFR25ZL3JrSkpjSVJiOGh5Y3FIUmdvSVRUMmJXVDdQU01VeVhvWDNHXG5WS2ZwL3hLRmhrWXpvUkRTYjVTMGxoOHN1Z21vUmtpb0FrdzZHNTZDUDJoYWJsUFpSVU1tVUtjZUZmT0cvazRMXG5laThxSnRiZlFKOUJsQ05SUHBqcVkzc0dTZGVYSTR6ZWZ5UTh4eGN1czlTbDV3WFpWODZsejJsTy9mejNDdnBkXG4wZUt2ZnY1dVh5dkYzTzM2bHJsRUVSbVN1a2FaWWFFSkVDanhPVWVhZmM3RTFEVnlJYU1wYzJTT3VtMWNyd01HXG5SS2huVTFKU2hET04weUNsbktPbEFDZmpGSXBkcEVNcEU0bExwczF4K1BYVit4MjF6R0JNVXZYWWE0eHBieVdSXG5LMWdmTVdtdXZHT2l2bDl5MG1QU0lleUo5Ui83YlNSQWJjWUpSNE45OVRydFd4WlUxeVFpN0hTUlY1Y0NBd0VBXG5BVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBZ0VBZzAwNnpKNFpLd1Q4bW9PT2wzUGRUaEZVY2Y4cnJJbGVjOUl5XG5xUGNXU3F0NVVUZVlMSWU1OG9HaGhRbWNhSVJVT1FhaWI1SnFIMnVrenFwbytnc0ozelpiM2VJbjRGQjdjS2VmXG5McWFpZW1PdmVFZTEvcVN3QUdxTVp5WkVMc3NpT2ZsaG5KZHp1WVNSV084RE82UTZKTXFRdGhEY3cyMGJ1ZGpPXG56UDRuaFhRcVQrczhsanpxU0pXNzdoRGJyTkFlelR6LzBTSkZEdGFNQnM1VXdlWC8vNy80c1h0SjhrQklCU3hkXG43eTR3OHR1dXhVYVhPdFlNak5ySkFZTHdGVmVlTzhDRlVScGJFdXY3QUJUMGs4VTRFOEM2ajRVNEp5c3g0WFZQXG5aajM2cklBdHZjdGNoaDB5QWhIejh3aFhlMXR2YUZ3OXd6UkRBVG5UaEZBdUpHNFowN0syL3JsRFA5a085d21uXG5nOGhIeEtlcVFNSkRwMjllMHNHa3o4b0RpNk16MjRrOUNxRkpKMENVejFudHo3cnJEa0EzUXdRYkZSems5Mzh5XG4zclNmZVBPNXFYbFVROW1tMDVoWXIxRUtLY2VUTEVvd2M0WE9vdU5MbFVXR2lSc2hSUjFzek13NUMyOXByRkoyXG55WXVWOXRCYUZZa3E3ZG5oOEpubXJyZUV2QW5zS3l5RUN4TW10Vi9XNzAxT1NVWUJjVGh3Z0FvK2hrRWVPSisvXG53ck9TN3lvSnFERjF5KzVMTFFKbVVsckxDUFhlbTNaVGE0VU1lMXAyZzdnZTdEZzZadWQ5TkRCY01pZ2RIQnl0XG5KUC9pOVBjSlNFV3JjY1dKMWFqVG9VQ1owd3FmSjNaNEtxb0VkMGZhZFFoYjMyQXVEVWJ1N0UxMkVVRk5QR0lIXG44clFLYkRVPVxuLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxu - Wenn
-
Erstellen Sie die Datei
env.yaml. Sehen Sie sich das folgende Beispiel an:env: | type: env logging: logRouter: hostname: 34be57c7-6ff2-903921e90ab9.ingress.jp-tok.logs.cloud.ibm.com iamApiKey: <iamApiKey of the service instance> / xxxx port: 443 volumes: test: seed: "seed_value_with_minimum_15_characters" signingKey: "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvLaeSA8Nc3p99HNUMwon\n5lMMALAsIxRRpWUaEZ5IcUky2sgCi/rSmxU2sm6FK/BmCftk33f5W2BsYHdY9R/0\nELZ9A4POQcJsPF3ronU2QHwnRjcqYuUFXmf1VqfPPLpELriFNoCb2FN2zCa+VUmu\n+fGhroZ3Fr9kBPwJhGr917E5jeCQ+MzsGkulcTvr0SfvThiZQQ/KlU0R35ThamF3\n8C0F5IQBpqDUwDFmWvD5lF2SmprpluDBFEj8LLfLxvW9M2Qwku6nGUnnFReg3vNH\n7IF0SRr1K1AdO5hEmevCdyG9hgTdUY6dXcjntiN/kbqXErILknvzDnb4jyPZZRdK\ndrOzVt8hjbdmkS396SrMFtA++QrV3GNZl5zCscpn6d8S7BEA8mDzroo2UAbrypVP\n9l9AmzUnmnPCpZQySUUHoY0xG2vgMSA50CWH7Uwjmpixr02Td4/LU8fE7NWCO6ci\nx4++ANSaxu+uuZ2Pe1OjjgV98r06ZUs38eaxptLZqLpn3N6w8WAJxGwSLapZwNtP\ng2spUXu2Eh/TN5t4/ly5iXOsyIy8IPtTrUPX7rpaaqFZ72P6BJLj3WLEvOG/eF/8\nBTjrsZAjb8YjkO1uGk10IPa63sniZWe5vlm9w9UKy2uGuy6RhWxwoVHRRbfhboQF\nsO20dsVwgTZn8c46HMD2PoMCAwEAAQ==\n-----END PUBLIC KEY----" -
Verwenden Sie den folgenden Befehl, um den vollständigen Pfad von
env.yamlundibm-hyper-protect-container-runtime-1-0-s390x-29-encrypt.crtzu exportieren:ENV="<PATH to env.yaml>" CONTRACT_KEY="<PATH to ibm-hyper-protect-container-runtime-1-0-s390x-29-encrypt.crt>" -
Verwenden Sie den folgenden Befehl, um ein zufälliges Passwort zu erstellen:
PASSWORD="$(openssl rand 32 | base64 -w0)" -
Beginnend mit OpenSSL 3.0 ist der Unterbefehl OpenSSL
rsautlveraltet und wird durch den Unterbefehlpkeyutlersetzt. Verwenden Sie einen der folgenden Befehle, um das Passwort mitibm-hyper-protect-container-runtime-1-0-s390x-29-encrypt.crtzu verschlüsseln:- Verwendung von
rsautl(veraltet):
ENCRYPTED_PASSWORD="$(echo -n "$PASSWORD" | base64 -d | openssl rsautl -encrypt -inkey $CONTRACT_KEY -certin | base64 -w0)" ``` - Verwendung von `pkeyutl` (empfohlen): ```yaml {: pre} ENCRYPTED_PASSWORD="$(echo -n "$PASSWORD" | base64 -d | openssl pkeyutl -encrypt -inkey $CONTRACT_KEY -certin -pkeyopt rsa_padding_mode:pkcs1 | base64 -w0)" ``` - Verwendung von
-
Verwenden Sie den folgenden Befehl, um
env.yamlmit einem automatisch generierten Kennwort zu verschlüsseln:ENCRYPTED_ENV="$(echo -n "$PASSWORD" | base64 -d | openssl enc -aes-256-cbc -pbkdf2 -pass stdin -in "$ENV" | base64 -w0)" -
Verwenden Sie den folgenden Befehl, um den verschlüsselten Abschnitt
envzu extrahieren:echo "hyper-protect-basic.${ENCRYPTED_PASSWORD}.${ENCRYPTED_ENV}"
Die Schritte 7 bis 11 werden zur Verschlüsselung des Abschnitts env verwendet. Wenn Sie diesen Abschnitt nicht verschlüsseln möchten, überspringen Sie diese Schritte.
Eine Benachrichtigung über den Vertragsablauf erfolgt an Ihren Protokollierungsdienst. Die Zeitpläne für die Benachrichtigung lauten wie folgt:
- Am ersten Tag jedes Monats
- Jeden Tag für 30 Tage vor Ablauf
- Einmal alle 4 Stunden, wenn der Vertrag in 7 Tagen abläuft
- Jede Stunde, wenn der Vertrag abgelaufen ist oder in 1 Tag abläuft
Warnprotokolle zum Ablauf von Verschlüsselungs- und Bescheinigungszertifikaten
HPVS protokolliert Warnmeldungen über anstehende und abgelaufene Verschlüsselungs- und Bescheinigungszertifikate an den konfigurierten Protokollierungsdienst.
Nachstehend finden Sie den Zeitplan für die Notifizierung:
-
30 Tage vor Ablauf der Gültigkeit: Alle 24 Stunden wird eine Warnmeldung erzeugt, die darauf hinweist, dass das Zertifikat in einem Monat abläuft.
Beispiel:
HPL12011W: The Encryption certificate is going to expire -> Warning: The encryption certificate will expire on 12 February 2026 at 16:17:41 UTC, over 20 days. Upgrade to the latest image to unlock the latest features and avoid potential security vulnerabilities!!! -
7 Tage vor Ablauf der Gültigkeit: Alle 12 Stunden, wenn das Verfallsdatum näher rückt, werden Warnmeldungen protokolliert, die darauf hinweisen, dass Maßnahmen ergriffen werden müssen.
Beispiel:
HPL12011W: The Encryption certificate is going to expire -> Warning: The encryption certificate will expire on 27 January 2026 at 16:17:41 UTC, over 4 days. Upgrade to the latest image to unlock the latest features and avoid potential security vulnerabilities!!! -
Nach Ablauf des Zertifikats: Wenn das Zertifikat abgelaufen ist, gibt HPVS alle 4 Stunden Warnmeldungen aus, bis das HPVS-Image aktualisiert wird.
Beispiel:
HPL12013W: The Encryption certificate expired -> Urgent: The encryption certificate expired on 15 June 2025 at 17:15:59 UTC, over 7 months. Immediate upgrade to the latest image is required to unlock the latest features and prevent serious security breaches.
Abschnitt 'Attestierung' vorbereiten
Die Bescheinigung ist eine optionale Funktion, die Sie mit dem Vertrag nutzen können. Der attestationPublicKey ist der vom Benutzer bereitgestellte öffentliche Schlüssel, der zur Verschlüsselung des Bescheinigungsdokuments verwendet
wird. Dieser kann als öffentlicher RSA-Schlüssel bereitgestellt werden oder Base64 Verschlüsselung des öffentlichen RSA-Schlüssels als Teil des Vertrags.
-
Wenn Sie den öffentlichen RSA-Schlüssel im Klartext für
attestationPublicKeyin der YAML-Datei verwenden, verwenden Sie das folgende Beispiel:attestationPublicKey: "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvLaeSA8Nc3p99HNUMwon\n5lMMALAsIxRRpWUaEZ5IcUky2sgCi/rSmxU2sm6FK/BmCftk33f5W2BsYHdY9R/0\nELZ9A4POQcJsPF3ronU2QHwnRjcqYuUFXmf1VqfPPLpELriFNoCb2FN2zCa+VUmu\n+fGhroZ3Fr9kBPwJhGr917E5jeCQ+MzsGkulcTvr0SfvThiZQQ/KlU0R35ThamF3\n8C0F5IQBpqDUwDFmWvD5lF2SmprpluDBFEj8LLfLxvW9M2Qwku6nGUnnFReg3vNH\n7IF0SRr1K1AdO5hEmevCdyG9hgTdUY6dXcjntiN/kbqXErILknvzDnb4jyPZZRdK\ndrOzVt8hjbdmkS396SrMFtA++QrV3GNZl5zCscpn6d8S7BEA8mDzroo2UAbrypVP\n9l9AmzUnmnPCpZQySUUHoY0xG2vgMSA50CWH7Uwjmpixr02Td4/LU8fE7NWCO6ci\nx4++ANSaxu+uuZ2Pe1OjjgV98r06ZUs38eaxptLZqLpn3N6w8WAJxGwSLapZwNtP\ng2spUXu2Eh/TN5t4/ly5iXOsyIy8IPtTrUPX7rpaaqFZ72P6BJLj3WLEvOG/eF/8\nBTjrsZAjb8YjkO1uGk10IPa63sniZWe5vlm9w9UKy2uGuy6RhWxwoVHRRbfhboQF\nsO20dsVwgTZn8c46HMD2PoMCAwEAAQ==\n-----END PUBLIC KEY----" -
Wenn Sie die Base64 kodierter Signaturschlüssel für die
attestationPublicKeyVerwenden Sie in der YAML-Datei den folgenden Befehl und das folgende Beispiel.base64 -w0 <public RSA key file>Sie müssen
<public RSA key file>durch den Pfad zu Ihrer tatsächlichen öffentlichen RSA-Schlüsseldatei ersetzen.attestationPublicKey: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpRENDQVM2Z0F3SUJBZ0lSQUxCMXBPYlpEQlRRc09GSFlxazMzaWd3Q2dZSUtvWkl6ajBFQXdJd0tqRW8KTUNZR0ExVUVBeE1mZFhNdWFXTnlMbWx2TDNCeVlXSm9ZWFF4TWpNdmJYa3RhR0Z3Y205NGVUQWVGdzB5TWpBMApNVE14TURFd01ETmFGdzB6TWpBME1UQXhNREV3TUROYU1Db3hLREFtQmdOVkJBTVRIM1Z6TG1samNpNXBieTl3CmNtRmlhR0YwTVRJekwyMTVMV2hoY0hKdmVIa3dXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBU1AKWGsrelE2MlFZNjI3MWQ1cTBMZHY3SGc3QzZkMGZOUlRsQmJXekhOWWFDZzlpU0piYnVNdjVBY0JmMjlqQi83eApqYzhzVitxMksyemtkTHV4QWxGWm96VXdNekFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJCkt3WUJCUVVIQXdNd0RBWURWUjBUQVFIL0JBSXdBREFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUIzd0JTa0IxaXAKZHZZYlBMbFBmS3RZT0hsYnZzUllKa0FZM2hnY0xuNWhwQUloQUt6cmhsU3p4K1I5bmdtMTBlZVkyaFNCRmgrawpMWHp6SFkwaktTVzhyM1FhCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K -
Wenn Sie
attestationPublicKeyin der yaml-Datei verschlüsselt haben, müssen Sie die gleichen Schritte wie unter "Verschlüsselung des Vertrags" ausführen.Befolgen Sie zum Entschlüsseln des Beglaubigungsdokuments die Anweisungen unter Beglaubigungsdokument entschlüsseln.
Signatur vorbereiten
Führen Sie die folgenden Schritte auf einem Ubuntu-System aus, um die Signatur vorzubereiten:
Wenn Sie die verschlüsselte user-data.yaml aus dem Abschnitt "Erstellen der verschlüsselten workload " eines Vertrag s und die verschlüsselte env aus dem Abschnitt "Erstellen der verschlüsselten " eines Vertrags haben, fahren Sie mit Schritt 3 fort.
-
Rufen Sie die verschlüsselten
workload.yamlund verschlüsseltenenv.yaml-Dateien ab. -
Fügen Sie sie zur Datei
user-data.yamlhinzu.workload: hyper-protect-basic.js7TGt77EQ5bgTIKk5C0pViFTRHqWtn.............. env: hyper-protect-basic.VWg/5/SWE+9jLfhr8q4i......... -
Erstellen Sie die Datei
contract.txt. Fügen Sie zuerst den Wert vonworkloadund dann den Wert vonenvaus der Dateiuser-data.yamlhinzu. Achten Sie darauf, dass nachworkloadund vorenvkein Leerzeichen oder eine neue Zeile steht. Achten Sie außerdem darauf, dass am Ende der Datei keine neue Zeile oder kein neuer Zwischenraum hinzugefügt wird. Es wird empfohlen, den binären Inhalt der Dateicontract.txtmit Tools wiehexdumpzu überprüfen. Stellen Sie im Speicherauszug der Binärdatei sicher, dass der ASCII-Wert0anicht als letzter Eintrag angezeigt wird.hyper-protect-basic.js7TGt77EQ5bgTIKk5C0pViFTRHqWtn..............hyper-protect-basic.VWg/5/SWE+9jLfhr8q4i......... -
Verwenden Sie den folgenden Befehl, um die Signatur zu generieren:
echo $(cat contract.txt | tr -d "\n\r" | openssl dgst -sha256 -sign private.pem | openssl enc -base64) | tr -d ' ' -
Fügen Sie die Signatur zur Datei
user-data.yamlhinzu:workload: hyper-protect-basic.js7TGt77EQ5bgTIKk5C0pViFTRHqWtn.............. env: hyper-protect-basic.VWg/5/SWE+9jLfhr8q4i......... envWorkloadSignature: Icbm1D/CVpLNYkWRC9e .....
Einführung in einen einfachen Hyper Protect Virtual Servers for VPC-Vertrag
Die folgenden Befehlsbeispiele werden auf einem Ubuntu-System ausgeführt.
1. Details Ihrer Protokollierungsinstanz abrufen
Sie können die Protokollierung mit IBM Log Analysis oder einem generischen Syslog-Back-End konfigurieren. In diesem Beispiel wird IBM Log Analysisverwendet. Sie können aus verschiedenen Plänen wählen. Um zu verstehen, wie Sie die erforderlichen Details wie den Hostnamen und den Aufnahmeschlüssel erhalten, siehe Protokollierung für Hyper Protect Virtual Servers für VPC.
2. Abschnitt env erstellen
Achten Sie darauf, dass Sie das Pipe-Symbol '|' nicht vergessen, wenn Sie einen Vertrag mit einfachem Text verwenden. Es ist nicht erforderlich, wenn Sie den Abschnitt verschlüsseln möchten.
env: |
type: env
logging:
logRouter:
hostname: 34be57c7-6ff2-903921e90ab9.ingress.jp-tok.logs.cloud.ibm.com
iamApiKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
port: 443
3. Vorbereiten der Datei 'docker-compose'
Wenn Sie über die Protokollierungsdetails verfügen, suchen Sie nach einer einfachen Docker Compose-Datei. Das folgende Beispiel hat einen öffentlichen NGINX Container. Erstellen Sie eine docker-compose.yaml anhand des Beispiels.
services:
nginx:
image: docker.io/library/nginx@sha256:b1306efee704017b0e02efadc011d374063a4e9c47b86bdc57744fc3f0666383
ports:
- 80:80
- 443:443
4. base64-encoded Version der Docker Compose-Datei abrufen
tar -czvf compose.tgz docker-compose.yaml
base64 -i compose.tgz > compose.b64
5. Erstellen Sie den Abschnitt "Erstellen" damit
compose:
archive: H4sIADXNg2IAA+3W326CMBQGcK59it555XbanraMq70KlOLIJhjqzPb2q6g3S9xiIi7T75eQlj+hDYcP6vvVuo/hMZsQJc6YsU2+t2NfsmKyyhHLjKRUSmbCTDmpo/e4KQchsqHvNz9d99v5f8of6l/3/jUMi8Puw+fq7XJj7ApsmU/WX2m7r7/j9Abs6s/W2kzQ5aZw2p3XfxuG2PZdIeZ6Poth2LY+xGImRLdsu49dR4h2VS5DsT/yHF9KZWxRSU02NCGkxJJ0FQVSoSlrn8Jba5eyrEsOT55dlduq9sY55sbrhlJpda7HG6/7YRP3YyxETkVOhz6zLtI2++unc/tO5b+84AfgrPyn4JM0pDXyfw3I/32bMvdH5+SfOK0TpdZWIv/XgPzftynX/Udn/f/NmH+l8P+/CuQfAAAAAAAAAAAAAOD2fAEPQbuiACgAAA==
6. Workloadabschnitt füllen
Achten Sie darauf, dass Sie das Pipe-Symbol (|) nicht übersehen, wenn Sie einen Vertrag mit einfachem Text verwenden.
workload: |
type: workload
compose:
archive: H4sIADXNg2IAA+3W326CMBQGcK59it555XbanraMq70KlOLIJhjqzPb2q6g3S9xiIi7T75eQlj+hDYcP6vvVuo/hMZsQJc6YsU2+t2NfsmKyyhHLjKRUSmbCTDmpo/e4KQchsqHvNz9d99v5f8of6l/3/jUMi8Puw+fq7XJj7ApsmU/WX2m7r7/j9Abs6s/W2kzQ5aZw2p3XfxuG2PZdIeZ6Poth2LY+xGImRLdsu49dR4h2VS5DsT/yHF9KZWxRSU02NCGkxJJ0FQVSoSlrn8Jba5eyrEsOT55dlduq9sY55sbrhlJpda7HG6/7YRP3YyxETkVOhz6zLtI2++unc/tO5b+84AfgrPyn4JM0pDXyfw3I/32bMvdH5+SfOK0TpdZWIv/XgPzftynX/Udn/f/NmH+l8P+/CuQfAAAAAAAAAAAAAOD2fAEPQbuiACgAAA==
7. Ihr einfacher Vertrag ist bereit
env: |
type: env
logging:
logRouter:
hostname: 34be57c7-6ff2-903921e90ab9.ingress.jp-tok.logs.cloud.ibm.com
iamApiKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
port: 443
workload: |
type: workload
compose:
archive: H4sIADXNg2IAA+3W326CMBQGcK59it555XbanraMq70KlOLIJhjqzPb2q6g3S9xiIi7T75eQlj+hDYcP6vvVuo/hMZsQJc6YsU2+t2NfsmKyyhHLjKRUSmbCTDmpo/e4KQchsqHvNz9d99v5f8of6l/3/jUMi8Puw+fq7XJj7ApsmU/WX2m7r7/j9Abs6s/W2kzQ5aZw2p3XfxuG2PZdIeZ6Poth2LY+xGImRLdsu49dR4h2VS5DsT/yHF9KZWxRSU02NCGkxJJ0FQVSoSlrn8Jba5eyrEsOT55dlduq9sY55sbrhlJpda7HG6/7YRP3YyxETkVOhz6zLtI2++unc/tO5b+84AfgrPyn4JM0pDXyfw3I/32bMvdH5+SfOK0TpdZWIv/XgPzftynX/Udn/f/NmH+l8P+/CuQfAAAAAAAAAAAAAOD2fAEPQbuiACgAAA==