无权承担所提供的角色

Not authorized to assume the provided role

我正在关注AWS Step Functions tutorial。整个状态机流程是这样的

我有一个名为 step_functions_basic_execution 的角色,其策略为 AWSLambdaRole。我的 Step 函数状态机正在使用这个角色。

我的步进函数是

{
  "Comment": "A simple AWS Step Functions state machine that automates a call center support session.",
  "StartAt": "Open Case",
  "States": {
    "Open Case": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-west-2:829495130000:function:OpenCaseFunction",
      "Next": "Assign Case"
    }, 
    ...
}

对应的Open Case Lambda函数为

exports.handler = (event, context, callback) => {
    // Create a support case using the input as the case ID, then return a confirmation message   
   var myCaseID = event.inputCaseID;
   var myMessage = "Case " + myCaseID + ": opened...";   
   var result = {Case: myCaseID, Message: myMessage};
   callback(null, result);    
};

当我尝试 运行 时,第一步失败了 打开案例

输入是

{
  "inputCaseID": "001"
}

它抛出错误:

States.TaskFailed

Neither the global service principal states.amazonaws.com, nor the regional one is authorized to assume the provided role.

知道如何解决吗?谢谢

仔细检查该页面第 2、3 和 4 步中的所有内容。不幸的是,错误消息不够详细,我们无法确切了解发生了什么,但它与 IAM 设置有关。

感谢 Joel Kinzel 的指导。这是我的错误。

我在第 2c 步做错了。

On the Create Roles screen, leave AWS Service selected, select Step Functions

我选择了Lambda而不是Step Functions,甚至下一页我仍然添加了AWSLambdaRole,但它没有帮助解决问题。

您需要创建两个角色: 一种) lambda (LambdaExecutionRole) 的 IAM 角色。此角色不需要策略和以下信任关系定义:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

B) 第二个角色 (StatesExecutionRole) 是让 StateMachine 能够调用 lambda 函数。这些角色需要此策略定义:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

并且需要这种信任关系:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "states.us-east-2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

需要将 LambdaExecutionRole 分配给您的 lambda。 需要将 StatesExecutionRole 指定为用于执行 StateMachine 的角色。

我知道这是一个旧的 post 并且已经被批准为已解决, 但也许这会对某人有所帮助...

我遇到了类似的错误,但使用了另一个 aws 指南来创建角色: https://docs.amazonaws.cn/en_us/step-functions/latest/dg/tutorial-lambda-state-machine-cloudformation.html#lambda-state-machine-cfn-create-role

我的问题与地区有关。

我 运行 来自 eu-west-1 区域的 StepFunction 得到了与 posted 在问题上相同的错误:

States.TaskFailed

Neither the global service principal states.amazonaws.com, nor the regional 
one is authorized to assume the provided role.

尽管我的 stepFunction 角色配置与指南中描述的完全相同:

StatesExecutionRole:
 Type: "AWS::IAM::Role"
 Properties:
   AssumeRolePolicyDocument:
     Version: "2012-10-17"
     Statement:
       - Effect: "Allow"
         Principal:
           Service:
             - !Sub states.${AWS::Region}.amazonaws.com
         Action: "sts:AssumeRole"
   Path: "/"
   Policies:
     - PolicyName: StatesExecutionPolicy
       PolicyDocument:
         Version: "2012-10-17"
         Statement:
           - Effect: Allow
             Action:
               - "lambda:InvokeFunction"
             Resource: "*"

角色创建后,我注意到我角色的可信实体是:

"states.us-east-1.amazonaws.com"

trusted entities

所以,这就是为什么我不能 运行 来自 us-east-1 以外的其他地区的 SFN。 因此,如果您使用相同的指南,请注意从中创建的可信实体。 我最终将角色更改为通用服务配置 ("states.amazonaws.com"),如下所示:

StatesExecutionRole:
Type: "AWS::IAM::Role"
Properties:
  AssumeRolePolicyDocument:
    Version: "2012-10-17"
    Statement:
      - Effect: "Allow"
        Principal:
          Service:
            - "states.amazonaws.com"
        Action: "sts:AssumeRole"
  Path: "/"
  Policies:
    - PolicyName: StatesExecutionPolicy
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - "lambda:InvokeFunction"
            Resource: "*"

这解决了我的问题。

该角色需要有以下描述:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "states.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}

查看服务名称:是states.amazonaws.com不是lambda.amazonaws.com

再见!