aws cli принимает на себя роль, работает, но все равно получает отказ в разрешении на s3

#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) — Управление идентификацией и доступом AWS

3. Вы должны использовать 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 или стручок. Всегда полезно упомянуть, почему вы что-то делаете, а не просто как , чтобы люди могли дать более подходящий ответ.