LoginSignup
1
0

More than 5 years have passed since last update.

[Terraform] CloudTrail作成時に発生した InvalidCloudWatchLogsRoleArnException を解消。

Posted at

発生事象

Terraform で CloudTrail を作成しようとした際に、下記のエラーが発生した。

* aws_cloudtrail.trail: InvalidCloudWatchLogsRoleArnException: Access denied. Check the trust relationships for your role.

もう一度実行すると正常終了するため、タイミングの問題ですね。
(リソース作成完了と、そのリソースを参照する後続リソース作成処理のタイミング)

尚、これは CloudWatchLogs にログを出力するよう設定するときに発生する。
使用するtfリソースは以下。

  • aws_cloudtrail
  • aws_cloudwatch_log_group
  • aws_iam_role
  • aws_iam_role_policy

解消方法

これが問題解消のための必要最低限の設定か?と言われると「No」かもしれません。
冗長なところがあるかも。

① CloudWatchLogGroup 作成後にsleep。
作成完了して使えるようになるまで待つ。

resource "aws_cloudwatch_log_group" "cloudtrail" {
  ...
  provisioner "local-exec" {
    command = "sleep 10"
  }
}

②CloudTrailに付与するロールを作成し、ポリシーアタッチして、sleep。
権限付与して使えるようになるまで待つ。

resource "aws_iam_role" "cloudtrail" {
  ...
}

resource "aws_iam_role_policy" "cloudtrail" {
  role = "${aws_iam_role.cloudtrail.id}"
  ...
  provisioner "local-exec" {
    command = "sleep 10"
  }
}

③CloudTrailの作成は、LogGroupの作成とロールへのポリシー付与が完了するまで待つ。
「depend_on」で、sleepまで含めたリソース設定が完了してから走り出すようにする。

resource "aws_cloudtrail" "trail" {
  ...
  depends_on = ["aws_iam_role_policy.cloudtrail", "aws_cloudwatch_log_group.cloudtrail"]
}

考慮点

Terraform は、tfファイルに書かれた内容を解析して依存関係順に処理してくれる。
依存関係がないものは並列処理してくれる。

だが、依存関係があっても、リソースが確実に使える状態になっていることまでは確認してくれない。
時間の掛かるリソース作成処理がある場合は、明示的に待たせないとエラーになる可能性がある。

CloudTrail作成時にはロールに権限が付与されている必要があり、AWS的には依存関係がある。
だが、tfファイルの aws_cloudtrail に書くのは role_arn であるため、Terraformの解釈としてはポリシー付与までは依存関係に含まれない。
そのためCloudTrail作成とポリシー付与とが並列で動き、権限がないままCloudTrailを作成しようとしてエラーが発生する。

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