После создания AMI с упаковщиком на основе AMI Amazon Linux, если я запускаю экземпляр этого AMI и ssh, я вижу временную пару ключей упаковщика в файле ~/.ssh/authorized_keys
, что является дырой в безопасности. Я ожидал, что этот файл будет удален до сохранения AMI.
Мне удалось обойти это, явно удалив ~/.ssh/authorized_keys
в шаблоне упаковщика (подробности ниже)
Версия упаковщика
Пакер v0.10.0
Хост-платформа
Выпуск CentOS Linux 7.2.1511 (Core)
Вывод журнала отладки из PACKER_LOG=1 packer build template.json
.
Вот результат пакера:
https://gist.github.com/tleyden/4cc13b530f08bcaef04f5233bf43daee
Извините, я не делал PACKER_LOG = 1, но при необходимости могу запустить его повторно.
_Простейший пример шаблона и сценариев_, необходимых для воспроизведения ошибки
Сценарий:
Использование плагина Jenkins Packer и передача переменных в упаковщик через:
-var 'source_ami=${source_ami}' -var 'ssh_username=${ssh_username}' -var 'couchbase_server_package_name=${couchbase_server_package_name}' -var 'couchbase_server_package_url=${couchbase_server_package_url}' -var 'couchbase_sync_gateway_package_base_url=${couchbase_sync_gateway_package_base_url}' -var 'couchbase_sync_gateway_package=${couchbase_sync_gateway_package}' -var 'couchbase_server_version=${couchbase_server_version}' -var 'couchbase_sync_gateway_version=${couchbase_sync_gateway_version}' -var 'couchbase_server_edition=${couchbase_server_edition}' -var 'sync_gateway_edition=${sync_gateway_edition}'
Обходной путь
Я добавил в шаблон упаковщика следующий провайдер:
{
"type": "shell",
"inline": [
"rm /home/ec2-user/.ssh/authorized_keys"
]
}
и после запуска AMI он содержал только ключ, выбранный в мастере запуска AWS, а не временную пару ключей упаковщика.
Спасибо, что нашли время сообщить об этом.
Так работает AWS или, более конкретно, как работает cloud-init. То, что вы описываете как обходной путь, на самом деле вам и следует делать.
Извините за возрождение мертвой темы, однако, поскольку я нашел ее, а затем нашел дополнительную информацию от Amazon, я подумал, что внесу ее сюда для других:
https://aws.amazon.com/articles/how-to-share-and-use-public-amis-in-a-secure-manner/
Короче говоря, для удаления всех файлов authorized_keys они рекомендуют запустить следующее от имени пользователя root:
find / -name "authorized_keys" -exec rm -f {} \;
Внимание! В команде на связанной странице используются обычные дефисы (-) и что-то еще, что будет возвращать ошибки. Набрав команду вручную или скопировав команду, указанную выше, должно работать.
Я собираюсь заблокировать этот выпуск, потому что он был закрыт _30 дней_ ⏳. Это помогает нашим специалистам по сопровождению находить активные проблемы и сосредоточиться на них.
Если вы обнаружили проблему, похожую на эту, откройте новую проблему и заполните шаблон проблемы, чтобы мы могли зафиксировать все сведения, необходимые для дальнейшего расследования.
Самый полезный комментарий
Спасибо, что нашли время сообщить об этом.
Так работает AWS или, более конкретно, как работает cloud-init. То, что вы описываете как обходной путь, на самом деле вам и следует делать.