#amazon-web-services #amazon-s3 #amazon-iam #aws-cli
Вопрос:
Я пытаюсь получить доступ к корзине s3 в учетной записи A из учетной записи B.
Я следовал этому руководству по варианту ролей IAM для разных учетных записей. Затем, чтобы взять на себя эту роль, я использую эту команду aws cli в своем коде:
aws sts assume-role --role-arn "arn:aws:iam::*********:role/cross-account-s3-access" --role-session-name AWSCLI-Session
Я вижу, что эта роль была взята на себя:
{
"Credentials": {
"AccessKeyId": "********",
"SecretAccessKey": "********",
"SessionToken": "********",
"Expiration": "2021-07-29T08:46:33Z"
},
"AssumedRoleUser": {
"AssumedRoleId": "********:AWSCLI-Session",
"Arn": "arn:aws:sts::********:assumed-role/cross-account-s3-access/AWSCLI-Session"
}
}
Затем, чтобы проверить, сработал ли доступ между учетными записями, я выполняю следующую команду, которая возвращает отказ в доступе:
aws s3 ls s3://digibank-endofday-files-stg
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
Мой вопрос в том, что такое флаг —имя сеанса роли? Возможно, я неправильно оценил значение, но я не смог найти подходящего объяснения этому. Где я могу найти его ценность??
Комментарии:
1. значение в основном является свободным текстом, не должно ни на что влиять. Какие разрешения есть у предполагаемой роли?
2. Вы каким-то образом использовали возвращенные учетные данные? Вы могли бы поместить их в новую конфигурацию с
aws configure --profile assumed-role
помощью . Или вы можете указать ARN роли IAM в файле конфигурации AWS CLI, и он примет его за вас: Переключение на роль IAM (AWS CLI) — Управление идентификацией и доступом AWS3. Вы должны использовать
Credentials
данные вам самимaws sts assume-role
.4. @luk2302 Разрешения, которые имеет предполагаемая роль: «ListAllMyBuckets», «ListBucket», «GetBucketLocation», «GetObject», «putObject»
5. @Marcin Что мне нужно сделать с этими учетными данными? Куда мне их нужно положить?
Ответ №1:
Поток-это:
- Используя постоянные учетные данные (например, от вашего пользователя IAM), позвоните
AssumeRole()
и укажите ARN желаемой роли - Если у вас есть разрешение на вызов AssumeRole для этой роли, AWS STS вернет набор временных учетных данных
- Затем вам потребуется использовать эти учетные данные при последующих вызовах служб AWS
Таким образом, будущие звонки не будут выполняться от вашего пользователя IAM (поскольку у него нет разрешения на доступ к S3). Вместо этого вызов необходимо будет выполнить с новыми учетными данными.
Если бы вы использовали язык программирования, вы бы использовали эти учетные данные для создания нового Session
объекта, а затем использовали его для выполнения вызовов API.
Однако, учитывая, что вы используете интерфейс командной строки AWS, самый простой способ предположить вызов-добавить конфигурацию в свой ~/.aws/config
файл, аналогичную этой:
[profile prodaccess]
role_arn = arn:aws:iam::123456789012:role/ProductionAccessRole
source_profile = default
В этой конфигурации говорится: «Используйте мои учетные данные из профиля по умолчанию, чтобы принять эту роль IAM».
Вы можете использовать его вот так:
aws s3 ls s3://digibank-endofday-files-stg --profile prodaccess
Дополнительные сведения см. в разделе: Переключение на роль IAM (интерфейс командной строки AWS) — Управление идентификацией и доступом AWS
Интерфейс командной строки AWS автоматически вызовет AssumeRole()
, а затем выполнит запрошенный вызов, используя возвращенные временные учетные данные.
Комментарии:
1. Спасибо за подробный ответ. Все это имеет смысл, но одна вещь заключается в том, что все, что я описал, происходит как работа в стручке. Поэтому я не могу вручную создать файл конфигурации, мне нужно создать его автоматически из кода таким образом, чтобы при каждом запуске cronjob этот файл конфигурации создавался с заданными учетными данными. Когда вы это сделаете
aws configure
, вам придется вручную вставить эти учетные данные.2. Вы можете вызвать AssumeRole, извлечь предоставленные учетные данные и затем сохранить их в переменных среды. Для примера см.: iam-assume-role.sh . Кстати, в следующий раз, пожалуйста, укажите полную информацию в своем вопросе-вы никогда не упоминали cron или стручок. Всегда полезно упомянуть, почему вы что-то делаете, а не просто как , чтобы люди могли дать более подходящий ответ.