Viji
@Viji
Associate DevOps Engineer

Как вызывать AWS API используя временные credentials?

Доброе время суток,

вызываю aws cli функцию
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/OrganizationAccountAccessRole --role-session-name mini-admin

Она возвращает временные security credentials, включая AccessKeyId, SecretAccessKey и SessionToken

можно ли как-то все остальные API calls делать от имени этого временной сессии? Как например мне вызвать
aws ec2 describe-instances - используя credentials полученные до этого. Или надо их вписывать в файл и оттуда доставать? В boto3 это довольно просто, а как сделать такое в bash'e и amazon cli?
  • Вопрос задан
  • 212 просмотров
Решения вопроса 2
@yellowmew
Cloud infrastructure, monitoring engineer. SRE
https://docs.aws.amazon.com/en_us/cli/latest/userg...
Вы получаете креды.
Вам нужно положить их в соответствующие переменные окружения.
Далее следующая команда AWS CLI будет использовать их.
Ответ написан
Viji
@Viji Автор вопроса
Associate DevOps Engineer
А вот и скриптик ))

#!/bin/bash

#12-digit number after iam:: is an account ID of the child organization account
full_session_data=$(aws sts assume-role --role-arn arn:aws:iam::123456789012:role/OrganizationAccountAccessRole --duration-seconds 900 --role-session-name mini-admin --query "Credentials" --output json | tr -d '{' | tr -d '}' | sed 's/ //g' | tr -d '\n')
AccessKeyId=$(echo $full_session_data | cut -d, -f1 | awk -F'":"' '{print $2}' | tr -d '"')
SecretAccessKey=$(echo $full_session_data | cut -d, -f2 | awk -F'":"' '{print $2}' | tr -d '"')
SessionToken=$(echo $full_session_data | cut -d, -f3 | awk -F'":"' '{print $2}' | tr -d '"')

echo $AccessKeyId
echo $SecretAccessKey
echo $SessionToken

export AWS_ACCESS_KEY_ID=$AccessKeyId
export AWS_SECRET_ACCESS_KEY=$SecretAccessKey
export AWS_SESSION_TOKEN=$SessionToken

#get all the regions to check each one for aws resources
regions=`aws ec2 describe-regions | grep RegionName | grep -o "[[:alnum:]]*\-[[:alnum:]]*\-[[:alnum:]]*" | tr '\n' ',' | sed 's/.$//'`
echo $regions
for eachregion in $(echo $regions | sed "s/,/ /g")
do
echo "for the region of ""$eachregion"" we have the following VPCs:"
aws ec2 describe-vpcs --region $eachregion | grep "VpcId"
done # end of instances cycle / for all regions
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise Куратор тега Amazon Web Services
Solution Architect, AWS Certified, Serverless
если ты делаешь это из консоли то что тебе мешает добавить еще один profile для aws cli? отличный вариант, только надо уметь в bash scripting
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы