【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
を作るだけでは認証ができないことがわかった。
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
を行うことができた。