1

je le script bash suivant qui tente d'automatiser l'hypothèse d'un rôle AWS (je l'ai évidemment retiré les différents paramètres privés):Env variables non persistantes dans la coquille mère

#! /bin/bash 
# 
# Dependencies: 
# brew install jq 
# 
# Execute: 
# source aws-cli-assumerole.sh 

unset AWS_SESSION_TOKEN 
export AWS_ACCESS_KEY_ID=<user_access_key> 
export AWS_SECRET_ACCESS_KEY=<user_secret_key> 

temp_role=$(aws sts assume-role \ 
        --role-arn "arn:aws:iam::<aws_account_number>:role/<role_name>" \ 
        --role-session-name "<some_session_name>") 

export AWS_ACCESS_KEY_ID=$(echo $temp_role | jq .Credentials.AccessKeyId) 
export AWS_SECRET_ACCESS_KEY=$(echo $temp_role | jq .Credentials.SecretAccessKey) 
export AWS_SESSION_TOKEN=$(echo $temp_role | jq .Credentials.SessionToken) 

env | grep -i AWS_ 

je dois exécuter cette script utilisant source car sinon, si j'utilise le standard bash ou sh, les variables d'environnement exportées ne sont pas disponibles dans le shell parent exécutant ce script.

Le problème est, même en utilisant source cela ne fonctionne pas; et par cela je veux dire: les variables d'environnement ET leurs valeurs correctes/mises à jour sont montrées dans le shell parent (si j'exécute env | grep AWS_ je peux voir les valeurs correctes).

Si j'essaie ensuite d'utiliser les outils AWS CLI (par exemple, aws s3 ls - pour répertorier tous les compartiments s3 dans le compte spécifique pour lequel j'ai assumé le rôle), il signalera que la clé d'accès n'est pas valide.

MAIS, si je copie et coller manuellement l'environnement des valeurs variables et les réexporter dans le shell parent (réécrites efficacement avec exactement les mêmes valeurs qui sont déjà définies), puis la commande AWS CLI fonctionnera - mais je ne sais pas pourquoi. Qu'est ce qui est different?

+0

Est-ce que votre script ont des fins de ligne DOS? – chepner

+0

Salut, non, non. Je cours sur un Mac (système Unix) – Integralist

+0

Impossible de reproduire ceci sur OSX 10.11.4 avec bash-3.2 ou bash-4.3 avec aws-cli/1.10.21 – Nathan

Répondre

0

jq .Blah retournera la sortie citée.

Ainsi, par exemple export AWS_ACCESS_KEY_ID=$(echo $temp_role | jq .Credentials.AccessKeyId) Amènerons "KEY" place ce que vous avez besoin est juste KEY qui est la raison pour laquelle votre xargs fonctionne dans votre commentaire.

Si vous utilisez l'option -r pour cru avec JQ vous obtiendrez le résultat que vous voulez export AWS_ACCESS_KEY_ID=$(echo $temp_role | jq -r .Credentials.AccessKeyId)