Как получить правильные учетные данные для доступа к AWS SecretsManger на клиенте boto3 с помощью AWS Cognito - Indentity Pool

Я пытаюсь получить AWS Secret (который является конфигурацией boto3) с помощью автономного приложения, работающего на python3 (kivy).

Клиент использует boto3 и отлично работает с жестко запрограммированными учетными данными.

Я пытаюсь получить кредиты, используя get_credentials_for_identity в boto3.

Я создал пул удостоверений федерации и назначил для него политику доступа к диспетчеру секретов:

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "secretsmanager:GetSecretValue",
        "Resource": "<arn-of-the-secret-the-app-needs-to-access>"
    }
}

Я также сделал то же самое, используя общую роль Cognito. (Зная, что проблема не в этом, но я уверен, что мы все тупо пытаемся что-то решить).

client = boto3.client('cognito-identity', region_name='eu-west-1')
response = client.get_credentials_for_identity(
    #identity taken from fedenration/identity pools;app with cognito access
    IdentityId='eu-west-1:6###...',
)
creds_dic = response['Credentials']
awsaccesskey = creds_dic['AccessKeyId']
awsseckey = creds_dic['SecretKey']
print(response)
print(awsseckey)
print(awsaccesskey)

дает мне неправильные AccessKeyId и SecretKey те, которые он предоставляет, я даже не могу найти. Я думаю, что прошу ключ / секрет доступа для IAM, который содержит этот identity, но мне нужен ключ / секрет доступа для роли IAM, которая обращается к secrets manager, чтобы я мог передать их в boto3 и получить кредиты / секрет.

Мне тоже нужно то же самое для user pool, но я могу это настроить, как только осознаю свою глупость.


person Cl0ud-l3ss    schedule 27.04.2019    source источник
comment
Получаемые вами учетные данные, скорее всего, являются временными учетными данными, созданными для сеанса с использованием роли IAM. Вопрос в том, пробовали ли вы использовать полученные учетные данные в boto3 для получения секретов?   -  person Imran    schedule 28.04.2019
comment
Да! Вот где я получаю свой invalid token error - я получаю_credentials_for_identity, используя свой пул идентификаторов, у которого есть разрешения на secretsmanager, я передаю их через свой SecretsManager и получаю недействительный токен   -  person Cl0ud-l3ss    schedule 28.04.2019


Ответы (1)


Cognito генерирует новые учетные данные, которые предоставляет AWS STS. Вы не сможете сопоставить эти учетные данные с существующими учетными данными, созданными IAM, которые у вас есть. Чтобы получить доступ к API AWS Secrets Manager, убедитесь, что Authenticated Role пула идентификаторов Cognito имеет соответствующие разрешения.

person Arka Mukherjee    schedule 28.04.2019
comment
Мои Authenticated role и мои unAuthenticated роли имеют правильные разрешения. Я использую следующую политику SecretsManagerReadWrite. Я все еще получаю ошибку неверного токена. response_getcreds = client.get_credentials_for_identity(IdentityId='eu-west-1:fbfda46a-0e03-4aa4-bf54-049467ccbfb3',) - person Cl0ud-l3ss; 28.04.2019
comment
Это не будет недействительным. Попробуйте использовать в качестве теста генерацию кредитов через интерфейс командной строки AWS. - person Arka Mukherjee; 28.04.2019
comment
мой IdentityId создается из GetId, когда я использую идентификатор пула моего identity pool ... Мне кажется, что мои разрешения где-то неверны. Я даже назначил AdminAccess своей unathen роли, которая используется в обеих. Попробую сейчас метод CLI! - person Cl0ud-l3ss; 28.04.2019
comment
Использование aws cli и кредитов, сгенерированных из get_credentials_for_identity, дает мне ту же ошибку токена - person Cl0ud-l3ss; 28.04.2019
comment
Мне нужно специфицировать Trusted entities? Сейчас у меня только cognito-identity.amazonaws.com - person Cl0ud-l3ss; 28.04.2019
comment
Также мне нужны две отдельные роли для auth и unauth, или я могу просто использовать одну с необходимыми разрешениями? - person Cl0ud-l3ss; 28.04.2019
comment
Вам нужны две отдельные роли. Сначала проверьте через интерфейс командной строки, используя вызовы API Identity Pool (GetID и GetCredentialsForIdentity). - person Arka Mukherjee; 29.04.2019
comment
STS возьмет на себя роль Auth, если предоставлена ​​карта логинов. - person Arka Mukherjee; 29.04.2019
comment
Давайте продолжим это обсуждение в чате. - person Cl0ud-l3ss; 30.04.2019