Cognito Credentials не авторизован для выполнения API-интерфейса Execute. - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь создать контроль доступа на основе ролей, используя 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 / пользователь с явным отказом "

Это работало отлично и начал вызывать эту ошибку после удаления и повторного использования стеков формирования облаков.

1 Ответ

2 голосов
/ 18 марта 2020

Судя по комментариям, проблема была explicit deny. Из документов :

Если код находит хотя бы одно явное отрицание, которое применимо, код возвращает окончательное решение об отказе.

В основном, explicit deny всегда побеждает любого allow.

...