Вход в AWS ECR с помощью JavaScript SDK - флажок no-include-email - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь запустить команду AWS CLI:

aws ecr get-login --no-include-email --region <my-region>

Но используя JavaScript SDK с методом new AWS.ECR(..).getAuthorizationToken, но я получаю эту ошибку:

Error response from daemon: login attempt to https://xxxxx.dkr.ecr.<my-region>.amazonaws.com/v2/ failed with status: 400 Bad Request

Насколько я понимаю, мне нужно использовать какой-либо флаг, равный аргументу --no-include-email в команде CLI, но я не могу найти, как установить его с помощью JavaScript SDK.

Это мой код:

const ecr = new AWS.ECR({
    apiVersion: '2015-09-21',
    region: 'my-region'
});

const { authorizationData } = await ecr.getAuthorizationToken().promise();

if(!authorizationData || !authorizationData[0] || !authorizationData[0].authorizationToken){
    throw new Error('AWS getAuthorizationToken failed');
}

const password = authorizationData[0].authorizationToken;
const proxyEndpoint = authorizationData[0].proxyEndpoint;

await childProcessP.spawn('docker', [
    'login',
    '-u', 'AWS',
    '-p', password,
    proxyEndpoint
]);

Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

0 голосов
/ 22 августа 2018

AuthorizationToken содержит кодированное base64 <username>:<password>

все, что вам нужно сделать, это декодировать и разделить, чтобы получить нужные значения.

0 голосов
/ 18 мая 2019

У меня была та же проблема, и я нашел в документации возврат токена в authToken.AuthorizationData [0] .AuthorizationToken - это строка в кодировке base 64.

Итак, если вы хотите использовать его для входа в докер, вы сначала расшифровали его.

При декодировании вы увидите что-то вроде: AWS: eyJwYXlsb2FkIjoiZGhtVzc5Sj ....

Оказывается, токен закодирован пользователем. Поэтому вы должны вынуть AWS: и использовать оставшуюся строку.

0 голосов
/ 08 мая 2018

У меня та же проблема с использованием (golang) библиотек docker ENGINE.

Сначала я получаю учетные данные (как и вы) от ecr.GetAuthorizationToken() Затем я вызываю docker.RegistryLogin() функцию.

Вот мой код:

authToken, err  := ecrSession.GetAuthorizationToken(&ecr.GetAuthorizationTokenInput{})
    if err != nil {
        color.Red(fmt.Sprintf("Getting ECR auth token: %s", err.Error()))
        return err
    }

    auth := types.AuthConfig{
        Username: "AWS",
        Password: *authToken.AuthorizationData[0].AuthorizationToken,
        ServerAddress: *authToken.AuthorizationData[0].ProxyEndpoint,

    }

     authenticatedOK, err := cli.RegistryLogin(ctx, auth)

всегда возвращай мне 400 плохой запрос .

Однако, запустив команды из оболочки:

aws ecr get-login --no-include-email --region eu-west-1

затем скопируйте и вставьте возвращаемый результат

docker login -u AWS -p ... http://account-id.dkr.ecr.eu-west-1.amazonaws.com работает нормально.

...