arj*_*air 4 amazon-web-services amazon-rds amazon-iam terraform terraform-provider-aws
我正在尝试使用Terraform创建AWS RDS 数据库实例。我正在尝试使用PostgreSQL 12作为数据库。除了监控部分之外,一切似乎都很好,我无法在脚本中指定“ monitoring_role_arn ”。
\n以下是我用于创建 PostgreSQL 数据库实例的 Terraform 脚本:
\nrds.tf
\n# AWS PSQL RDS Instance \nresource "aws_db_instance" "test-DB" {\n\n depends_on = [aws_security_group.test-PSQL-DB-SG, aws_iam_role.test-IAM-Role-RDS]\n\n // General Configurations\n name = "testdb"\n identifier = "am-poc-spoke1-db"\n engine = "postgres"\n engine_version = "12.5"\n instance_class = "db.t2.micro" \n parameter_group_name = "default.postgres12"\n port = "5432"\n\n // Authentication\n username = "postgres"\n password = "postgres"\n\n // Storage Configurations\n storage_type = "gp2"\n allocated_storage = 20\n max_allocated_storage = 100\n\n // Networking and Security \n vpc_security_group_ids = [aws_security_group.test-PSQL-DB-SG.id]\n availability_zone = "ap-southeast-1a"\n publicly_accessible = false\n\n // Backup Configuration\n backup_retention_period = 7\n backup_window = "16:00-16:30"\n copy_tags_to_snapshot = true\n\n // Monitoring and Performance Insight\n performance_insights_enabled = true\n performance_insights_retention_period = 7\n\n monitoring_interval = "60"\n monitoring_role_arn = aws_iam_role.test-IAM-Role-RDS.arn\n enabled_cloudwatch_logs_exports = ["postgresql"]\n\n // Other Configurations\n auto_minor_version_upgrade = false\n deletion_protection = false\n skip_final_snapshot = true\n\n tags = {\n Name = "test-DB"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n由于“monitoring_role_arn”需要具有“AmazonRDSEnhancedMonitoringRole”策略的 AWS IAM 角色,因此我也为此创建了一个脚本。
\niam 角色.tf
\n# IAM Role for RDS Enhanced Monitoring\nresource "aws_iam_role" "test-IAM-Role-RDS" {\n\n name = "test-IAM-Role-RDS"\n assume_role_policy = jsonencode({\n Version = "2012-10-17"\n Statement = [\n {\n Action = "sts:AssumeRole"\n Effect = "Allow"\n Sid = ""\n Principal = {\n Service = "ec2.amazonaws.com"\n }\n },\n ]\n })\n\n tags = {\n Name = "test-IAM-Role-RDS"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n然后将策略添加到 IAM 角色。
\niam 角色策略.tf
\n# IAM Role Policy for RDS Enhanced Monitoring\nresource "aws_iam_role_policy" "test-Enhanced-Monitoring-Policy" {\n\n depends_on = [aws_iam_role.test-IAM-Role-RDS]\n\n name = "test-Enhanced-Monitoring-Policy"\n role = aws_iam_role.test-IAM-Role-RDS.id\n\n policy = jsonencode({\n "Version": "2012-10-17",\n "Statement": [{\n "Sid": "EnableCreationAndManagementOfRDSCloudwatchLogGroups",\n "Effect": "Allow",\n "Action": [\n "logs:CreateLogGroup",\n "logs:PutRetentionPolicy"\n ],\n "Resource": [\n "arn:aws:logs:*:*:log-group:RDS*"\n ]\n },\n {\n "Sid": "EnableCreationAndManagementOfRDSCloudwatchLogStreams",\n "Effect": "Allow",\n "Action": [\n "logs:CreateLogStream",\n "logs:PutLogEvents",\n "logs:DescribeLogStreams",\n "logs:GetLogEvents"\n ],\n "Resource": [\n "arn:aws:logs:*:*:log-group:RDS*:log-stream:*"\n ]\n }\n ]\n })\n}\nRun Code Online (Sandbox Code Playgroud)\n运行时'terraform plan'没有显示错误。但是一旦我运行'terraform apply',我就会收到以下错误。
\n\n错误:创建数据库实例时出错:InvalidParameterValue:IAM 角色 ARN 值无效或不包含以下权限所需的权限:\nENHANCED_MONITORING \xe2\x94\x82 状态代码:400,请求 ID:\n59e6127d-f39a-453d-885a-868e38415fc1 , {
\n
现在有人如何解决这个问题吗?
\n没有使用内联策略,而是使用托管策略AmazonRDSEnhancedMonitoringRole。也就是说,我们直接将 AWS 托管策略添加到我们的 IAM 角色中。
此外,我已将服务从IAM 角色更改ec2.amazonaws.com为monitoring.rds.amazonaws.comIAM 角色。该错误实际上是因为我们没有进行此更改而触发的。认为它也适用于内联策略,但我们可以仅使用 AWS 托管策略来避免额外的代码行,而不是创建新的内联策略。
完整变更:
iam.tf
# IAM Role for RDS Enhanced Monitoring
resource "aws_iam_role" "test-IAM-Role-RDS" {
name = "test-IAM-Role-RDS"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Sid = ""
Principal = {
Service = "monitoring.rds.amazonaws.com"
}
},
]
})
managed_policy_arns = ["arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole"]
tags = {
Name = "test-IAM-Role-RDS"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4029 次 |
| 最近记录: |