Проблема доступа к корзине AWS S3 с переключением - PullRequest
0 голосов
/ 10 мая 2019

Мой логин в консоли AWS - MFA, для этого я использую Google Authenticator.У меня есть корзина DEV S3, и для доступа к этой корзине DEV мне нужно сменить роль, и после переключения я могу получить доступ к корзине DEV.

Мне нужна помощь, как добиться того же в python с помощью boto3.

Есть много CSV-файлов, которые мне нужно открыть в dataframe, и без этого разрешения доступа, я не могу продолжить.

Я пытался настроить учетные данные AWS и использовать его в своем коде Python, но не помогло.

В документе AWS неясно, как выполнять переключение ролей при использовании и выполнении в python.

import boto3
import s3fs
import pandas as pd
import boto.s3.connection

access_key = 'XXXXXXXXXXX'
secret_key = 'XXXXXXXXXXXXXXXXX'

# bucketName = 'XXXXXXXXXXXXXXXXX'

s3 = boto3.resource('s3')

for bucket in s3.buckets.all():
    print(bucket.name)

Ожидаемым результатом должен быть доступ к этому сегменту после переключения роли в коде python вместе с MFA.

1 Ответ

0 голосов
/ 11 мая 2019

Как правило, безопасность ставить учетные данные в код вашей программы плохо.Лучше хранить их в файле конфигурации.Это можно сделать с помощью команды Интерфейс командной строки AWS (CLI) aws configure.

После сохранения учетных данных таким образом любой AWS SDK (например, boto3) автоматически получитучетные данные без необходимости ссылаться на них в коде.

См .: Настройка интерфейса командной строки AWS CLI - AWS

В файле конфигурации имеется дополнительная возможность, которая заключается в том, что позволяет вам сохранить роль, которую вы хотите занять .Это можно сделать, указав профиль с Роль ARN:

# In ~/.aws/credentials:
[development]
aws_access_key_id=foo
aws_access_key_id=bar

# In ~/.aws/config
[profile crossaccount]
role_arn=arn:aws:iam:...
source_profile=development

source_profile указывает на профиль, который содержит учетные данные, которые будут использоваться для вызова AssumeRole(), а role_arn указываетпредполагаемая роль.

См .: Предположим, поставщик роли

Наконец, вы можете указать boto3 использовать этот конкретный профиль для учетных данных:

session = boto3.Session(profile_name='crossaccount')
# Any clients created from this session will use credentials
# from the [crossaccount] section of ~/.aws/credentials.
dev_s3_client = session.client('s3')

Альтернативой всему вышесказанному (что boto3 делает для вас) является вызов assume_role() в вашем коде, а затем использование временных учетных данных, которые возвращаются, чтобы определить новый session, который вы можете использовать дляподключиться к услуге.Однако описанный выше метод с использованием профилей намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...