【问题标题】:Terraform to call an SSM documentTerraform 调用 SSM 文档
【发布时间】:2021-05-20 16:25:33
【问题描述】:

有人可以帮我吗? 我正在尝试创建自动化以定期停止 ec2 实例。我知道如何使用数据源:

    data "aws_ssm_document" "ssm_doc" {
      name            = "AWS-StopEC2Instance"
      document_format = "JSON"
    }

当我尝试创建关联时:

    resource "aws_ssm_association" "example" {
      name = ssm_doc
      
    
      targets {
        key    = "InstanceIds"
        values = [aws_instance.ex.id]
      }
    }

当我运行它时,我得到了错误: Error creating SSM association: ValidationException: The assume role is invalid.

谁能帮助我并告诉我如何通过这个角色?

【问题讨论】:

  • name = ssm_doc不应该是这样name = data.aws_ssm_document .ssm_doc.name吗?我假设您已经拥有正确的权限。
  • 对于 data.ssm_doc,你是对的。这不是一个完整的例子。我只是想知道如何指定角色?因为,我没有任何方法可以在 aws_ssm_association 中传递它

标签: amazon-web-services terraform aws-ssm


【解决方案1】:

根据文档aws_ssm_association,此资源没有iam role 特定配置。所以错误可能在其他地方。

来自文档Troubleshooting Systems Manager Automation

无效的代入角色

运行自动化时,代入角色要么在 Runbook 中提供,要么作为 Runbook 的参数值传递。如果未正确指定或配置代入角色,可能会出现不同类型的错误。

你需要检查你正在导入的ssm_doc,它基本上只是一个cloudformation模板,所以你必须更正那里的角色。

Method 2: Use IAM to configure roles for Automation

【讨论】:

    【解决方案2】:

    AWS-StopEC2Instance 采用AutomationAssumeRole 参数。您必须为 SSM 提供角色以承担执行您的代码。例如:

    
    resource "aws_iam_role" "ssm" {
      path               = "/"
      assume_role_policy = <<EOL
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": ["ec2.amazonaws.com", "ssm.amazonaws.com"]
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    EOL
    
      managed_policy_arns = ["arn:aws:iam::aws:policy/service-role/AmazonSSMAutomationRole"]
    
      inline_policy {
        name = "my_inline_policy"
    
        policy = jsonencode({
          Version = "2012-10-17"
          Statement = [
            {
              Action   = ["iam:PassRole"]
              Effect   = "Allow"
              Resource = "*"
            },
          ]
        })
      }
    }
    

    同样aws_ssm_association.example 中的targets 块适用于CommandPolicy 或速率控制Automation 的SSM 文档类型。对于Automation的简单执行,不需要targets

    resource "aws_ssm_association" "example" {
    
      name = "AWS-StopEC2Instance"
      
      parameters = {
          AutomationAssumeRole = aws_iam_role.ssm.arn
          instanceIds = aws_instance.ex.id
      }  
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 1970-01-01
      • 2018-07-27
      • 2021-12-11
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      相关资源
      最近更新 更多