【发布时间】:2020-06-29 07:37:13
【问题描述】:
我正在尝试使用 AWS Cognito 组创建基于角色的访问控制。我定义了以下角色和策略来拒绝访问资源
CognitoAuthRole:
Type: AWS::IAM::Role
Properties:
Path: /
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Federated: "cognito-identity.amazonaws.com"
Action:
- "sts:AssumeRoleWithWebIdentity"
Condition:
StringEquals:
"cognito-identity.amazonaws.com:aud":
Ref: CognitoIdentityPool
"ForAnyValue:StringLike":
"cognito-identity.amazonaws.com:amr": authenticated
Policies:
- PolicyName: "CognitoAuthorizedPolicy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Deny"
Action: "*"
Resource: "*"
然后我创建了一个名为 admin incognito user pool 的组,并分配了一个具有策略的角色,让用户按如下方式调用 API
CognitoUserPoolGroupAdmin:
Type: AWS::Cognito::UserPoolGroup
Properties:
UserPoolId:
Ref: CognitoUserPool
GroupName: Admin
Precedence: 0
RoleArn:
Fn::GetAtt:
- AdminRole
- Arn
AdminRole:
Type: AWS::IAM::Role
Properties:
Path: /
RoleName: AdminRole
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Federated: "cognito-identity.amazonaws.com"
Action:
- "sts:AssumeRoleWithWebIdentity"
Condition:
StringEquals:
"cognito-identity.amazonaws.com:aud":
Ref: CognitoIdentityPool
"ForAnyValue:StringLike":
"cognito-identity.amazonaws.com:amr": authenticated
Policies:
- PolicyName: CognitoAdminPolicy
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "execute-api:Invoke"
Resource:
- arn:aws:execute-api:ap-south-1:****:***/*/GET/user
然后我创建了一个用户并添加到组管理员并获得临时凭据,然后尝试调用 API 并在邮递员中得到以下 403 错误
“用户: arn:aws:sts::******:assumed-role/auth-service-dev-CognitoAuthRole-1JO2U7LKRJRBB/CognitoIdentityCredentials 无权执行:execute-api:Invoke on resource: arn:aws:execute-api:ap-south-1:********2015:****/dev/GET/user 明确否认”
这运行良好,并在删除和重新部署云形成堆栈后开始导致此错误。
【问题讨论】:
-
您已明确拒绝
CognitoAuthorizedPolicy中的所有内容。显式拒绝总是胜出。 -
@Marcin。 AWS 不是更优先考虑 Group 角色吗?
-
没有。
explicit deny在权限评估链中的任何位置都会覆盖任何允许。检查政策是如何评估的here。 -
@Marcin 谢谢你给了我一个提示。我错过了在 ID 池的 Authentication Providers 部分配置 Authenticated role selection。将其从“使用默认角色”更改为“从令牌中选择角色*”修复了问题。您提供的资源告诉我,我对评估工作方式的理解是错误的。
-
没问题。刚刚添加了答案以供将来参考。
标签: amazon-web-services aws-api-gateway amazon-cognito serverless-framework