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は上がっているようなので早く対応してくれたら助かるな...