Secretos de Vault para autorización de extracción de imagen

Puede alojar imágenes de contenedor en registros o repositorios privados que requieran autorización para extraer las imágenes. Recomendamos que almacene sus credenciales mediante el servicio Oracle Cloud Infrastructure Vault para mejorar la seguridad y facilitar la gestión de credenciales.

También puede proporcionar un nombre de usuario y una contraseña para el servicio Oracle Cloud Infrastructure Container Instances directamente. Consulte CreateBasicImagePullSecretDetails para obtener más información.

Crear credenciales

El tipo de nombre de usuario y contraseña necesarios para extraer la imagen depende del registro. Las credenciales suelen ser las mismas que utiliza para el registro mediante la CLI de Docker. Por ejemplo, serían las mismas credenciales que utilizaría para docker login antes de extraer la imagen con docker pull.

Los secretos de almacén para la autorización de imágenes están diseñados para su uso con registros externos, como Docker Hub. Para repositorios privados en Container Registry, utilice políticas de IAM basadas en principales de recursos de Container Instances. Para obtener más información, consulte Ejemplos de políticas.

Cree su secreto de almacén

Cree un secreto de almacén que contenga las credenciales de recuperación de imagen. El secreto debe ser una cadena JSON con los campos username y password. Se ignorará cualquier campo adicional. Tome nota del OCID del secreto que cree porque necesitará el OCID más adelante en el proceso.

Por ejemplo, si el nombre de usuario es "container-instance-user" y la contraseña es "<example-password>", el secreto será:

{
 "username": "container-instance-user",
 "password": "<example-password>"
}
Los secretos de Vault tienen versiones. Container Instances siempre utiliza la última versión de un secreto.

Permitir que las instancias de contenedor lean secretos de almacén

Las instancias de contenedor que cree deben tener permiso para leer los secretos del almacén proporcionados para la autorización de imágenes.

  1. Cree un grupo dinámico que incluya las instancias de contenedor a las que desea otorgar permiso de lectura.

    La siguiente regla de coincidencia de grupo dinámico de ejemplo incluirá todas las instancias de contenedor en su arrendamiento.

    ALL {resource.type='computecontainerinstance'}
  2. Cree una política que permita al grupo dinámico leer los secretos del almacén en cuestión. Específicamente, el grupo debe poder leer los paquetes de secretos del almacén.

    La siguiente política de ejemplo permite al grupo dinámico proporcionado leer todos los paquetes secretos de almacén en su arrendamiento. Sustituya <dynamic-group-name> por el nombre real del grupo dinámico.

    allow dynamic-group <dynamic-group-name> to read secret-bundles in tenancy

Estas políticas son ejemplos básicos que dan un acceso relativamente amplio. Puede utilizar mecanismos de política de IAM estándar para editar estas políticas a fin de crear permisos más estrictos, como limitar el ámbito a instancias de contenedor o secretos en un solo compartimento. Para obtener más información, consulte Gestión de políticas.

Creación de una instancia de contenedor mediante secretos de almacén para la autorización de imágenes

Si desea utilizar secretos de almacén para la autorización de imágenes, utilice la API, los SDK o la CLI de Container Instances.

Al crear la solicitud para crear la instancia de contenedor, proporcione una entrada CreateVaultImagePullSecretDetails en el campo imagePullSecrets de CreateContainerInstanceDetails.

En el siguiente ejemplo, se muestra un CreateContainerInstanceDetails. abreviado:

{
  "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 ... >
}

Cuando Container Instances extrae la imagen example.registry.io/container-instance-user/example-image:latest, utiliza las credenciales almacenadas en el secreto con el OCID ocid1.vaultsecret.oc1.<region_code>.<unique_ID>.

Los secretos de extracción de imágenes se definen por separado de las especificaciones del contenedor. Si registryEndpoint es un prefijo de imageUrl, es una coincidencia. Se permiten varias coincidencias. Cuando Container Instances extrae la imagen, los secretos de recuperación de imagen coincidentes se intentarán en secuencia hasta que la extracción se realice correctamente.

En el siguiente ejemplo, los secretos coincidentes para la imagen example.registry.io/abc/one:latest son secret.ocid.abc y secret.ocid.one. Y los secretos coincidentes para la imagen example.registry.io/abc/two:latest son secret.ocid.abc y 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"
    },
  ]
}