AWS - ECS загружает файлы S3 в сценарии точки входа - PullRequest
0 голосов
/ 21 октября 2019

Привет всем!

Код: (entrypoint.sh)

printenv
CREDENTIALS=$(curl -s "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI")

ACCESS_KEY_ID=$(echo "$CREDENTIALS" | jq .AccessKeyId)
SECRET_ACCESS_KEY=$(echo "$CREDENTIALS" | jq .SecretAccessKey)
TOKEN=$(echo "$CREDENTIALS" | jq .Token)

export AWS_ACCESS_KEY_ID=$ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=$SECRET_ACCESS_KEY
export AWS_SESSION_TOKEN=$TOKEN

aws s3 cp s3://BUCKET/file.txt /PATH/file.txt

Проблема:

Я пытаюсь получить файлы AWS S3 в ECS по мотивам: Документация AWS (Но я получаю S3 напрямую, а не через конечную точку VPC)Я настроил политику корзины и политику ролей (которая передается в taskDefinition как taskRoleArn & executeRoleArn)Локально, когда я выбираю с помощью aws cli и передаю временные учетные данные (которые я зарегистрировал в ECS с помощью команды printenv в сценарии точки входа), все работает нормально. Я могу сохранить файлы на моем компьютере. На ECS у меня ошибка:

fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

Где я могу найти решение? У кого-то была похожая проблема?

1 Ответ

0 голосов
/ 21 октября 2019

Важно: если вы работаете внутри AWS, настоятельно рекомендуется использовать сервисную роль AWS ECS или роль задачи ECS или роль EC2. вам нужно извлечь учетные данные из метаданных.

Но похоже, что текущая роль имеет разрешение на s3 или точка входа не экспортирует должным образом переменную Environment.

Если экземпляр вашего контейнера уже выполняет роль помощникатогда не нужно экспортировать Accesskey, просто вызовите aws s3 cp s3://BUCKET/file.txt /PATH/file.txt, и он должен работать.

Роли IAM для задач

С ролями IAM для задач Amazon ECSвы можете указать роль IAM, которая может использоваться контейнерами в задаче. Приложения должны подписывать свои запросы API AWS с помощью учетных данных AWS, и эта функция предоставляет стратегию управления учетными данными для использования вашими приложениями, подобно тому, как профили экземпляров Amazon EC2 предоставляют учетные данные для экземпляров EC2. Вместо создания и распространения учетных данных AWS среди контейнеров или использования роли экземпляра EC2 вы можете связать роль IAM с определением задачи ECS или операцией API RunTask.

Таким образом, когда вы назначаете роль дляЗадача ECS или служба ECS ваша точка входа будет настолько простой.

printenv
aws s3 cp s3://BUCKET/file.txt /PATH/file.txt

Кроме того, ваш экспорт не будет работать так, как вы ожидаете, лучший способ передать ENV в форму контейнера определение задачи , export в этом случае не будет.

Я предлагаю назначить роль задаче ECS, и она должна работать так, как вы ожидаете.

...