我正在尝试使用boto3的“ assume_role_with_web_identity”将Amazon Cognito给我的令牌交换为在身份池上定义的角色,但这会给我这个错误:
“ botocore.exceptions.ClientError:调用AssumeRoleWithWebIdentity操作时发生错误(AccessDenied):访问被拒绝”
我一定错过了保单上的某些内容吗?
我已经尝试将lambda的政策更改为此:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogStream"
],
"Resource": [
"arn:aws:logs:us-west-2:xxx:log-group:/aws/lambda/xxx:*"
],
"Effect": "Allow"
},
{
"Action": [
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:us-west-2:xxx:log-group:/aws/lambda/rxx:*:*"
],
"Effect": "Allow"
},
{
"Sid": "PermitAssumeRole",
"Action": [
"sts:AssumeRole"
],
"Effect": "Allow",
"Resource": [
"arn:aws:iam::xxx:role/Auth_Role",
"arn:aws:iam::xxx:role/Cognito_Unauth_Role"
]
}
]
}
我在boto3上的代码:
x = trial.assume_role_with_web_identity(RoleArn="arn:aws:iam::xxx:role/xxx",
RoleSessionName="xx",WebIdentityToken=response['xx']['xx'])
我希望它能够承担我创建的IAM的角色。
答案 0 :(得分:0)
信任策略应与许可策略分开。
答案 1 :(得分:0)
就像@franziga所说,将您的信任策略(PermitAssumeRole
语句)与其余策略(权限策略)分开。同样,如果Lambda需要担任您的角色,那么您的信任政策也必须像
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
此外,如果您希望Lambda
与Cognito authenticated
和unauthenticated
角色具有相同的访问权限,则必须在角色中为Lambda添加这些权限。据我所知,您不能将一个角色附加到另一个角色。