无权承担所提供的角色
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
再见!
我正在关注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
再见!