0
votes

Google Cloud Storage - Téléchargement d'un fichier à l'aide d'une requête CURL

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?


0 commentaires

3 Réponses :


0
votes

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.


0 commentaires

0
votes

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:

  1. Créer un compte de service et donner accès
  2. Générer la clé de compte JSON de téléchargement
  3. exécuter la commande: gcloud auth activate-service-account [ACCOUNT-NAME] --key-file=/path/to/service-key.json --project=[PROJECT_ID]
  4. utiliser comme "Authorization: Bearer" $(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"


0 commentaires

1
votes

Utilisation d'OAuth 2.0 pour les applications serveur à serveur

Script Bash OAuth 2.0 JWT pour les applications serveur vers Google Server

Téléchargement d'objets

#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


0 commentaires