Предполагается, что роль AWS не используется для будущих команд консоли - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь взять на себя роль в контейнере докера, но похоже, что эта роль не работает.Ниже приведен вывод aws sts assume-role, за которым следует aws sts get-caller-identity

jenkins@0d4794bcdd62:~/.aws$ aws sts get-caller-identity
{
    "UserId": "ABCDEFG1234567:i-01234546789abc",
    "Arn": "arn:aws:sts::555555555555:assumed-role/jenkins-masterRole/i-01234546789abc",
    "Account": "555555555555"
}
jenkins@0d4794bcdd62:~/.aws$ aws sts assume-role --role-arn arn:aws:iam::555555555555:role/ec2/CloudFormationRole --role-session-name "test-session-name"
{
    "Credentials": {
        "Expiration": "2019-01-28T16:37:04Z",
        "SessionToken": "[redacted]",
        "AccessKeyId": "[redacted]",
        "SecretAccessKey": "[redacted]"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "[redacted]:test-session-name",
        "Arn": "arn:aws:sts::5555555555555:assumed-role/CloudFormationRole/test-session-name"
    }
}
jenkins@0d4794bcdd62:~/.aws$ aws sts get-caller-identity
{
    "Account": "555555555555",
    "UserId": "ABCDEFG1234567:i-01234546789abc",
    "Arn": "arn:aws:sts::555555555555:assumed-role/jenkins-masterRole/i-01234546789abc"
}

Как видите, роль aws sts-предположить работает, но не похоже, что она применяется.Ниже приведено содержимое моего файла ~ / .aws / config

jenkins@0d4794bcdd62:~/.aws$ cat ~/.aws/config
[default]
region = us-east-1

. У меня не установлены переменные среды AWS CLI, кроме AWS_CONFIG_FILE=~/.aws/config.Что я изначально не был установлен, но я сделал это во время тестирования.

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Вы также можете (ab) использовать опцию --query для генерации назначений переменных среды для временных учетных данных роли, например:

$ roleSessionName=my-example-session

$ arnOfRoleToAssume=arn:aws:iam::123456789012:role/demo 

$ assumeRoleEnv=$(aws sts assume-role \
            --role-session-name="$roleSessionName" \
            --role-arn="$arnOfRoleToAssume"\
            --output text \
            --query='Credentials.[
              join(`=`, [`AWS_ACCESS_KEY_ID`, AccessKeyId]),
              join(`=`, [`AWS_SECRET_ACCESS_KEY`, SecretAccessKey]),
              join(`=`, [`AWS_SESSION_TOKEN`, SessionToken])
          ]')

$ eval "export $assumeRoleEnv"

$ aws sts get-caller-identity # this and further aws calls use the assumed role

Одним из преимуществ этого является отсутствие необходимости связываться с общей конфигурацией/ полномочия.Например, именно поэтому я выбрал этот подход в awscli-with-accept-role (образ Docker) .

0 голосов
/ 28 января 2019

Вызов assume-role не приведет к изменению конфигурации интерфейса командной строки AWS.AWS CLI использует учетные данные, хранящиеся в ~/.aws/credentials, для совершения звонков.Те, что возвращены assume-role, не копируются автоматически в файл конфигурации AWS CLI, они просто отображаются на вашем экране.

Таким образом, одним из наивных способов решения вашей проблемы будет копирование / вставка ключа доступа, секретный ключ и идентификатор сеанса на ~/.aws/credentials Конечно, это не масштабируется и не будет удобно.Есть лучший способ.

Вы можете настроить профиль в CLI для использования нужной вам роли.Предполагая, что ваша базовая личность имеет разрешение принять на себя роль (которую вы выполняете в соответствии с вашим призывом принять на себя роль в вашем вопросе)

Так я настроил свой файл ~/.aws/config для получения временного доступа к моей личной информации.аккаунт, с моего рабочего аккаунта.Конечно, та же техника работает и в той же учетной записи.

[default]
region=eu-west-1

[profile perso]
region=eu-west-1
role_arn=arn:aws:iam::[redacted]:role/admin
source_profile=default

Роль ARN - это роль, которую вы хотите взять на себя в целевой учетной записи.

, тогда вы можете просто ввести:

aws --profile perso s3 ls

для смены роли.

...