Создание правила CloudWatch с AWS CloudFormation без привязки к роли - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь создать правило CloudWatch, которое запускается по расписанию и выполняет конечный автомат (пошаговые функции). Я использую CloudFormation для создания этого, и все создается хорошо, за исключением связи роли IAM, используемой правилом, с самим правилом. Вот что я имею в виду:

Обратите внимание, что в разделе «Использовать существующую роль» оно пустое.

enter image description here

Вот часть шаблона CF, которая касается правила и его роли.

"SFInvoke":{
    "Type": "AWS::IAM::Role",
    "Properties": {
      "AssumeRolePolicyDocument": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": {
                "Fn::Sub": "states.${AWS::Region}.amazonaws.com"
              }
            },
            "Action": "sts:AssumeRole"
          }
        ]
      },
      "Policies": [
        {
          "PolicyName": "StepFunctionsInvoke",
          "PolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
              {
                "Effect": "Allow",
                "Action": [
                  "states:StartExecution"
                ],
                "Resource": { "Ref" : "StateMachine"}
              }
            ]
          }
        }
      ]
    }
  },
  "CloudWatchStateMachineSDCEventRule": {
    "Type":"AWS::Events::Rule",
    "Properties": {
      "Description":"CloudWatch trigger for the InSite Static Data Consumer",
      "ScheduleExpression": "rate(5 minutes)",
      "State":"ENABLED",
      "Targets":[{
        "Arn":{ "Ref" : "StateMachine"},
        "Id":"StateMachineTargetId",
        "RoleArn":{
          "Fn::GetAtt": [
            "SFInvoke",
            "Arn"
          ]
        }
      }]
    }
},

1 Ответ

0 голосов
/ 07 ноября 2018

Вы хотите, чтобы роль SFInvoke появилась на Use existing role selector?

Если это так, вам нужно установить Принципал на events вместо states.

Вы редактируете цель события на скриншоте выше, а не функцию шага. Принципал определяет службу, которая может взять на себя роль, в вашем случае это служба событий.

Попробуйте это для создания роли:

"SFInvoke":{
  "Type": "AWS::IAM::Role",
  "Properties": {
    "AssumeRolePolicyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "events.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    },
    "Policies": [
      {
        "PolicyName": "StepFunctionsInvoke",
        "PolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "states:StartExecution"
              ],
              "Resource": { "Ref" : "StateMachine"}
            }
          ]
        }
      }
    ]
  }
}
...