Я пытаюсь создать контроль доступа на основе ролей, используя 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
А затем я создал пользователя и добавил в группу admin и получил временные учетные данные, а затем попытался вызвать API и получил следующую ошибку 403 в почтальоне
"User : arn: aws: sts :: ******: предполагаемая роль / auth-service-dev-CognitoAuthRole-1JO2U7LKRJRBB / CognitoIdentityCredentials не авторизован для выполнения: execute-api: вызов ресурса: arn: aws: execute-api: ap-south-1: ******** 2015: **** / dev / GET / пользователь с явным отказом "
Это работало отлично и начал вызывать эту ошибку после удаления и повторного использования стеков формирования облаков.