You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
However, there are other mechanism in place that complement the lock file:
Terraform verifies the certificate of the remote registry against your system’s trusted certificate store, preventing certain kinds of misdirection or man-in-the-middle attacks.
If you’re using the default direct installation method then Terraform checks the downloaded package against a set of approved checksums signed using a signature selected by the registry, so an attacker would need to compromise the checksums, the signature, and the package.
If you’re running terraform validate in an isolated environment without access to any credentials then you might conclude also that the risk of executing arbitrary untrusted code is relatively low in this case.
registry にある provider は署名されているので、それも含めて侵害する必要がある。
ただ CI で署名をしてて GitHub Account を乗っ取られたりすると署名では防げない。
Renovate による provider の自動アップデート
Renovate では required_providers の provider のバージョン制約で、 provider の version を固定することを強制し、
そのバージョン制約のバージョンを update するということをする。
.terraform.lock.hcl を更新せずにバージョン制約だけ上げると
terraform init
は失敗する。現状
https://github.com/suzuki-shunsuke/github-action-terraform-init/tree/v0.1.4 では
terraform init
に失敗したらterraform init -upgrade
を実行し、 .terraform.lock.hcl を更新し、自動でコミットするようになっている。以前自分が shell script で同様の処理を実装していた際は、 PR Author が Renovate の場合のみ同様の処理を行っていたが、
https://github.com/suzuki-shunsuke/github-action-terraform-init/tree/v0.1.4 では PR Author をチェックしなくなってしまっている
.terraform.lock.hcl の自動 update の必要性
まず Renovate で provider を自動 update するには .terraform.lock.hcl の自動 update が不可欠。
加えて、 terraform に詳しくない人が使う前提で考えると、ローカルで .terraform.lock.hcl を更新してもらうのはハードルが高い。
CI で丁寧なガイド(脳死でコマンド実行すれば OK) をコメントできれば改善するかもしれないが、それでも結構ハードルがある。
特に組織の規模が大きいと厳しい(小さければ教育すればよいし、コミュニケーションも取りやすい)
provider を working directory で管理せず、中央集権的に管理するという選択肢
これは mercari が採用している方法。
working directory ごとに update する必要がないし、使用する provider を中央集権的に管理することでサプライチェーン攻撃にも対応できる。
やるとしたら
自動で .terraform.lock.hcl を更新するリスク
バージョンをコードで管理し、再現性を保証するという意味では自動 update でも問題ない。
ただし、 .terraform.lock.hcl にはサプライチェーン攻撃を防ぐという機能もあり、自動 update してしまうとその効果を損なう可能性がある気がしている。
.terraform.lock.hcl には download された provider の checksum が記録されており、 terraform init で download された provider の checksum が .terraform.lock.hcl に記録された checksum と異なる場合、 terraform init が失敗し、改ざんを検知することができる。
しかし、自動で terraform init -upgrade を実行するということは、それを無視して .terraform.lock.hcl を改ざんされた provider の checksum で書き換えてしまうことになるのではないかと思われる。
.terraform.lock.hcl を更新するケース
Provider の信頼性をどう検証するのか
registry にある provider は署名されているので、それも含めて侵害する必要がある。
ただ CI で署名をしてて GitHub Account を乗っ取られたりすると署名では防げない。
terraform validate って credential なしでも実行できるのか。 provider さえダウンロードされていればできるってことかな
The text was updated successfully, but these errors were encountered: