Creazione di un URL pre - firmato
Gli URL pre - firmati in IBM Cloud® Object Storage creano dei link temporanei che possono essere utilizzati per condividere un oggetto senza richiedere credenziali utente aggiuntive quando si accede.
Naturalmente, si può anche fornire una destinazione temporanea per l'invio di una richiesta PUT anche senza dover fornire
ulteriori informazioni per l'autenticazione. Il modo più semplice per creare URL prefirmati è utilizzare il file AWS CLI. Ma prima, potresti dover eseguire aws configure
per impostare il tuo ID chiave di accesso e la chiave di accesso segreta dalla tua credenziale del servizio abilitata per HMAC. Una volta completata
la configurazione della tua CLI, utilizza il seguente esempio come template e sostituisci l'endpoint e il nome del tuo bucket con le informazioni appropriate:
$ aws --endpoint-url=https://{endpoint} s3 presign s3://{bucket-name}/{new-file-key}
Se le credenziali del servizio utilizzate per generare le credenziali HMAC (utilizzate come ID chiave di accesso e configurazione della chiave di accesso segreta in precedenza) vengono eliminate, l'accesso per l'URL pre - firmato avrà esito negativo.
È anche possibile impostare un tempo di scadenza per l'URL in secondi (il valore predefinito è 3600):
$ aws --endpoint-url=https://{endpoint} s3 presign s3://bucket-1/new-file --expires-in 600
È anche possibile eseguirne la creazione in modo programmatico. Di seguito sono riportati degli esempi per le operazioni GET
di base scritte in Python. Per ulteriori informazioni sugli endpoint, vedi Endpoint e ubicazioni di archiviazione.
A differenza di AWS S3, IBM Cloud Object Storage non applica un periodo di scadenza massimo di 7 giorni (604800 secondi). Mentre è possibile creare un URL pre - firmato con un valore di scadenza lungo, la maggior parte dei casi di utilizzo che necessitano di un accesso pubblico esteso sarebbe servita meglio implementando una politica di accesso pubblico su un bucket.
Crea un URL prefirmato per scaricare un oggetto
Esempio 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)
Esempio 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);
Crea un URL prefirmato per caricare un oggetto
Esempio 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)