J'essaie de télécharger un fichier à partir du compartiment de stockage cloud à l'aide de la demande curl comme expliqué ici - https://cloud.google.com/storage/docs/downloading-objects#download-object-json
Dans la documentation ci-dessus, à l'étape 1, je vois que le jeton d'accès est généré à partir du terrain de jeu Oauth 2.0 . Cependant, je souhaite générer le jeton par programme et envoyer la demande CURL. \
Existe-t-il un moyen d'obtenir le jeton d'accès via n'importe quel script? Probablement à partir d'une autre demande CURL utilisant le compte de service?
3 Réponses :
Avec CURL, vous pouvez utiliser cette commande gcloud auth print-access-token
. Pour ce faire, vous devez être authentifié avec vos informations d'identification utilisateur gcloud auth login
Si vous ne disposez que d'un fichier de clé de compte de service (car votre script ne s'exécute pas localement ou sur l'environnement Google Cloud), vous pouvez charger les informations d'identification comme ceci: gcloud auth activate-service-account --key-file=<YOUR FILE>
Ensuite, votre commande CURL ressemble à ceci
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -o "SAVE_TO_LOCATION" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME?alt=media"
le $()
exécute une commande linux et imprime la sortie
Si vous souhaitez créer ce jeton d'accès par programmation, la bibliothèque d'authentification Google peut vous aider à y parvenir. Faites-nous savoir votre langue préférée si vous voulez des exemples de code.
Vous pouvez obtenir ce jeton d'accès si vous êtes connecté au SDK Cloud (gcloud) sur la même machine que vous exécutez la commande cURL.
Le processus ressemble à ceci:
gcloud auth activate-service-account [ACCOUNT-NAME] --key-file=/path/to/service-key.json --project=[PROJECT_ID]
$(gcloud auth print-access-token)
Voici les instructions de Google pour ce processus.
J'ai répliqué cela sur mon projet de test et une telle commande a parfaitement fonctionné:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -o "test.jpg" \ "https://storage.googleapis.com/storage/v1/b/[bucket-name]/o/original.jpg?alt=media"
Utilisation d'OAuth 2.0 pour les applications serveur à serveur
Script Bash OAuth 2.0 JWT pour les applications serveur vers Google Server
#1. Create a service account with storage permissions to download the objects and download the p12 key file #2. Convert p12 key to pem PRIVATE_KEY=privateKey.pem openssl pkcs12 -in privatekey.p12 -nodes -nocerts --passin pass:notasecret > $PRIVATE_KEY #3. Create an object and uploaded to storage cat file #This is a testing file gsutil cp file gs://your-bucket/ #4.Create a JSON Web Token (JWT, pronounced, "jot") which includes a header, a claim set, and a signature. ALG=RS256 TYP=JWT JSON_HEADER=$( jq -n --arg alg "$ALG" --arg typ "$TYP" '{alg: $alg, typ: $typ}' ) JSON_HEADER_ENCODED=`echo -n $JSON_HEADER | openssl base64 -e` ISS=user@project.iam.gserviceaccount.com SCOPE=https://www.googleapis.com/auth/cloud-platform AUD=https://oauth2.googleapis.com/token IAT=$(date +%s) EXP=$(($IAT + 3600)) JSON_CLAIM=$( jq -n --arg iss "$ISS" --arg scope "$SCOPE" --arg aud "$AUD" --arg exp "$EXP" --arg iat "$IAT" '{iss: $iss, scope: $scope, aud: $aud, exp: $exp, iat: $iat}'); JSON_CLAIM_ENCODED=`echo -n $JSON_CLAIM | openssl base64 -e` HEAD_AND_CLAIM_TR=`echo -n "$JSON_HEADER_ENCODED.$JSON_CLAIM_ENCODED" | tr -d '\n' | tr -d '=' | tr '/+' '_-'` echo $HEAD_AND_CLAIM_TR SIGNATURE_ENCODED=`echo -n "$HEAD_AND_CLAIM_TR" | openssl dgst -sha256 -sign $PRIVATE_KEY | openssl base64 -e` SIGNATURE_TR=`echo -n "$SIGNATURE_ENCODED" | tr -d '\n' | tr -d '=' | tr '/+' '_-'` echo $SIGNATURE_TR JWT_ASSERTION="$HEAD_AND_CLAIM_TR.$SIGNATURE_TR" echo $JWT_ASSERTION #5. Request an access token from the Google OAuth 2.0 Authorization Server. RESPONSE=`curl -H "Content-type: application/x-www-form-urlencoded" -X POST "https://oauth2.googleapis.com/token" -d \ "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=$JWT_ASSERTION" ` #6. Handle the JSON response that the Authorization Server returns. BEARER=`echo $RESPONSE | jq '.access_token'` #7. Download the object from GCS curl -X GET \ -H "Authorization: Bearer $BEARER" \ -o "test_file" \ "https://storage.googleapis.com/storage/v1/b/your-bucket/o/file?alt=media" #8. Test it cat test_file #This is a testing file