TerraformでSecurity Hubのメンバー追加する(AWS Oragnizations利用時)

AWS Organizationsと連携してSecurityHubを使用し、メンバーアカウントの有効化をTerraformで行う場合のメモ

CLIでは下記コマンドを実行する。

$ aws securityhub create-members \
  --account-details /
  [{"AccountId":"追加するメンバーアカウントのID"}]

ではTerraformだとどうなるか

下記のresourceが使えそうなのだが、実際にはエラーになる。

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/securityhub_member

resource "aws_securityhub_member" "example" {
 depends_on = [aws_securityhub_account.example]
 account_id = "123456789012"
 email      = "example@example.com"
 invite     = true
}
╷
│ Error: Error inviting Security Hub member 123456789012: UnprocessedAccounts is not empty
│ 
│   with aws_securityhub_member.example,
│   on securityhub.tf line 12, in resource "aws_securityhub_member" "example":
│   1: resource "aws_securityhub_member" "example" {
│ 
╵

どうも、内部的には CreateMember APIを呼び出しているようだが、うまくいってないようである。

なお、AWS CLIでinvite-membersを呼び出すとエラーになるが、Terraformでも同様の状態でエラーになっていると見られる。

$ aws securityhub invite-members --account-ids 123456789012
{
   "UnprocessedAccounts": [
       {
           "AccountId": "123456789012",
           "ProcessingResult": "The request is rejected because member account's email address is missing."
       }
   ]
}

create-membersでは問題ないのだが…。

$ aws securityhub create-members \
--account-details '[{"AccountId": "123456789012"}]'
{
   "UnprocessedAccounts": []
}

ということで一旦Terraformでコマンドを呼び出す方式にした

locals {
 account_ids = jsonencode([
   { AccountId = "123456789012" },
 ])
}

resource "null_resource" "add_member_account" {
 depends_on = [aws_securityhub_account.default]
 provisioner "local-exec" {
   command    = "aws securityhub create-members --account-details '${local.account_ids}'"
   on_failure = fail
 }
}

issueは上がっているようなので早く対応してくれたら助かるな...



この記事が気に入ったらサポートをしてみませんか?