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 !).