【Terraform】AWS providerの認証で詰まった

先日リモート環境から、terraformで管理しているAWSのresourceを更新する作業を始めようとして terraform init したところ、アクセスができずに詰まってしまった。

$ terraform init
Initializing modules...

Initializing the backend...
Error refreshing state: AccessDenied: Access Denied
    status code: 403, request id: XXXXXXXXXXXXXXXX, host id: xxxxxxxxxxxxxxxxxxxxxxxxxxxx

リモート環境でもawsに接続できるよう ~.aws/credentials ファイルにaccess keyとsecretを入れておいたのだが、Terraformのドキュメントを見たところ、 ~.aws/credentials を作るだけでは認証ができないことがわかった。

registry.terraform.io

shared credentials fileで認証しようと思う場合、 provider resourceの shared_credential_file にファイルパスを渡しておかなければいけない。よく考えればTerraformで使えるbackendはAWSだけではないので、shared credentials fileを単に置いておいただけでデフォルトで読み取ってくれることはない。

今回はproviderの設定を変えることができない状況だったが、Terraformの認証では環境変数があればshared credentials fileよりも高い優先度で認証に使われる。 AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION環境変数を正しく設定すると terraform init を行うことができた。