0

я установки пула Идентичность и с помощью Python и boto3 я могу получить ключ доступа, секретный ключ и маркер сеанса, который я предполагаю для неавторизированного пользователя:Как защитить шлюз API AWS с помощью Cognito?

import boto3 
boto3.setup_default_session(region_name='us-east-1') 
identity = boto3.client('cognito-identity', 
         region_name='us-east-1') 

response = identity.get_id(AccountId='12344566', IdentityPoolId='us-east-1:XXXXXX') 
identity_id = response['IdentityId'] 
print ("Identity ID: %s"%identity_id) 

response = identity.get_open_id_token(IdentityId=identity_id) 
token = response['Token'] 
print ("\nToken: %s"%(token)) 

resp = identity.get_credentials_for_identity(IdentityId=identity_id) 
secretKey = resp['Credentials']['SecretKey'] 
accessKey = resp['Credentials']['AccessKeyId'] 

print ("\nSecret Key: %s"%(secretKey)) 
print ("\nAccess Key %s"%(accessKey)) 

После того, как у меня есть эти подробности. Затем я пытаюсь вызвать API-шлюз. Я использую JavaScript для выполнения этой задачи, как я не нашел простой способ достижения результата я хочу в Python:

var apigClient = apigClientFactory.newClient({ 
    accessKey: 'aaaaaaaa', 
    secretKey: 'kkkkkkkk', 
    sessionToken: 'ssssss', 
    region: 'us-east-1' 
}); 

    apigClient.helloworldGet({},'') 
    .then(function(result){ 
     console.log("success!: " + result); 
    }).catch(function(result){ 
     console.log("FAIL: " + result); 
    }); 

Это терпит неудачу с ответом:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403 

. 

Я установка CORS правильно так как запрос OPTIONS завершается успешно. Если я использую свой основной ключ доступа и секрет для аутентификации скрипта. Если я отключу требование учетных данных IAM по методу get/helloworld, javascript будет успешно работать. Я приложил политику как AUTH и НЕСАНКЦ ролей, настройка Cognito для пула идентичности, эта политика выглядит следующим образом:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "dsfdsafasfdsfasdf", 
      "Effect": "Allow", 
      "Action": [ 
       "execute-api:Invoke" 
      ], 
      "Resource": [ 
       "arn:aws:execute-api:us-east-1:123456787:dsfsdfsdfs/dev/GET/helloworld" 
      ] 
     } 
    ] 
} 

Я пытался это прикрепление и как политики управляемой и инлайн политики.

Что мне здесь не хватает? Это как-то связано с попыткой доступа как пользователя, не прошедшего проверку подлинности (хотя роль, назначенная этому типу пользователя, имеет прикрепленную политику, которая должна позволить ей получить доступ к API)?

Обратите внимание, что здесь не задействовано приложение Lamda, простое определение задачи, сидящее в группе ECS Autoscale, которую вызывает шлюз API, когда вызывается метод helloworld. Как подробно описано здесь: https://aws.amazon.com/blogs/compute/using-amazon-api-gateway-with-microservices-deployed-on-amazon-ecs/

ответ

0

Оказывается, это было так, как я извлекал токен. Я использовал

sessionToken = identity.get_open_id_token(IdentityId=identity_id) 

я должен был получить маркер из ответа, когда я просил полномочия:

resp = identity.get_credentials_for_identity(IdentityId=identity_id) 
secretKey = resp['Credentials']['SecretKey'] 
accessKey = resp['Credentials']['AccessKeyId'] 
sessionToken = resp['Credentials']['SessionToken']