Получение исключения InvalidSignatureException при попытке выполнить команду aws ecr-get-login-password в оболочке конвейера Azure DevOps

Я хочу создавать и развертывать образы Docker из Azure DevOps в AWS ECR.

Я следовал этому руководству - https://www.devguides.dev/how-to-build-and-deploy-docker-images-from-azure-devops-to-aws-ecr/

Я получаю следующую ошибку: An error occurred (InvalidSignatureException) when calling the GetAuthorizationToken operation: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

Я вручную проверил и запустил команду aws ecr-get-login-password локально, используя тот же ключ доступа и секрет AWS, и она возвращает временный пароль, поэтому я знаю, что разрешения и ключи верны.

Я убедился, что правильно установил переменные и что они считываются, распечатав их для просмотра в оболочке Azure bash - они были правильными.

Какие-либо предложения?

Нужно ли мне предоставлять данные для входа в AWS где-нибудь еще в Azure?

Ниже приведен yaml сборки конвейера:

trigger:
  branches:
    include:
    - build-and-push-azure-to-aws

pool:
  vmImage: 'ubuntu-latest'

variables:
  - group: dev
  - name: DOCKER_REPOSITORY
    value: $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com/$(DOCKER_REPOSITORY_NAME)

steps:
- script: |
    aws ecr get-login-password --region $(AWS_REGION) | docker login --username AWS --password-stdin $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com
  displayName: 'Login to AWS'
  env:
    AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
    AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)

- task: Docker@2
  displayName: Build docker image
  inputs:
    repository: $(DOCKER_REPOSITORY)
    command: buildAndPush
    Dockerfile: Dockerfile
    tags: |
      latest

Вот ошибка, которую я получаю:


==============================================================================
Task         : Command line
Description  : Run a command line script using Bash on Linux and macOS and cmd.exe on Windows
Version      : 2.164.2
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/command-line
==============================================================================
Generating script.
========================== Starting Command Output ===========================
/bin/bash --noprofile --norc /home/vsts/work/_temp/043d91c2-1246-45f3-909b-6594561cfbf1.sh

An error occurred (InvalidSignatureException) when calling the GetAuthorizationToken operation: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.


person ErnieAndBert    schedule 17.07.2020    source источник
comment
Установите для переменной system.debug значение True, чтобы узнать, есть ли полезный журнал. И если вы просто запустите - script: aws ecr get-login-password --region $(AWS_REGION) в своем конвейере, каков будет результат? Кроме того, вы можете указать учетные данные с помощью конечной точки сервиса (типа AWS) и использовать AWS CLI, задачи сценария AWS Shell для выполнения команды в AWS.   -  person Cece Dong - MSFT    schedule 20.07.2020


Ответы (1)


Если вы хотите создать и развернуть образы Docker из Azure DevOps в AWS ECR, вы можете создать соединение службы с AWS с набором своих действительных учетных данных AWS. Вы можете следовать этому документу AWS Toolkit для Azure DevOps. чтобы получить более подробную информацию о настройке этого сервисного подключения.

введите описание изображения здесь

А затем используйте Amazon ECR Push задачу, чтобы отправить образ Docker в реестр Amazon Elastic Container Registry на AWS.

введите описание изображения здесь

Вы можете проверить блог ниже, чтобы получить более подробную информацию:

https://aws.amazon.com/blogs/devops/deploying-a-asp-net-core-web-application-to-amazon-ecs-using-an-azure-devops-pipeline/

person Cece Dong - MSFT    schedule 20.07.2020
comment
Вы проверили мой ответ? Если это вам поможет, вы можете принять его как ответ, это может быть полезным для других членов сообщества, читающих эту ветку. - person Cece Dong - MSFT; 29.07.2020