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?
Est-ce que votre script ont des fins de ligne DOS? – chepner
Salut, non, non. Je cours sur un Mac (système Unix) – Integralist
Impossible de reproduire ceci sur OSX 10.11.4 avec bash-3.2 ou bash-4.3 avec aws-cli/1.10.21 – Nathan