Cette rubrique explique comment utiliser Security Token Service (STS) pour mettre en place rapidement un service de téléchargement direct de données pour votre application mobile en moins de 30 minutes. Ce service permet à votre application mobile d'envoyer et de récupérer des données directement depuis et vers Object Storage Service (OSS). Votre serveur d'application n'a besoin que de gérer le contrôle d'accès, garantissant ainsi des transferts de données efficaces et sécurisés.
Pourquoi utiliser un service de téléchargement direct
À mesure que les applications mobiles gèrent des volumes de données croissants, vous pouvez utiliser OSS pour répondre à vos besoins de stockage et vous concentrer sur la logique métier de votre application. L'utilisation d'OSS pour les téléchargements directs de données depuis les applications mobiles présente les avantages suivants :
Sécurité des données : utilisez un modèle d'autorisations flexible pour gérer de manière sécurisée les envois et les récupérations de données.
Rentabilité : réduisez le besoin d'un grand nombre de serveurs. Les applications mobiles se connectent directement à OSS, et seul le flux de contrôle est géré par votre serveur d'application.
Haute concurrence : gérez facilement les requêtes à forte concurrence pour garantir une expérience utilisateur fluide.
Mise à l'échelle élastique : la capacité de stockage s'adapte à la demande pour accompagner la croissance de votre activité.
Traitement des données : intégrez de manière transparente le traitement d'images et la transcodification audio/vidéo pour une gestion flexible des données.
Prérequis
Vous avez activé OSS. Pour plus d'informations, consultez Activer OSS.
Vous avez créé un bucket. Pour plus d'informations, consultez Créer un bucket.
Fonctionnement
Le diagramme suivant illustre le flux de développement du service de téléchargement direct pour mobile.
Suivez les étapes ci-dessous :
-
L'application mobile demande des informations d'identification temporaires au serveur d'application.
RemarqueNe stockez pas directement un AccessKey dans votre application Android ou iOS. Cela crée un risque élevé de fuite de données. À la place, votre application doit demander des informations d'identification temporaires à votre serveur d'application. Ces informations d'identification ont une durée de vie limitée. Par exemple, si votre serveur d'application spécifie une expiration de 30 minutes, l'application mobile peut utiliser le jeton pour envoyer et récupérer des données depuis OSS pendant cette période. Après 30 minutes, l'application doit demander de nouvelles informations d'identification temporaires.
Le serveur d'application utilise un SDK STS pour appeler l'opération AssumeRole et obtenir des informations d'identification temporaires.
STS génère et renvoie les informations d'identification temporaires au serveur d'application.
Le serveur d'application renvoie les informations d'identification temporaires à l'application mobile.
L'application mobile utilise un SDK OSS et les informations d'identification temporaires pour envoyer un fichier vers OSS.
OSS renvoie une réponse de succès à l'application mobile.
Procédure
Étape 1 : Activer STS et configurer le serveur d'application
1. Créer un utilisateur RAM
Commencez par créer un utilisateur RAM et obtenez sa paire de clés AccessKey. Cette paire sert d'identifiant d'identité à long terme pour votre serveur d'application.
Connectez-vous à la console RAM en utilisant votre compte Alibaba Cloud ou en tant qu'administrateur de compte.
Dans le volet de navigation de gauche, sélectionnez Identities > Users.
Cliquez sur Create User.
Saisissez un Logon Name et un Display Name.
Dans la section Access Mode, sélectionnez OpenAPI Access, puis cliquez sur OK.
La clé secrète AccessKey d'un utilisateur RAM n'est affichée qu'au moment de sa création. Vous ne pourrez pas la consulter ultérieurement. Veillez à l'enregistrer en toute sécurité.
Dans la colonne Actions, cliquez sur Copy pour enregistrer la paire de clés AccessKey (AccessKey ID et AccessKey secret).
2. Accorder à l'utilisateur RAM les autorisations AssumeRole
Après avoir créé l'utilisateur RAM, vous devez lui accorder l'autorisation d'appeler l'opération STS AssumeRole. Cela permet à l'utilisateur d'endosser un rôle RAM pour obtenir des informations d'identification temporaires.
Dans le volet de navigation de gauche, sélectionnez Identities > Users.
Sur la page Users, localisez l'utilisateur RAM cible, puis cliquez sur Add Permissions dans la colonne Actions.
-
Sur la page Grant Permission, sélectionnez la stratégie système AliyunSTSAssumeRoleAccess.
RemarqueLa stratégie AliyunSTSAssumeRoleAccess accorde à l'utilisateur RAM l'autorisation d'appeler l'opération STS AssumeRole. Cette autorisation est distincte des autorisations requises pour obtenir les informations d'identification temporaires ou pour utiliser ces informations d'identification afin d'effectuer des requêtes OSS.
Cliquez sur OK.
3. Créer un rôle RAM
Créez un rôle RAM pour le compte Alibaba Cloud actuel et obtenez l'ARN du rôle (Alibaba Cloud Resource Name) correspondant afin qu'un utilisateur RAM puisse l'endosser.
Dans le volet de navigation de gauche, sélectionnez Identities > Roles.
Cliquez sur Create Role et sélectionnez Cloud Account comme type d'entité de confiance.
Sélectionnez le compte Alibaba Cloud actuel et cliquez sur OK.
Saisissez un nom de rôle et cliquez sur OK.
Sur la page Roles, localisez le rôle que vous avez créé et cliquez sur son nom. Sur la page des détails du rôle, cliquez sur Copy à côté de l'ARN pour enregistrer l'ARN du rôle.
4. Créer une stratégie pour les téléchargements de fichiers
En suivant le principe du moindre privilège, créez une stratégie personnalisée pour le rôle RAM qui restreint les téléchargements à un bucket OSS spécifique.
Dans le volet de navigation de gauche, sélectionnez Permissions > Policies.
Cliquez sur Create Policy.
-
Sur la page Create Policy, cliquez sur l'onglet JSON Editor. Dans l'éditeur de stratégie, remplacez
<your-bucket-name>par le nom du bucket que vous avez créé, par exempleweb-direct-upload.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:PutObject", "Resource": "acs:oss:*:*:<your-bucket-name>/*" } ] } Une fois la stratégie configurée, cliquez sur Next to edit policy information.
Dans la section Basic Information, saisissez un nom pour la stratégie, puis cliquez sur OK.
5. Accorder des autorisations au rôle RAM
Accordez la stratégie personnalisée au rôle RAM. Cela garantit que lorsque le rôle est endossé, il dispose des autorisations nécessaires.
Dans le volet de navigation de gauche, sélectionnez Identities > RAM Role.
Sur la page RAM Role, localisez le rôle RAM cible, puis cliquez sur Grant Permission dans la colonne Actions.
-
Sur la page Grant Permission, sélectionnez Custom Policy et choisissez la stratégie personnalisée que vous avez créée.
Cliquez sur OK.
6. Créer une instance ECS en tant que serveur d'application
Créez une instance ECS pour servir de serveur d'application afin de générer des informations d'identification temporaires.
Dans un environnement de production, vous pouvez intégrer les appels API STS à votre serveur d'application existant au lieu de créer une nouvelle instance ECS.
|
Parameter |
Example value |
|
Billing Method |
pay-as-you-go |
|
Region |
China (Hangzhou) |
|
Public IP |
Assign Public IPv4 Address |
|
Security Group |
Allow access on TCP port 80 (HTTP) |
Pour plus d'informations, consultez Créer une instance ECS.
7. Obtenir des informations d'identification temporaires sur le serveur d'application
Intégrez le SDK STS à votre application web pour créer un point de terminaison API qui fournit des informations d'identification temporaires. Lorsque l'application mobile envoie une requête HTTP GET à ce point de terminaison (par exemple, /get_sts_token), le serveur génère et renvoie des informations d'identification temporaires.
L'exemple suivant montre comment utiliser le framework Flask sur une instance ECS pour construire rapidement une application web qui fournit un point de terminaison pour les informations d'identification temporaires :
-
Connectez-vous à l'instance ECS.
Pour plus d'informations, consultez Se connecter à une instance ECS.
Installez Python 3.
-
Créez et accédez à un répertoire de projet.
mkdir my_web_sample cd my_web_sample -
Installez les dépendances.
pip3 install Flask pip3 install attr pip3 install yarl pip3 install async_timeout pip3 install idna_ssl pip3 install attrs pip3 install aiosignal pip3 install charset_normalizer pip3 install alibabacloud_tea_openapi pip3 install alibabacloud_sts20150401 pip3 install alibabacloud_credentials -
Écrivez le code backend.
Créez un fichier nommé
main.py.-
Ajoutez le code Python suivant au fichier.
import json from flask import Flask, render_template from alibabacloud_tea_openapi.models import Config from alibabacloud_sts20150401.client import Client as Sts20150401Client from alibabacloud_sts20150401 import models as sts_20150401_models from alibabacloud_credentials.client import Client as CredentialClient app = Flask(__name__) # Replace <YOUR_ROLE_ARN> with the ARN of your RAM role. role_arn_for_oss_upload = '<YOUR_ROLE_ARN>' # Set this to the region of the STS service, for example, cn-hangzhou. region_id = 'cn-hangzhou' @app.route("/") def hello_world(): return render_template('index.html') @app.route('/get_sts_token', methods=['GET']) def get_sts_token(): # If no parameters are specified when you initialize CredentialClient, the default credential chain is used. # When running locally, you can specify the AccessKey pair via the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables. # When running on an ECS instance, an ECI instance, or in Container Service, you can specify the attached instance role via the ALIBABA_CLOUD_ECS_METADATA environment variable. The SDK automatically fetches temporary STS credentials. config = Config(region_id=region_id, credential=CredentialClient()) sts_client = Sts20150401Client(config=config) assume_role_request = sts_20150401_models.AssumeRoleRequest( role_arn=role_arn_for_oss_upload, # Set <YOUR_ROLE_SESSION_NAME> to a custom session name. role_session_name='<YOUR_ROLE_SESSION_NAME>' ) response = sts_client.assume_role(assume_role_request) token = json.dumps(response.body.credentials.to_map()) return token app.run(host="127.0.0.1", port=8000) # If you need to listen on other addresses, such as 0.0.0.0, you must add an authentication mechanism on the server side. Dans le code, remplacez
<YOUR_ROLE_ARN>par l'ARN du rôle que vous avez enregistré à l'étape Étape 1.3.Dans le code, remplacez
<YOUR_ROLE_SESSION_NAME>par un nom de session personnalisé, tel querole_session_test.
-
Démarrez l'application en utilisant la paire de clés AccessKey de l'étape Étape 1,1.
ALIBABA_CLOUD_ACCESS_KEY_ID=<YOUR_AK_ID> ALIBABA_CLOUD_ACCESS_KEY_SECRET=<YOUR_AK_SECRET> python3 main.py -
Dans un navigateur web, accédez à
http://<your_ecs_instance_public_ip>/get_sts_token.Une réponse réussie ressemble à ceci :

Appuyez sur
Ctrl+Cpour arrêter l'application.
Étape 2 : Télécharger et configurer l'application mobile
Android
-
Téléchargez le code source de l'application mobile.
Vous pouvez utiliser cette application mobile pour envoyer des images vers OSS. Elle prend en charge les envois simples et les envois avec reprise. Pour les réseaux peu fiables, les envois avec reprise sont recommandés. Vous pouvez également utiliser le service de traitement d'images pour redimensionner ou ajouter des filigranes aux images avant l'envoi.
-
Ouvrez l'application mobile et configurez les paramètres.
Serveur d'authentification STS : saisissez l'adresse du serveur d'application que vous avez déployé à l'étape Étape 1 : Activer STS et configurer le serveur d'application.
Bucket de destination : le bucket vers lequel l'application mobile enverra les données.
Région : la région où se trouve le bucket de destination.
Cliquez sur Configure.
iOS
-
Téléchargez le code source de l'application mobile.
Vous pouvez utiliser cette application mobile pour envoyer des images vers OSS. Elle prend en charge les envois simples et les envois avec reprise. Pour les réseaux peu fiables, les envois avec reprise sont recommandés. Vous pouvez également utiliser le service de traitement d'images pour redimensionner ou ajouter des filigranes aux images avant l'envoi.
-
Ouvrez l'application mobile et configurez les paramètres.
Avant d'exécuter la démo, vous devez configurer les paramètres requis dans le fichier OSSTestMacros.h, notamment
OSS_BUCKET_PRIVATE,OSS_ENDPOINTetOSS_STSTOKEN_URL. DéfinissezOSS_STSTOKEN_URLsur l'adresse du serveur d'application que vous avez déployé à l'étape Étape 1 : Activer STS et configurer le serveur d'application.
-
Exécutez la démo.
Étape 3 : Tester le service de téléchargement direct
Spécifiez un nom pour l'objet OSS. Cliquez sur Upload et sélectionnez une image à envoyer.
Une fois l'envoi réussi, vous pouvez consulter le résultat dans la console OSS.