Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

発生事象

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を作成しようとしてエラーが発生する。

n-ishida
主にSIでアプリ開発してきたが、今は…なんだろう? AWS, SQL, VB.NET, php, python。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした