¿Cómo puedo permitir que una cuenta secundaria envíe o extraiga imágenes de mi repositorio de imágenes de Amazon ECR?

4 minutos de lectura
0

Quiero permitir que una cuenta secundaria envíe o extraiga imágenes de mi repositorio de imágenes de Amazon Elastic Container Registry (Amazon ECR).

Resolución

Puede enviar o extraer imágenes hacia o desde un repositorio de Amazon ECR en otra cuenta. Primero, debe crear una política que permita a la cuenta secundaria realizar llamadas a la API en el repositorio. A continuación, utilice un token de autenticación de Docker generado desde la cuenta secundaria para usar los comandos push y pull en el repositorio de la cuenta principal.

Cree una política que permita a la cuenta secundaria realizar llamadas a la API en el repositorio de imágenes

  1. Abra la consola de Amazon ECR para su cuenta principal.

  2. Elija el nombre del repositorio con hipervínculos del repositorio que desee modificar.

  3. En el panel de navegación de la izquierda, en Amazon ECR, Repositorios, seleccione Permisos.

  4. Para añadir una política de repositorio para su cuenta secundaria desde su cuenta principal, seleccione Editar política en JSON. Introduzca su política en el editor de código y, a continuación, seleccione Guardar.

Importante: En su política, incluya el número de cuenta de la cuenta secundaria y las acciones que la cuenta puede realizar contra el repositorio. Para permitir el acceso a un rol específico, proporcione el rol arn como entidad principal. Por ejemplo, AWS: arn:aws:iam::account-id:role/ecsInstanceRole. El rol debe existir en la cuenta secundaria antes de guardar la política del repositorio. Si no existe, aparece un error similar al siguiente: se proporcionó una política de repositorio no válida.

El siguiente ejemplo de política de repositorio permite que una cuenta específica inserte y extraiga imágenes:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:root"
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ]
    }
  ]
}
  1. En la definición de la tarea, defina la imagen que desea usar con Amazon ECS. La imagen está alojada en el repositorio Amazon ECR de la cuenta principal.
    Nota: Asegúrese de que su cuenta secundaria tenga los permisos de Amazon ECR que figuran en la política gestionada «AmazonEC2ContainerRegistryPowerUser». Estos permisos son necesarios para extraer o enviar archivos desde su cuenta principal.

Genere un token de autenticación de Docker temporal desde la cuenta secundaria y realice una prueba de push o pull

Nota: Si recibe errores al ejecutar comandos de AWS Command Line Interface (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

La cuenta secundaria no puede realizar acciones de política en el repositorio hasta que reciba un token de autenticación temporal válido durante 12 horas. El token permite que la cuenta secundaria utilice los comandos push y pull de Docker en el repositorio de la cuenta principal. El comando get-login-password recupera y decodifica el token de autorización y, a continuación, puede canalizarlo a un comando de inicio de sesión de docker para autenticarlo.

Nota: La cuenta que recibe el token debe tener los permisos de API de AWS Identify and Access Management (IAM) pertinentes para modificar el repositorio. Para ver ejemplos, consulte las políticas administradas de AWS para Amazon Elastic Container Registry. Para solucionar problemas con Docker, active el modo de depuración en su daemon de Docker. Este comando está soportado con la versión más reciente de la CLI de AWS, versión 2, o en la versión v1.17.10 o posterior de la CLI de AWS, versión 1. Para obtener más información, consulte get-login-password.

  1. Para generar un token de autenticación de Docker para una cuenta que envía y extrae imágenes fuera de Amazon ECS, ejecute el siguiente comando. Sustituya aws_account_id por su ID de cuenta principal y RegionID por su ID de región.

Uso de la AWS CLI:

aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

Uso de AWS Tools para Windows PowerShell:

(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

Recibirá el siguiente resultado:

aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-south-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
  1. Realice una extracción de imagen de prueba de la cuenta principal o envíela a ella:
docker pull AccountID.dkr.ecr.Region.amazonaws.com/ImageName::TagName

Nota: Reemplace el ID de cuenta y la región por el ID de su cuenta y su región. Reemplace ImageName y TagName por el nombre de la imagen y la etiqueta.

  1. Compruebe que la imagen se ha descargado correctamente:
docker images | grep ImageName

Nota: Reemplace ImageName por el nombre de su imagen.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años