Création d'une URL présignée
Les URL présignées dans IBM Cloud® Object Storage créent des liens temporaires qui peuvent être utilisés pour partager un objet sans nécessiter de données d'identification utilisateur supplémentaires lors de l'accès.
Bien entendu, on peut également fournir une cible temporaire pour l'envoi d'une demande PUT sans avoir à fournir d'autres
informations pour l'authentification. La méthode la plus simple pour créer des URL présignées consiste à utiliser l'interface de ligne de commandeAWS. Mais tout d'abord,
vous devrez peut-être exécuter aws configure
afin de définir votre ID de clé d'accès et votre clé d'accès secrète à partir de vos propres données d'identification de service HMAC.
Une fois que vous avez terminé de configurer votre interface de ligne de commande, utilisez l'exemple suivant comme modèle et remplacez le noeud final et le nom de votre compartiment par les informations appropriées:
$ aws --endpoint-url=https://{endpoint} s3 presign s3://{bucket-name}/{new-file-key}
Si les données d'identification de service utilisées pour générer les données d'identification HMAC (utilisées comme ID de clé d'accès et configuration de clé d'accès secrète ci-dessus) sont supprimées, l'accès à l'URL présignée échouera.
Il est également possible de définir un délai d'expiration pour l'URL (la valeur par défaut est 3600 secondes) :
$ aws --endpoint-url=https://{endpoint} s3 presign s3://bucket-1/new-file --expires-in 600
Il est également possible de les construire à l'aide d'un programme. Voici des exemples d'opérations GET
de base écrites en Python. Pour plus d'informations sur les noeuds finaux, voir Noeuds finaux et emplacements de stockage.
Contrairement à AWS S3, IBM Cloud Object Storage n'impose pas un délai d'expiration maximal de 7 jours (604800 secondes). Bien qu'il soit possible de créer une URL présignée avec une valeur d'expiration longue, la plupart des cas d'utilisation nécessitant un accès public étendu seraient mieux servis en implémentant une règle d'accès public sur un compartiment à la place.
Créer une URL présignée pour télécharger un objet
Exemple en Python
import ibm_boto3
import os
bucket_name = '<bucekt name>'
key_name = '<object key name>'
http_method = 'get_object'
expiration = 600 # time in seconds, default:600
access_key = os.environ.get('COS_HMAC_ACCESS_KEY_ID')
secret_key = os.environ.get('COS_HMAC_SECRET_ACCESS_KEY')
# Current list avaiable at https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints
cos_service_endpoint = 'https://s3.<region>.cloud-object-storage.appdomain.cloud'
cos = ibm_boto3.client("s3",
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
endpoint_url=cos_service_endpoint
)
signedUrl = cos.generate_presigned_url(http_method, Params={
'Bucket': bucket_name, 'Key': key_name}, ExpiresIn=expiration)
print("presigned download URL =>" + signedUrl)
Exemple en Java
import java.util.Date;
import com.ibm.cloud.objectstorage.auth.AWSCredentials;
import com.ibm.cloud.objectstorage.auth.AWSStaticCredentialsProvider;
import com.ibm.cloud.objectstorage.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.ibm.cloud.objectstorage.HttpMethod;
import com.ibm.cloud.objectstorage.services.s3.AmazonS3;
import com.ibm.cloud.objectstorage.services.s3.AmazonS3ClientBuilder;
import com.ibm.cloud.objectstorage.services.s3.model.GeneratePresignedUrlRequest;
String bucketName = "<bucket name>";
String keyName = "<object key name>";
HttpMethod httpMethod = HttpMethod.GET;
Date expiration = new Date();
long expTimeMillis = expiration.getTime();
expTimeMillis += 1000 * 60 * 60;
expiration.setTime(expTimeMillis);
String accessKey = "<COS_HMAC_ACCESS_KEY_ID>";
String secretAccessKey = "<COS_HMAC_SECRET_ACCESS_KEY>";
// Current list avaiable at https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints
String cosServiceEndpoint = "https://s3.<region>.cloud-object-storage.appdomain.cloud";
AmazonS3 cosClient = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new EndpointConfiguration(cosServiceEndpoint, "us-east-1"))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretAccessKey))).withPathStyleAccessEnabled(true)
.build();
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, keyName)
.withMethod(httpMethod)
.withExpiration(expiration);
URL signedUrl = cosClient.generatePresignedUrl(generatePresignedUrlRequest);
System.out.println(signedUrl);
Créer une URL présignée pour télécharger un objet
Exemple en Python
import ibm_boto3
import os
bucket_name = '<bucket name>'
key_name = '<object key name>'
http_method = 'put_object'
expiration = 600 # time in seconds, default:600
access_key = os.environ.get('COS_HMAC_ACCESS_KEY_ID')
secret_key = os.environ.get('COS_HMAC_SECRET_ACCESS_KEY')
# Current list avaiable at https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints
cos_service_endpoint = 'https://s3.<region>.cloud-object-storage.appdomain.cloud'
cos = ibm_boto3.client("s3",
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
endpoint_url=cos_service_endpoint
)
signedUrl = cos.generate_presigned_url(http_method, Params={
'Bucket': bucket_name, 'Key': key_name}, ExpiresIn=expiration)
print("presigned upload URL =>" + signedUrl)