Рейтинг:0

Доступ к службе метаданных EC2 из экземпляра CodeBuild

флаг vn

Я запускаю док-контейнер из AWS CodeBuild внутри своего VPC. На хосте у меня нет проблем с запуском aws sts получить идентификатор вызывающего абонента без учетных данных. Например.:

aws sts получить идентификатор вызывающего абонента
{
    "UserId": "[отредактировано]",
    "Аккаунт": "[отредактировано]",
    "Arn": "arn:aws:sts::[отредактировано]:предполагаемая-роль/[отредактировано]"
}

Однако внутри контейнера докера я получаю сообщение об ошибке при попытке получить свою личность:

% aws sts получить идентификатор вызывающего абонента
Не удалось связаться со службой метаданных EC2.

Не удалось найти учетные данные. Вы можете настроить учетные данные, запустив «aws configure».

Я предполагаю, что это связано с тем, что я не могу связаться со службой метаданных EC2 для получения ключей роли, но я подумал, что это должно «просто работать», поскольку контейнер должен иметь доступ к той же сети, что и хост.

Поэтому я отступил и еще раз посмотрел на хост - похоже, я не могу получить доступ к службе метаданных на http://169.254.169.254:

# curl -kv http://169.254.169.254/latest/meta-data/public-hostname
* Попытка 169.254.169.254:80...
* Установлен TCP_NODELAY
* Ошибка немедленного подключения для 169.254.169.254: неверный аргумент
* Закрытие соединения 0
curl: (7) Не удалось подключиться к серверу

Как авс стс работает на хосте? Я думал, что интерфейсу командной строки AWS нужен доступ к этой службе метаданных, если учетные данные не были предоставлены. Как я могу заставить его работать внутри контейнера (я не хочу передавать долгоживущие токены в переменных среды)?

(отредактировано с дополнительными сведениями, полученными при непосредственном изучении SessionManager в экземпляре CodeBuild)

Tim avatar
флаг gp
Tim
CodeBuild строится в контейнерах, а не в EC2, хотя я предполагаю, что в конечном итоге контейнеры находятся в EC2. Я думаю, нет никакого способа получить метаданные экземпляра. То же самое происходит в RDS/Oracle, вы не можете получить доступ к роли экземпляра. Одним из обходных путей является передача учетных данных в параметре.
DrTeeth avatar
флаг vn
Проблема в том, что мне на самом деле понадобятся учетные данные, включая управление ими, их ротацию, передачу их как env vars и т. д. Смысл ролей экземпляра в том, что я могу просто сказать: «Этот проект CodeBuild должен иметь эти разрешения», и все готово. . И это работает на экземпляре CodeBuild, просто не внутри контейнера докера, созданного на этом экземпляре, и я не уверен, как это происходит, похоже, не соответствует тому, как документирован интерфейс командной строки AWS. Если это так, как я могу получить учетные данные от роли, чтобы передать их контейнеру?
Рейтинг:2
флаг vn

Лучшее, что я нашел для этого до сих пор ...

Спасибо за комментарий от @Tim, CodeBuild работает на ECS. При этом он извлекает учетные данные из учетных данных контейнера. Очевидно, они взяты с другого IP-адреса, доступ к которому можно получить через

169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

Вы можете извлечь учетные данные роли из этого вызова, а затем передать их в контейнер Docker.

Tim avatar
флаг gp
Tim
Интересно. Интересно, похож ли RDS. Если бы это произошло, это могло бы сказать нам МНОГО времени.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.