【发布时间】:2021-10-20 12:31:26
【问题描述】:
我使用 main.tf 中调用 SQS/main.tf 模块的代码创建了 2 个 SQS 和 DeadLetterQueue。我想销毁并再次创建它们,但这次,我想将 IAM/iam_role.tf 称为很好地与策略文档一起创建一个 IAM 角色。我不知道如何在我的 main.tf 中指定它,以便数据策略文档的资源部分同时创建 CloudTrail_SQS,意思是“CloudTrail_SQS_Data_Event”和“cloudTrail_SQS_Management_Event”和S3 的资源 arn 赋予角色访问用于 SQS 的 2 个不同存储桶的权限,即“cloudtrail-management-event-logs”和“aws-cloudtrail143-sqs-logs”
SQS/main.tf
resource "aws_sqs_queue" "CloudTrail_SQS"{
name = var.sqs_queue_name
redrive_policy = jsonencode({
deadLetterTargetArn = aws_sqs_queue.CloudTrail_SQS_DLQ.arn
maxReceiveCount = 4
})
}
resource "aws_sqs_queue" "CloudTrail_SQS_DLQ"{
name = var.dead_queue_name
IAM/iam_role.tf
resource "aws_iam_role" "access_role" {
name = var.role_name
description = var.description
assume_role_policy = data.aws_iam_policy_document.trust_relationship.json
}
trust policy
data "aws_iam_policy_document" "trust_relationship" {
statement {
sid = "AllowAssumeRole"
actions = ["sts:AssumeRole"]
principals {
type = "AWS"
identifiers = [var.account_id]
}
condition {
test = "StringEquals"
variable = "sts:ExternalId"
values = [var.external_id]
}
}
}
data "aws_iam_policy_document" "policy_document"{
statement{
actions = [
"sqs:GetQueueUrl",
"sqs:ReceiveMessage",
"sqs:SendMessage"
]
effect = "Allow"
resources = aws_sqs_queue.CloudTrail_SQS.arn
}
statement {
actions = ["sqs:ListQueues"]
effect = "Allow"
resources = ["*"]
}
statement {
actions = ["s3:GetObject", "s3:GetBucketLocation"]
resources = [
"arn:aws:s3:::${var.cloudtrail_event_log_bucket_name}/*"
]
effect = "Allow"
}
statement {
actions = ["s3:ListBucket"]
resources = [
"arn:aws:s3:::${var.cloudtrail_event_log_bucket_name}"
]
effect = "Allow"
}
statement {
actions = ["kms:Decrypt", "kms:GenerateDataKey","kms:DescribeKey" ]
effect = "Allow"
resources = [var.kms_key_arn]
}
}
main.tf
module "data_events"{
source = "../SQS"
cloudtrail_event_log_bucket_name = "aws-cloudtrail143-sqs-logs"
sqs_queue_name = "CloudTrail_SQS_Data_Event"
dead_queue_name = "CloudTrail_DLQ_Data_Event"
}
module "management_events"{
source = "../SQS"
cloudtrail_event_log_bucket_name = "cloudtrail-management-event-logs"
sqs_queue_name = "cloudTrail_SQS_Management_Event"
dead_queue_name = "cloudTrail_DLQ_Management_Event"
}
【问题讨论】:
-
现行政策有什么问题?有什么错误吗?
-
它创建了一个重复的角色,但我只想创建一个角色,然后授予该角色访问创建的 2 个 s3 存储桶的权限,还授予该角色访问创建的 2 个 SQS 的权限
-
为什么会创建重复角色?您的代码没有显示任何此类情况。事实上你根本没有使用
IAM/iam_role.tf。 -
我不确定我做错了什么。我希望能够同时调用 IAM 和 SQS,并让它只创建一个角色并授予该角色对 2 个 SQS 和 2 个 S3 的访问权限桶访问
-
我不知道如何在我的 main.tf 中引用那行代码
标签: amazon-web-services terraform