1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWSアクセスキーを環境変数に格納し、Terraformに読み込み失敗時の対応方法:Error: validating provider credentials: retrieving caller identity from STS

Last updated at Posted at 2023-09-13

課題

Terraformの初心者ですが、
TerraformからAWSへアクセスする際に、いつも便宜上このように直接ソース内に書いたが、

variable "region" {
  default = "ap-northeast-1"
}

variable "access_key" {
  default = "自分のaccess_key"
}

variable "secret_key" {
  default = "自分のsecret_key"
}

# AWS プロバイダの設定
provider "aws" {
  access_key = var.access_key
  secret_key = var.secret_key
  region     = var.region
}

最近ソース内に書くと漏洩しやすいかというご意見を部署内から頂いて、
Windowsの環境変数に格納し、Terraformへ読み込む方法を調べてみました。

今回はこちらの記事の方法を試したけど、うまくいかなかった。。。

やり方、記事から抜粋↓↓↓

provider "aws" { }
$ export AWS_ACCESS_KEY_ID="自分のkey"
$ export AWS_SECRET_ACCESS_KEY="自分のkey"
$ export AWS_DEFAULT_REGION="ap-northeast-1"
$ terraform plan

結局私の場合、これだけ実行すると、以下のエラーが出た。。。

Planning failed. Terraform encountered an error while generating this plan.

╷
│ Error: validating provider credentials: retrieving caller identity from STS: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: fdef4df2-5afd-4e07-aa6e-be3039c0fc03, api error InvalidClientTokenId: The security token included 
in the request is invalid.
│
│   with provider["registry.terraform.io/hashicorp/aws"],
│   on main.tf line 2, in provider "aws":
│    2: provider "aws" {

前提

・AWS-CLIインストール済み
・有効なAWSユーザーのアクセスキーを発行済み
・環境変数設定済み

$ export AWS_ACCESS_KEY_ID="自分のkey"
$ export AWS_SECRET_ACCESS_KEY="自分のkey"
$ export AWS_DEFAULT_REGION="ap-northeast-1"

image.png

・.aws配下の認証情報設定済み
image.png

・AWS-CLIでAWSへアクセスできることを確認済み
・Terraformインストール済み

対処方法

いろいろ調べて最善かわからないが、以下のサイトを見て解決した!

要するに、Windowsの環境変数をTerraformに読み込みたい場合、変数名の先頭にTF_VARをつけないと、Terraformがちゃんと読み込めないらしいです。

環境変数をこのように設定し、
image.png

Terraformのソースコードをこう書けば、

variable "region" {
  default = "ap-northeast-1"
}

variable "access_key " {

}

variable "secret_key " {

}

# AWS プロバイダの設定
provider "aws" {
  access_key = var.access_key
  secret_key = var.secret_key
  region     = var.region
}

最後、無事読み込めるようになった!!

※補足
英語の記事で見かけた意見ですが、
「Terraform変数の読み込み優先順位として、Windows環境変数が一番最後なのでエラーが起こりがち(読み込みが失敗しやすい、途中で何かにより上書きされやすい)、
いまはWindows環境変数おすすめしない、、、terraformのvarとして書くかtfvarファイル内に格納するかがベター」というのがあった。。。

今回はAWS_ACCESS_KEY_IDがうまくTerraformに読み込めないのは私のWindows環境内だけの問題かもしれないんすね。。。

終わりに

AWSアクセスの扱い方について、やり方はいろいろあるのが分かった!

結局Windows環境変数で管理するのは失敗しやすいかもしれない、terraformのvarとして書くかtfvarファイル内に格納するのがベターかもしれない、というのがあった。。。

しかし、PJのセキュリティ制約を考慮するとTerraformファイル内に書いちゃっダメ、っていう場合もあるよね。。。

場合によってどっちが最善か考える必要があるかもしれない。。。

今回はTF_VARをつけて対応したが、機会があればほかのやり方も検討してみたいと思った!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?