amazon web services - services - No se puede enviar la imagen a Amazon ECR; falla con "sin credenciales de autenticación básicas"
install docker amazon linux 2 (30)
Estoy tratando de insertar una imagen acoplable en un registro de Amazon ECR. Estoy usando Docker Client Docker versión 1.9.1, compilación a34a1d5. Utilizo "aws ecr get-login --region us-east-1" para obtener los créditos de inicio de sesión del acoplador. Luego inicio sesión con éxito con esos créditos de la siguiente manera:
docker login -u AWS -p XXXX -e none https://####.dkr.ecr.us-east-1.amazonaws.com
WARNING: login credentials saved in /Users/ar/.docker/config.json
Login Succeeded
Pero cuando trato de empujar mi imagen me sale el siguiente error:
$ docker push ####.dkr.ecr.us-east-1.amazonaws.com/image:latest
The push refers to a repository [####.dkr.ecr.us-east-1.amazonaws.com/image] (len: 1)
bcff5e7e3c7c: Preparing
Post https://####.dkr.ecr.us-east-1.amazonaws.com/v2/image/blobs/uploads/: no basic auth credentials
Me aseguré de que el usuario aws tuviera los permisos correctos. También me aseguré de que el repositorio permitiera a ese usuario presionarlo. Solo para asegurarme de que no era un problema, configuré el registro para permitir que todos los usuarios tengan acceso completo. Nada cambia el error "sin credenciales de autenticación básicas". No sé cómo comenzar a depurar esto ya que todo el tráfico está encriptado.
ACTUALIZAR
Así que tuve un momento de Homer Simpson D''Oh cuando me di cuenta de la causa raíz de mi problema. Tengo acceso a varias cuentas de AWS. Aunque estaba usando aws configure para establecer mis credenciales para la cuenta donde había configurado mi repositorio, aws cli estaba usando las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY. Entonces, cuando hice aws ecr get-login, estaba devolviendo un inicio de sesión para la cuenta incorrecta. No noté que los números de cuenta eran diferentes hasta que volví ahora para probar algunas de las respuestas propuestas. Cuando elimino las variables de entorno, todo funciona correctamente. Supongo que el lema de la historia es que si encuentras este error, asegúrate de que el repositorio en el que estás iniciando sesión coincida con la etiqueta que has aplicado a la imagen.
-
Asegúrese de haber creado primero el registro ECR.
Luego, según las instrucciones de comando de inserción de ECR, corte y pegue los siguientes comandos -
Ejecute el comando de inicio de sesión de Docker (eval en Mac / Linux omite cortar y pegar)
eval $(aws ecr get-login --region us-east-1)
agregue --perfil si usa varias cuentas de AWS
eval $(aws ecr get-login --region us-east-1 --profile your-profile)
-
docker build -t image-name .
-
docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
-
docker push ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
¡En caso de error,
asegúrese de ejecutar todos los comandos nuevamente!
Las credenciales que obtiene usando
aws ecr get-login
son temporales y caducarán.
Agrego la opción de región y todo funciona bien para mí:
aws ecr get-login --no-include-email --region eu-west-3
Asegúrese de utilizar la región correcta en
aws ecr get-login
, debe coincidir con la región en la que se crea su repositorio.
Debe asegurarse de haber iniciado sesión con las credenciales correctas. Consulte la descripción oficial del error y verifique aquí.
http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html
La fijación "sin autenticación básica" se describe en el enlace
Después de ejecutar este comando:
(aws ecr get-login --no-include-email --region us-west-2)
simplemente ejecute el comando de inicio de sesión de Docker desde la salida
docker login -u AWS -p epJ....
es la forma en que Docker inicia sesión en ECR
El comando docker dado por aws-cli está un poco apagado ...
Al usar el inicio de sesión de Docker, Docker guardará un servidor: par de claves en su llavero o en el archivo ~ / .docker / config.json
Si guarda la clave en
https://7272727.dkr.ecr.us-east-1.amazonaws.com
la búsqueda de la clave durante la inserción fallará porque Docker buscará un servidor llamado
7272727.dkr.ecr.us-east-1.amazonaws.com
no
https://7272727.dkr.ecr.us-east-1.amazonaws.com
.
Use el siguiente comando para iniciar sesión:
eval $(aws ecr get-login --no-include-email --region us-east-1 --profile yourprofile | sed ''s|https://||'')
Una vez que ejecute el comando, recibirá
''Login Succeeded''
mensaje
''Login Succeeded''
y luego estará bien
después de eso tu comando push debería funcionar
En Windows en PowerShell , use:
Invoke-Expression $(aws ecr get-login --no-include-email)
En mi caso (y probablemente en todos los casos), este error resultó de tener varias cuentas de AWS. Entonces, AWS ECR no está utilizando las credenciales aws correctas asociadas con la cuenta aws.
Intenté varias soluciones mencionadas aquí, pero no tuve éxito. Funcionó después de usar tokens en lugar de nombre de usuario y contraseña . Lo tengo funcionando siguiendo las instrucciones aquí. https://btburnett.com/2017/01/docker-login-for-amazon-aws-ecr-using-windows-powershell.html
En mi caso, después de ejecutar
aws ecr get-login --no-include-email --region *****
, acabo de copiar la salida de ese comando con el formato
docker login -u *** -p ************
, y lo pega en la solicitud.
El empuje siguió adelante.
En mi caso, esto fue un error con Docker para Windows y su soporte para Windows Credential Manager.
Abra su
~/.docker/config.json
y elimine la entrada
"credsStore": "wincred"
.
Esto hará que las credenciales se
config.json
directamente en
config.json
.
Tendrás que iniciar sesión nuevamente después.
Puede rastrear este error a través de los tickets #22910 y #24968 en GitHub.
Ese mensaje de error proviene de Docker y no necesariamente está relacionado con AWS, ya que recibí el mismo error cuando no uso AWS ... solo dice que Docker no está obteniendo autorización para proceder de cualquier fuente de autenticación que esté usando
En mi caso, en la prueba eliminé el directorio ~ / .docker y obtuve ese error ... después de que reboté mi registro local de acopladores, entonces el empuje de acopladores estaba bien
Esto debería haber funcionado incluso sin abrir los permisos. Consulte la documentación: Autenticación de registro privado .
[Editar: en realidad, tuve problemas de permisos también al hacer una segunda prueba. Vea Docker push to AWS ECR repo privado que falla con JSON mal formado ).]
Sin embargo tuve el mismo problema; No sé por qué, pero utilicé con éxito el mecanismo de autenticación más largo que se describe en los documentos para get-authorization-token
AWS CLI y versiones de Docker:
$ aws --version
aws-cli/1.9.17 Python/2.7.6 Linux/3.16.0-38-generic botocore/1.3.17
$ docker --version
Docker version 1.9.1, build a34a1d5
Obtenga el token de autenticación (''contraseña del acoplador'').
aws ecr get-authorization-token --region us-east-1 --output text /
--query authorizationData[].authorizationToken | base64 -d | cut -d: -f2
Nota: Mi ~ / .aws / config especifica una región predeterminada diferente, por lo que necesitaba establecer explícitamente
--region us-east-1
.
Inicie sesión de forma interactiva (cambie
############
a su ID de cuenta de AWS):
docker login -u AWS https://############.dkr.ecr.us-east-1.amazonaws.com/
password: <paste the very long password from above>
email: <I left this blank>
Empuje una imagen (suponiendo que haya realizado una
test
imagen acoplable):
docker tag test:latest ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
docker push ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
The push refers to a repository [910732017890.dkr.ecr.us-east-1.amazonaws.com/test] (len: 1)
d5122f58a2e1: Pushed
7bddbca3b908: Pushed
latest: digest: sha256:bc0b521fd398bd1a2ef58a289dcb910334608723fd570e7bddb36eacd0060363 size: 4378
Experimenté el mismo problema.
La generación de nuevas credenciales de AWS (claves de acceso) y la reconfiguración de AWS CLI con nuevas credenciales resolvieron el problema.
Anteriormente,
aws ecr get-login --region us-east-1
generó el comando de inicio de
aws ecr get-login --region us-east-1
con una URL de registro EC no válida.
FWIW, Debian 9, Docker versión 18.06.1-ce, compilación e68fc7a:
$(aws ecr get-login | sed ''s| -e none | |g'')
Hay un error conocido en el administrador de credenciales wincred en Windows. Eliminar ''https: //'' del comando de inicio de sesión generado resuelve esto.
docker login -u AWS -p <password> <aws_account_id>.dkr.ecr.<region>.amazonaws.com
en vez de
docker login -u AWS -p <password> https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com
Consulte también docs.aws.amazon.com/AmazonECR/latest/userguide/… .
Los documentos de AWS le indican que ejecute el siguiente comando (para la región ap-sureste-2)
aws ecr get-login --region ap-southeast-2
Cuando me topé con este problema, no estaba claro para mí en base a esos documentos que necesita ingresar el resultado de este comando en la terminal y ejecutarlo.
La solución que funcionó para mí fue copiar el resultado al portapapeles con
aws ecr get-login --region ap-southeast-2 | pbcopy
Pegue el resultado en la línea de comando y ejecútelo
Me encontré con este problema también corriendo en OSX. Vi la respuesta de Oliver Salzburg y verifiqué mi ~ / .docker / config.json. Tenía múltiples credenciales de autorización en su interior de las diferentes cuentas de AWS que tengo. Eliminé el archivo y después de ejecutar get-login nuevamente funcionó.
Me enfrenté al mismo problema y el error que cometí fue usar la ruta de repositorio incorrecta
por ejemplo:
docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest
En el camino anterior, aquí es donde cometí el error: en
"dkr.ecr.us-east-1.amazonaws.com"
lugar de
"west"
.
Estaba usando "
east"
.
Una vez que corregí mi error, pude empujar la imagen con éxito.
Mi problema era tener múltiples credenciales de AWS; default y dev. Como estaba tratando de implementar para dev esto funcionó:
$(aws ecr get-login --no-include-email --region eu-west-1 --profile dev | sed ''s|https://||'')
Probar con:
eval $(aws ecr get-login --no-include-email | sed ''s|https://||'')
Antes de empujar.
Si ayuda a alguien ...
Mi problema fue que tuve que usar la opción
--profile
para autenticarme con el perfil adecuado del archivo de credenciales.
A continuación, había omitido el
--region [region_name]
, que también daba el error "sin credenciales de autenticación básicas".
La solución para mí fue cambiar mi comando de esto:
aws ecr get-login
A esto:
aws --profile [profile_name] ecr get-login --region [region_name]
Ejemplo:
aws --profile foo ecr get-login --region us-east-1
Espero que ayude a alguien!
Si está aislando cuentas de AWS para fines de CI / CD y tiene un repositorio ECR compartido entre varias cuentas de AWS, es posible que deba cambiar el
~/.docker/config.json
manualmente.
Digamos que tiene estas configuraciones:
-
ECR es propiedad de la identificación de cuenta de AWS
00000000000000
-
El servidor de CI es propiedad de la cuenta de AWS ID
99999999999999
Si llama
aws ecr get-login --region us-west-2 | bash
aws ecr get-login --region us-west-2 | bash
dentro de su servidor CI, docker generará credenciales temporales en
~/.docker/config.json
.
{
"auths": {
"https://99999999999999.dkr.ecr.us-west-2.amazonaws.com": {
"auth": "long-token.."
}
}
}
Pero desea señalar la cuenta de ECR, por lo que debe cambiar el nombre de host.
{
"auths": {
"https://00000000000000.dkr.ecr.us-west-2.amazonaws.com": {
"auth": "long-token.."
}
}
}
Tenga en cuenta que esta situación depende de cómo se forma la política / usuario de IAM para permitir el acceso a ECR.
Si usa perfiles, no olvide pasar
--profile=XXX
a
aws ecr get-login
.
Si usa varios perfiles y necesita iniciar sesión en un perfil que no es el predeterminado, debe iniciar sesión con este comando:
$(AWS_PROFILE=<YOUR PROFILE> aws ecr get-login --no-include-email --region eu-west-1)
Simplemente ejecute lo que se devuelva en el paso uno para solucionar el problema.
También nos encontramos con este problema hoy y probamos todo lo mencionado en esta publicación (excepto generar credenciales de AWS).
Finalmente resolvimos el problema simplemente actualizando Docker, luego el empuje funcionó.
El problema se encontró con Docker 1.10.x y se resolvió con Docker 1.11.x.
Espero que esto ayude
También tuve este problema. Lo que sucedió conmigo fue que olvidé ejecutar el comando que me devolvieron después de ejecutar
aws ecr get-login --region ap-southeast-2
¡Este comando devolvió un gran blob, que incluye el comando de
docker login
allí mismo!
No me di cuenta
Debería devolver algo como esto:
docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>
Copie y pegue este comando y luego ejecute su comando push docker que se parece a esto:
docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename
Tuve este problema con una causa diferente: necesitaba ingresar a un registro no asociado con mi cuenta de AWS (el registro ECR de un cliente).
El cliente me había otorgado acceso en la pestaña Permisos para el registro, agregando mi ID de IAM (por ejemplo,
arn:aws:iam::{AWS ACCT #}:user/{Username}
) como Principal.
Traté de iniciar sesión con los pasos habituales:
$(aws ecr get-login --region us-west-2 --profile profilename)
docker push {Client AWS ACCT #}.dkr.ecr.us-west-1.amazonaws.com/imagename:latest
Lo que, por supuesto, no resultó en
no basic auth credentials
.
Resulta que
aws ecr get-login
conecta a la ECR
para el registro asociado a su inicio de sesión
, lo que tiene sentido en retrospectiva.
La solución es decirle a
aws ecr get-login
qué registro (s) desea iniciar sesión.
$(aws ecr get-login --region us-west-2 --profile profilename --registry-ids {Client AWS ACCT #})
Después de eso,
docker push
funciona bien.
si ejecuta
$(aws ecr get-login --region us-east-1)
todo se hará por usted
aws ecr get-login --region us-west-1 --no-include-email
Este comando me da el comando correcto para iniciar sesión. Si no utiliza "--no-include-email", arrojará otro error. El resultado del comando anterior se parece a este inicio de sesión de la ventana acoplable -u AWS -p ********************** muy grande ******. Copia eso y ejecútalo. Ahora mostrará "Inicio de sesión correcto". Ahora puede empujar su imagen a ECR.
Asegúrese de que su regla AMI tenga permiso para el usuario que intentó iniciar sesión.