Как читать параметры SSM при использовании AWS Codebuild?

В настоящее время я успешно использую сборку кода для простых задач сборки (в конфигурации без vpc).

Но теперь я пытаюсь запустить задачу сборки, которая считывает значение параметра SSM, и она терпит неудачу, потому что не может загрузить какие-либо учетные данные, очевидная причина:

com.amazonaws.auth.InstanceProfileCredentialsProvider@5754b242: Unable to load credentials from service endpoint

Роль службы IAM, которую я назначил проекту сборки кода, имеет ssm:GetParameters разрешение для параметра, который я пытаюсь прочитать (и если бы это было проблемой, я бы ожидал увидеть сообщение unauthorized, а не unable to load credentials).

Я использую Java SDK для вызова SSM GetParameter, который, как я подтвердил, работает для чтения из параметров SSM при запуске из экземпляра EC2, поэтому я почти уверен, что проблема здесь в Codebuild.

Для дальнейшей диагностики проблемы я попытался добавить команду сборки для выполнения curl адреса метаданных экземпляра AWS:

curl 169.254.169.254/latest/meta-data/iam/info

Вместо того, чтобы возвращать метаданные экземпляра, как в обычной среде EC2, он просто истекает.

Таким образом, похоже, что корень проблемы в том, что среда сборки кода не работает с адресом поиска метданных AWS, что приводит к тому, что цепочка поставщиков AWS не может искать учетные данные.

Как я могу прочитать свои параметры SSM из сборки кода (без жесткого кодирования или использования переменных среды для учетных данных SDK)?


person Shorn    schedule 25.04.2018    source источник


Ответы (3)


Могу я спросить, почему вы не используете встроенный подход AWS CodeBuild? Вы можете получить параметры из SSM через спецификацию сборки вашего AWS CodeBuild проекта. Дополнительный вызов через Java SDK в этом случае устарел.

version: 0.2

env:
  parameter-store:
    key: "value"
    key: "value"

phases:
  build:
    commands:
      - command
      - command

хранилище параметров: требуется, если указан env и вы хотите получить пользовательские переменные среды, хранящиеся в хранилище параметров Amazon EC2 Systems Manager. Содержит сопоставление скаляров "ключ-значение", где каждое сопоставление представляет одну настраиваемую переменную среды, хранящуюся в хранилище параметров Amazon EC2 Systems Manager. ключ - это имя, которое вы будете использовать позже в командах сборки для ссылки на эту настраиваемую переменную среды, а значение - это имя настраиваемой переменной среды, хранящейся в хранилище параметров Amazon EC2 Systems Manager.

Дополнительную информацию см. В Справочнике по спецификациям сборки для AWS CodeBuild < / а>

person MaiKaY    schedule 25.04.2018

Ответ от MaiKaY - лучшее решение проблемы «как добавить значения параметров SSM в вашу сборку» (лучше, чтобы спецификация сборки была привязана к имени параметра SSM, а не к коду или сценариям сборки).

Но в случае, если кто-то еще наткнется на этот вопрос при решении той же проблемы - проблема была в базовом коде из исходного вопроса, что-то вроде ответа от Clare Liguori.

Я использовал недавний AWS SDK, но я использовал его неправильно. Я использовал простой конструктор класса AWSSimpleSystemsManagementClient, что редко бывает правильным.
Лучший способ создать вашего клиента - использовать класс AWSSimpleSystemsManagementClientBuilder, например:

AWSSimpleSystemsManagementClientBuilder.standard().build()
person Shorn    schedule 30.04.2018

Ваш AWS Java SDK, вероятно, устарел. Минимальная версия для получения учетных данных в CodeBuild - 1.11.16. https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html#troubleshooting-versions

person Clare Liguori    schedule 25.04.2018
comment
CodeBuild использует контейнеры для запуска сборок, поэтому вам нужно использовать конечную точку метаданных контейнера AWS, а не конечную точку метаданных экземпляра. Попробуйте запустить: curl 169.254.170.2 $ AWS_CONTAINER_CREDENTIALS_RELATIVE_URI - person Clare Liguori; 27.04.2018
comment
см. мой другой ответ. Возможно, стоит добавить это в качестве ответа на часто задаваемые вопросы, если он снова появится у кого-то другого. - person Shorn; 30.04.2018