Vault-Secrets für die Autorisierung zum Abrufen von Bildern
Sie können Containerimages in privaten Registrys oder Repositorys hosten, die autorisiert werden müssen, um die Images abzurufen. Wir empfehlen, Ihre Zugangsdaten mit dem Oracle Cloud Infrastructure Vault-Service zu speichern, um die Sicherheit und die Verwaltung von Zugangsdaten zu verbessern.
Alternativ können Sie dem Oracle Cloud Infrastructure Container Instances-Service einen Benutzernamen und ein Kennwort direkt angeben. Weitere Informationen finden Sie unter CreateBasicImagePullSecretDetails.
Zugangsdaten erstellen
Der Typ von Benutzername und Kennwort, der zum Abrufen des Images erforderlich ist, hängt von der Registry ab. Die Zugangsdaten sind in der Regel dieselben, die Sie für die Registry über die Docker-CLI verwenden. Beispiel: Sie sind dieselben Zugangsdaten wie für docker login
, bevor Sie das Image mit docker pull
abrufen.
Vault Secrets für die Imageautorisierung sind für die Verwendung mit externen Registrys wie Docker Hub vorgesehen. Verwenden Sie für private Repositorys in Container Registry IAM-Policys, die auf Container Instances-Ressourcen-Principals basieren. Weitere Informationen finden Sie unter Policy-Beispiele.
Vault Secret erstellen
Erstellen Sie ein Vault Secret, das die Pull-Zugangsdaten des Images enthält. Das Secret muss eine JSON-Zeichenfolge mit den Feldern username
und password
sein. Alle zusätzlichen Felder werden ignoriert. Notieren Sie sich die OCID des Secrets, das Sie erstellen, weil Sie die OCID später im Prozess benötigen.
Beispiel: Wenn Ihr Benutzername "container-instance-user" und Ihr Kennwort "<example-password>" lautet, lautet das Secret wie folgt:
{
"username": "container-instance-user",
"password": "<example-password>"
}
Vault Secrets sind versioniert. Containerinstanzen verwenden immer die neueste Version eines Secrets.Lesen von Vault-Secrets durch Containerinstanzen zulassen
Die von Ihnen erstellten Containerinstanzen müssen über die Berechtigung zum Lesen der Vault Secrets verfügen, die für die Imageautorisierung bereitgestellt wurden.
- Erstellen Sie eine dynamische Gruppe mit den Containerinstanzen, denen Sie Leseberechtigungen erteilen möchten.
Die folgende Beispielregel für den dynamischen Gruppenabgleich enthält alle Containerinstanzen in Ihrem Mandanten.
ALL {resource.type='computecontainerinstance'}
-
Erstellen Sie eine Policy, mit der die dynamische Gruppe die betreffenden Vault Secrets lesen kann. Insbesondere muss die Gruppe in der Lage sein, die Vault Secret Bundles zu lesen.
Mit der folgenden Beispiel-Policy kann die angegebene dynamische Gruppe alle Vault Secret Bundles in Ihrem Mandanten lesen. Ersetzen Sie <dynamic-group-name> durch den tatsächlichen Namen der dynamischen Gruppe.
allow dynamic-group <dynamic-group-name> to read secret-bundles in tenancy
Diese Richtlinien sind grundlegende Beispiele, die einen relativ breiten Zugang ermöglichen. Mit standardmäßigen IAM-Policy-Mechanismen können Sie diese Policys bearbeiten, um strengere Berechtigungen zu erstellen, wie z.B. die Begrenzung des Geltungsbereichs auf Containerinstanzen oder Secrets in einem einzelnen Compartment. Weitere Informationen finden Sie unter Policys verwalten.
Containerinstanz mit Vault-Secrets für Imageautorisierung erstellen
Wenn Sie Vault Secrets für die Imageautorisierung verwenden möchten, verwenden Sie die Containerinstanzen-API, SDKs oder CLI.
Wenn Sie die Anforderung zum Erstellen der Containerinstanz erstellen, geben Sie einen CreateVaultImagePullSecretDetails
-Eintrag im Feld imagePullSecrets
von CreateContainerInstanceDetails
an.
Das folgende Beispiel zeigt eine abgekürzte CreateContainerInstanceDetails.
:
{
"containers": [
{
"imageUrl": "example.registry.io/container-instance-user/example-image:latest",
< ... other fields ... >
}
],
"imagePullSecrets": [
{
"secretType": "VAULT",
"registryEndpoint": "example.registry.io/container-instance-user",
"secretId": "ocid1.vaultsecret.oc1.<region_code>.<unique_ID>"
}
],
< ... other fields ... >
}
Wenn Containerinstanzen das Image example.registry.io/container-instance-user/example-image:latest
abrufen, verwendet es die im Secret gespeicherten Zugangsdaten mit der OCID ocid1.vaultsecret.oc1.<region_code>.<unique_ID>
.
Image Pull Secrets werden getrennt von den Containerspezifikationen definiert. Wenn registryEndpoint
ein Präfix von imageUrl
ist, handelt es sich um eine Übereinstimmung. Es sind mehrere Übereinstimmungen zulässig. Wenn Container Instances das Image abruft, werden die übereinstimmenden Image-Pull Secrets nacheinander versucht, bis das Pull erfolgreich ist.
Im folgenden Beispiel sind die übereinstimmenden Secrets für das Image example.registry.io/abc/one:latest
secret.ocid.abc
und secret.ocid.one
. Die übereinstimmenden Secrets für das Image example.registry.io/abc/two:latest
lauten secret.ocid.abc
und secret.ocid.two
.
{
"containers": [
{
"imageUrl": "example.registry.io/abc/one:latest"
},
{
"imageUrl": "example.registry.io/abc/two:latest"
},
],
"imagePullSecrets": [
{
"secretType": "VAULT",
"registryEndpoint": "example.registry.io/abc",
"secretId": "secret.ocid.abc"
},
{
"secretType": "VAULT",
"registryEndpoint": "example.registry.io/abc/one",
"secretId": "secret.ocid.one"
},
{
"secretType": "VAULT",
"registryEndpoint": "example.registry.io/abc/two",
"secretId": "secret.ocid.two"
},
]
}