Ничто не остановит пользователя для создания / обновления / удаления ресурса вручную ( вручную Я имею в виду здесь: через консоль или облачную оболочку), если у него есть разрешения IAM для выполнения так.
В случае ручного обновления ресурса : если ресурс управляется Terraform, запуск terraform plan
предупредит вас о внесении изменения. Действительно, Terraform увидит разницу между описанием ресурса в вашем файле .tf
и реальностью. Если вы примените эти изменения, будут отменены изменения, сделанные пользователем вручную.
Запуск periodi c проверяет, чтобы проверить, были ли внесены некоторые изменения из Terraform (на ресурсах, управляемых Terraform), и это может быть хорошим идея предупредить вас, что кто-то что-то сделал вручную .
Но в случае вновь созданных ресурсов (вне Terraform), если ресурс не был импортирован в Terraform после создания (terraform import
), вы никогда не узнаете, что этот ресурс был создан, и вы не смогли отследить какие-либо изменения в этом ресурсе. Единственный способ предотвратить создание ресурса - ограничить разрешения IAM. Например, если никто (кроме учетной записи службы Terraform) не имеет разрешения storage.buckets.create
, никто (за исключением учетной записи службы Terraform) не сможет создать сегмент. То же относится и к обновлению ресурсов.
Если вы хотите, чтобы все ваши ресурсы управлялись Terraform, удалите разрешения на создание / обновление IAM для всех пользователей, кроме учетной записи службы Terraform. Но учтите, что:
- вы не можете создавать / обновлять все ресурсы GCP с помощью Terraform. Даже если провайдеры Terraform быстро растут, между новым продуктом GCP и его внедрением в провайдере Terraform GCP всегда будет некоторая задержка. Когда-то go, я помню, как я ждал ресурса Cloud Composer в Terraform , который появляется в версии 1.18.0 на 2018/09/17 , хотя Облако Composer было доступно с 2018/05/01 . Если я выбрал создание ресурсов только с Terraform, то мне пришлось бы подождать 4 месяца, прежде чем начать использовать Cloud Composer (это пример среди других)
- , иногда вы можете захотеть создать ресурсы за пределами Terraform Например, для целей тестирования. Если Terraform принудительно создаст / обновит все ресурсы в вашей организации, это будет невозможно. Подумайте о нетехнических пользователях, которые хотят временно создать ресурсы для проведения некоторых тестов: они, вероятно, не научатся использовать Terraform, поэтому они либо сдаются или просят кого-то создать ресурсы для них. По мере увеличения числа пользователей это должно стать громоздким
- рассуждением абсурда: хотите ли вы управлять всеми ресурсами, доступными с помощью Terraform? Если это так, то вы можете также управлять объектами хранилища с помощью Terraform, поскольку существует ресурс Terraform google_storage_bucket_object . За исключением некоторых очень специфических c случаев, вы не хотите управлять этими видами ресурсов с помощью Terraform (в случае с объектами хранения, подумайте об огромных файлах)
В заключение, управление всеми Ваши ресурсы в вашей организации, использующие Terraform и ограничивающие только учетную запись службы Terraform для создания / обновления / удаления ресурсов, безусловно, являются целью, к которой нужно стремиться, и должны быть выполнены настолько, насколько вы можете, но в действительности это не всегда полностью возможный. Критические ресурсы должны быть защищены, поэтому IAM для их обновления / удаления должен быть ограничен. Кроме того, роль owner не единственная, которая позволяет создавать / обновлять / удалять ресурсы. Вы должны быть очень осторожны с ролями, которые вы назначаете своим пользователям, чтобы гарантировать, что у них не будет такого разрешения, и, вероятно, вы будете полагаться на пользовательские роли, потому что предопределенные роли часто слишком широки.