目次
はじめに
こんにちは、ディーネットの牛山です。
今回は、Terraformトラブルシューティングについて記載します。
概要
TerraformでAssume Roleした際、CloudTrailキーポリシーに無効なプリンシパルを含むエラーによりデプロイ失敗となってしまいました。
次の記事で紹介している形でAssume Roleしていますが、Assume RoleせずAWS環境へデプロイする形ですと、正常にできる状態でした。
TerraformでAssume Role先のAWSアカウントへデプロイしてみた
Assume Roleしないデプロイは次のような形を指します。
terraformを利用した単一EC2インスタンス上でのWordPressの構築
事象確認バージョン
事象を確認しているバージョンは次の通りです。
- Terraformバージョン
- 1.9.4
- Terraformプロバイダーバージョン
hashicorp/aws 5.62.0
実際のエラー内容
# terraform apply
?
│ Error: creating CloudTrail Trail (cloudtrail): operation error CloudTrail: CreateTrail, https response error StatusCode: 400, RequestID: ba4d7656-0083-41c5-a29e-4cc607a61500, InsufficientS3BucketPolicyException: Incorrect S3 bucket policy is detected for bucket: cloudtrail-log
│
│ with aws_cloudtrail.aws_cloudtrail_common-cloudtrail,
│ on cloudtrail.tf line 8, in resource "aws_cloudtrail" "aws_cloudtrail_common-cloudtrail":
│ 8: resource "aws_cloudtrail" "aws_cloudtrail_common-cloudtrail" {
│
?
?
│ Error: updating KMS Key Policy (3a208023-7716-4821-b540-24ab29cb4781) policy: operation error KMS: PutKeyPolicy, https response error StatusCode: 400, RequestID: d1e7155f-41b9-4d53-9d8a-ca5078a6fa89, MalformedPolicyDocumentException: Policy contains a statement with one or more invalid principals.
│
│ with aws_kms_key_policy.aws_kms_key_policy_common-cloudtrail-kms,
│ on kms.tf line 27, in resource "aws_kms_key_policy" "aws_kms_key_policy_common-cloudtrail-kms":
│ 27: resource "aws_kms_key_policy" "aws_kms_key_policy_common-cloudtrail-kms" {
---------------------------------------------------------------------------------------------
発生原因
変数 ${var.aws_account_id}
の中身が、012345678912 -> 12345678912となり先頭 0 が消失したことによるものです。
対処
変数 ${var.aws_account_id}
の先頭 0 が消えることによるデプロイ失敗なので変数を使用している箇所全部の先頭に 0 を付与し対処します。
イメージとして、「0${var.aws_account_id}
」のような不格好な形になってしまいますが応急的な対応とします。
変更後、applyで適用すると、AWSアカウントID箇所の変更差分に着目すると、正しい結果になっていますね。
# terraform apply
# aws_s3_bucket_policy.aws_s3_bucket_policy_aws_s3_bucket_common-cloudtrail-log will be updated in-place
~ resource "aws_s3_bucket_policy" "aws_s3_bucket_policy_aws_s3_bucket_common-cloudtrail-log" {
id = "cloudtrail-log"
~ policy = jsonencode(
~ {
~ Statement = [
~ {
~ Condition = {
~ StringEquals = {
~ "AWS:SourceArn" = "arn:aws:cloudtrail:ap-northeast-1:12345678912:trail/cloudtrail" -> "arn:aws:cloudtrail:ap-northeast-1:012345678912:trail/cloudtrail"
}
}
# (5 unchanged attributes hidden)
},
~ {
~ Condition = {
~ StringEquals = {
~ "AWS:SourceArn" = "arn:aws:cloudtrail:ap-northeast-1:12345678912:trail/cloudtrail" -> "arn:aws:cloudtrail:ap-northeast-1:012345678912:trail/cloudtrail"
# (1 unchanged attribute hidden)
}
}
~ Resource = "arn:aws:s3:::cloudtrail-log/AWSLogs/12345678912/*" -> "arn:aws:s3:::cloudtrail-log/AWSLogs/012345678912/*"
# (4 unchanged attributes hidden)
},
]
# (1 unchanged attribute hidden)
}
)
# (1 unchanged attribute hidden)
}
まとめ
ベストプラクティスな対処方法が見つからなかった為、応急的にしていますが、同じ様な事象に陥った方の参考になれば幸いです。
プロフィール
AWSの設計・構築をメインにおこなっています。
運用・保守をおこなう部署におりましたが、最近、アーキテクト課に異動しました。
日々精進しております。
LINK
クラウドベリージャム:プロフィールページ