我正在尝试使用 iOS Swift 访问 Lambda 函数,这是我设置的 AWS 角色
- 角色名称: ALLOW_LAMBDA_EXECUTE
- 通过对 AWS Lambda 完全访问权限的策略访问权限,AWS Lambda 执行、AmazonCognitoDeveloperAuthenticatedIdentity(AmazonCognitoDeveloperAuthenticatedIdentity(
- 信任关系:允许服务:lambda.amazonaws.com 和条件具有"未经身份验证"的 Cognito 标识
- Cognito 身份池:在未经身份验证的角色下ALLOW_LAMBDA_EXECUTE角色 未经身份验证的身份
- :已选中启用对未经身份验证的身份的访问
- 在 Lambda 中,对于函数 GetProcess((,具有 ExecutionRole: ALLOW_LAMBDA_EXECUTION
所有这些,当我使用我的 iPhone 应用程序(带有模拟器(执行相同的操作时,我会收到此错误。
"x-amzn-errortype" = **AccessDeniedException**;
-[AWSJSONResponseSerializer responseObjectForResponse:originalRequest:currentRequest:data:error:] | Response body:
**{"Message":"The role defined for the function cannot be assumed by Lambda."}**
我在这里错过了什么吗?
似乎您已将 Cognito 角色配置为由 Lambda 代入。
您必须为角色设置以下Trust Relationship
ALLOW_LAMBDA_EXECUTION
而不是ALLOW_LAMBDA_EXECUTE
:
{
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
}
经过深思熟虑,浏览了多个文档并做了一些 RnD,事情开始工作。
是的,信任关系应该有lambda执行和操作:sts:AssumeRoleWithWebIdentity,它应该有条件
{
"Version": "2018-1-30",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com",
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "identity-pool"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "unauthenticated"
}
}
}
]
}
现在,这不适用于 Lambdas 角色,因为它不能承担这个角色,我认为这是有道理的,因为它几乎没有这样做的能力。
因此,我创建了 2 个差异角色角色 1 - 将上述信任关系分配给 Cognito 联合身份访问角色 2 - 分配给 Lambda 角色的信任关系没有更改。
现在,我的iOS访问权限都可以使用cognito身份和AWS APIMicroServices...
确实花了一段时间才破解。