
Terraform AWS Provider の allowed_account_ids でオペミスを防ぐ
AWSで複数のアカウントを使い分けている環境では、間違ったアカウントでTerraformを実行してしまうという事故が発生しがちです。例えば、開発環境のつもりで作業していたのに、実は本番環境のクレデンシャルを使用していて、本番環境にリソースを作成してしまう、といったミスです。 あるいは逆に本番環境のリソースを誤って削除してしまうようなケースも考えられます。
Terraform AWS Provider の allowed_account_ids
設定を使用することで、このような危険なオペレーションミスを事前に防ぐことができます。
allowed_account_ids とは
allowed_account_ids
は、Terraformの実行を特定のAWSアカウントIDに制限するためのホワイトリスト機能です。この設定により、指定されたアカウントID以外でTerraformを実行しようとした場合、実行前にエラーで止めることができます。
設定方法
基本的な設定
provider "aws" {
region = "ap-northeast-1"
allowed_account_ids = [
"123456789012" # 開発環境のアカウントID
]
}
複数アカウントを許可する場合
provider "aws" {
region = "ap-northeast-1"
allowed_account_ids = [
"123456789012", # 開発環境
"987654321098" # ステージング環境
]
}
変数を使用した設定
variable "allowed_account_ids" {
description = "許可するAWSアカウントIDのリスト"
type = list(string)
default = ["123456789012"]
}
provider "aws" {
region = "ap-northeast-1"
allowed_account_ids = var.allowed_account_ids
}
※ allowed_account_idsを動的にする必要がある場合は殆どない気がしますが…
実際の動作例
正常なケース
# 許可されたアカウントIDでの実行
$ terraform plan
# 正常にプランが実行される
(略)
エラーケース
# 許可されていないアカウントIDでの実行
$ terraform plan
│ Error: AWS account ID not allowed: 999999999999
│
│ with provider["registry.terraform.io/hashicorp/aws"],
│ on providers.tf line 1, in provider "aws":
│ 1: provider "aws" {
まとめ
allowed_account_ids
は、Terraformによるインフラストラクチャ管理において重要な安全機能です。適切に設定することで:
- 間違ったアカウントでの実行を防げる
- 本番環境での意図しない変更を防げる
- チーム開発でのオペレーションミスを減らせる
特に複数のAWSアカウントを使用している環境では、必須の設定として導入することをお勧めします。