Какова правильная политика AWS для того, чтобы мое приложение позволяло пользователям входить в AWS COGNITO?

Я использую Django Warrant для IAM:

from rest_framework.response import Response
from rest_framework.exceptions import AuthenticationFailed
from rest_framework.decorators import api_view
from django.apps import apps

@api_view(['POST'])
def login(request):
    username = request.data.get('email')
    password = request.data.get('password')

    if not username or not password:
        raise AuthenticationFailed('Username and password are required.', code=401)

    pool_id = getattr(settings, 'COGNITO_USER_POOL_ID', None)
    app_id = getattr(settings, 'COGNITO_APP_ID', None)
    region = getattr(settings, 'COGNITO_REGION', None)

    key = getattr(settings,'COGNITO_AWS_KEY',None)
    secret = getattr(settings,'COGNITO_AWS_SECRET',None)

    cognito = Cognito(
            user_pool_id=pool_id,
            client_id=app_id,
            user_pool_region=region,
            access_key=key,
            secret_key=secret,
            username=username
        )

    try:
        cognito.authenticate(password=password)
    except Exception as e:
        print(e)
        raise AuthenticationFailed(str(e), code=401)

    # Return tokens
    return Response({
        "access_token": cognito.access_token,
        "refresh_token": cognito.refresh_token,
    }, status=201)

Но несмотря на успешную аутентификацию:

aws cognito-idp admin-initiate-auth --user-pool-id eu-west-1_XXXXXX --client-id XXXXXXXX --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters USERNAME=YTYY,PASSWORD=YYYY

Возврат необходимых учетных данных:

{
    "ChallengeParameters": {},
    "AuthenticationResult": {
        "AccessToken": "XXXXXXXXXX...XXXXXX",
        "ExpiresIn": 3600,
        "TokenType": "Bearer",
        "RefreshToken": "XXXDDDXXXX",
        "IdToken": "XXXSSSXXX"
    }
}

Но вид сверху возвращает:

{
    "detail": "An error occurred (NotAuthorizedException) when calling the InitiateAuth operation: Password attempts exceeded"
}

Отвечает 401, Мои права IAM:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAdminUserPoolActions",
            "Effect": "Allow",
            "Action": [
                "cognito-idp:AdminInitiateAuth",
                "cognito-idp:AdminRespondToAuthChallenge",
                "cognito-idp:AdminGetUser",
                "cognito-idp:AdminSetUserPassword",
                "cognito-idp:ListUserPools",
                "cognito-idp:GetUser",
                "cognito-idp:ListGroups",
                "cognito-idp:AdminAddUserToGroup"
            ],
            "Resource": "arn:aws:cognito-idp:eu-west-1:962331388720:userpool/eu-west-1_XXXXXX"
        }
    ]
}

Что я теряю Я подозреваю, что моя политика неверна. Но какая из них правильная? Я определяю свои учетные данные в settings.py следующим образом:

COGNITO_USER_POOL_ID = os.getenv("COGNITO_USER_POOL_ID")
COGNITO_APP_ID = os.getenv("COGNITO_APP_ID")
COGNITO_REGION = AWS_REGION
COGNITO_AWS_KEY = os.getenv("COGNITO_AWS_KEY",None)
COGNITO_AWS_SECRET = os.getenv("COGNITO_AWS_SECRET",None)

if COGNITO_AWS_KEY is None:
    raise RuntimeError("AWS Cognito Key is not Defined")

if COGNITO_AWS_SECRET is None:
    raise RuntimeError("AWS Cognito Secret is not Defined")


Можете ли вы мне помочь?

Вернуться на верх