Aller au contenu

Création d'un compte S3 sur openstack et test de connexion à un bucket

Nous allons générer une clé d'accès et une clé secrète sur openstack pour ensuite être en mesure de créer des buckets S3.

Générer la clé d'accès + la clé secrète sur openstack

Pour la connexion à openstack, nous avons besoin d'un fichier openrc.sh à jour, par exemple :

export OS_AUTH_URL=https://api.hostname/identity/v3
export OS_PROJECT_NAME=SUPER-PROJECT
export OS_PROJECT_DOMAIN_NAME=default
export OS_USERNAME=MY-USERNAME
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_ID=PROJECT-ID
export OS_IDENTITY_API_VERSION=3
export OS_INTERFACE=public
export OS_REGION_NAME=REGION

OS_PASSWORD='MOT_DE_PASSE_FORT'
[ -z "$OS_PASSWORD" ] && read -e -p "Please enter your OpenStack Password for project $OS_PROJECT_NAME as user $OS_USERNAME: " OS_PASSWORD
export OS_PASSWORD

Puis on peut créer les 2 clés :

source openrc.sh # on source les variables de connexion à openstack

openstack ec2 credentials create
# -->  on récupère ici les informations principales "access" + "secret"

# l'url vers l'API S3
API_S3_HOSTNAME=https://hostname.api

# le nom du bucket à créer
NOM_BUCKET=BUCKET1

aws configure
aws --endpoint-url=$API_S3_HOSTNAME s3api create-bucket --bucket $NOM_BUCKET

# on teste un listing des buckets pour vérifier que le bucket est bien présent
aws --endpoint-url=$API_S3_HOSTNAME s3api list-buckets 

Test unitaire : comment s'assurer que la connexion S3 est valide, à travers un script php ?

On installe le SDK aws-sdk-php :

sudo apt install composer php8.1-xml
mkdir ~/php/ ; cd ~/php/
composer require aws/aws-sdk-php
cat <<EOF > ./test-bucket-s3.php
<?php
require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\Exception\AwsException;

// Configuration
$config = [
    'version'     => 'latest',
    'region'      => 'us-east-1', // Adaptez à votre région si nécessaire
    'credentials' => [
        'key'    => 'la clé access "access"',
        'secret' => 'la clé secrete "secret"',
    ],
    'endpoint'    => 'https://hostname.api',
    'use_path_style_endpoint' => true,
];

// Créer un client S3
$s3 = new S3Client($config);

// Nom du bucket
$bucket = 'bucket1';

try {
    // Lister les objets dans le bucket
    $result = $s3->listObjects([
        'Bucket' => $bucket,
    ]);

    echo "Objets dans le bucket {$bucket}:\n";
    foreach ($result['Contents'] as $object) {
        echo $object['Key'] . "\n";
    }
} catch (AwsException $e) {
    // Afficher l'erreur
    echo "Erreur AWS S3: " . $e->getMessage() . "\n";
}
EOF

On exécute le script php :

php test-bucket-s3.php
Objets dans le bucket bucket1:
FILE1

Si le script ne liste pas les buckets, il y a alors une erreur sur les informations de connexion (ou alors il n'y a pas de bucket !).