Partager via


Gérer des conteneurs d’objets blob avec PowerShell

Le stockage d’objets blob Azure vous permet de stocker de grandes quantités de données d’objet non structurées. Vous pouvez utiliser le Stockage Blob pour collecter ou exposer des données multimédias, de contenu ou d’application aux utilisateurs. Étant donné que toutes les données blob sont stockées dans des conteneurs, vous devez créer un conteneur de stockage avant de commencer à charger des données. Pour en savoir plus sur le Stockage Blob, lisez Présentation du Stockage Blob Azure.

Cet article explique comment travailler avec des objets de conteneur de stockage individuels ou multiples.

Prérequis

Pour pouvoir utiliser les exemples décrits dans cet article, vous devez obtenir l’autorisation d’un abonnement Azure. L’autorisation peut être obtenue en vous authentifiant avec un compte Microsoft Entra ou à l’aide d’une clé partagée. Les exemples décrits dans cet article utilisent l’authentification Microsoft Entra conjointement avec des objets de contexte. Les objets de contexte encapsulent vos informations d’identification Microsoft Entra et les passent aux opérations de données suivantes, ce qui élimine le besoin de vous authentifier à nouveau.

Pour vous connecter à votre compte Azure avec un compte Microsoft Entra, ouvrez PowerShell et appelez la cmdlet Connect-AzAccount.

# Connect to your Azure subscription
 Connect-AzAccount

Une fois la connexion établie, créez le contexte du compte de stockage en appelant la cmdlet New-AzStorageContext. Inclure le paramètre -UseConnectedAccount afin que les opérations de données soient effectuées à l’aide de vos informations d’identification Microsoft Entra.

# Create a context object using Azure AD credentials
 $ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount

N’oubliez pas de remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs. Pour plus d’informations sur la connexion à Azure avec PowerShell, consultez Se connecter avec Azure PowerShell.

Créez un conteneur.

Pour créer des conteneurs avec PowerShell, appelez la cmdlet New-AzStorageContainer. Il n’existe aucune limite au nombre d’objets blob ou conteneurs qui peuvent être créés dans un compte de stockage. Les conteneurs ne peuvent pas être imbriqués dans d’autres conteneurs.

L’exemple suivant illustre trois options pour la création de conteneurs de blob avec la cmdlet New-AzStorageContainer. La première approche crée un conteneur unique, tandis que les deux autres tirent parti des opérations PowerShell pour automatiser la création de conteneurs.

Pour utiliser cet exemple, fournissez les valeurs des variables et assurez-vous d’avoir créé une connexion à votre abonnement Azure. N’oubliez pas de remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs.

# Create variables
 $containerName  = "individual-container"
 $prefixName     = "loop"

# Approach 1: Create a container
 New-AzStorageContainer -Name $containerName -Context $ctx

# Approach 2: Create containers with a PowerShell loop
 for ($i = 1; $i -le 3; $i++) { 
     New-AzStorageContainer -Name (-join($prefixName, $i)) -Context $ctx
    } 

# Approach 3: Create containers using the PowerShell Split method
 "$($prefixName)4 $($prefixName)5 $($prefixName)6".split() | New-AzStorageContainer -Context $ctx

Le résultat fournit le nom du compte de stockage et confirme la création du nouveau conteneur.

Storage Account Name: demostorageaccount

Name                   PublicAccess   LastModified
----                   ------------   ------------
individual-container   Off            11/2/2021 4:09:05 AM +00:00
loop-container1        Off            11/2/2021 4:09:05 AM +00:00
loop-container2        Off            11/2/2021 4:09:05 AM +00:00
loop-container3        Off            11/2/2021 4:09:05 AM +00:00           
loop-container4        Off            11/2/2021 4:09:05 AM +00:00           
loop-container5        Off            11/2/2021 4:09:05 AM +00:00           
loop-container6        Off            11/2/2021 4:09:05 AM +00:00          

Répertorier les conteneurs

Utilisez la cmdlet Get-AzStorageContainer pour récupérer les conteneurs de stockage. Pour récupérer un seul conteneur, incluez le paramètre -Name. Pour renvoyer une liste de conteneurs qui commencent par une chaîne de caractères donnée, spécifiez une valeur pour le paramètre -Prefix.

L’exemple suivant récupère à la fois un conteneur individuel et une liste de ressources de conteneur.

# Create variables
 $containerName  = "individual-container"
 $prefixName     = "loop-"

# Approach 1: Retrieve an individual container
 Get-AzStorageContainer -Name $containerName -Context $ctx
 Write-Host

# Approach 2: Retrieve a list of containers
 Get-AzStorageContainer -Prefix $prefixName -Context $ctx

Le résultat fournit l’URI du point de terminaison blob et répertorie les conteneurs récupérés par nom et préfixe.

   Storage Account Name: demostorageaccount

Name                 PublicAccess         LastModified                   IsDeleted  VersionId        
----                 ------------         ------------                   ---------  ---------        
individual-container                      11/2/2021 5:52:08 PM +00:00                                

loop-container1                           11/2/2021 12:22:00 AM +00:00                               
loop-container2                           11/2/2021 12:22:00 AM +00:00                               

loop-container1                           11/2/2021 12:22:00 AM +00:00                               
loop-container2                           11/2/2021 12:22:00 AM +00:00
loop-container3                           11/2/2021 12:22:00 AM +00:00   True       01D7E7129FDBD7D4
loop-container4                           11/2/2021 12:22:00 AM +00:00   True       01D7E8A5EF01C787 

Lire les métadonnées et les propriétés de conteneur

Un conteneur expose à la fois les propriétés système et les métadonnées définies par l’utilisateur. Des propriétés système existent sur chaque ressource de stockage blob. Certaines propriétés sont en lecture seule, d’autres peuvent être lues ou définies. En arrière-plan, certaines propriétés système correspondent à certains en-têtes HTTP standard.

Ces métadonnées définies par l’utilisateur se composent d’une ou plusieurs paires nom-valeur, que vous spécifiez pour une ressource de stockage blob. Vous pouvez les utiliser pour stocker des valeurs supplémentaires avec la ressource. Les valeurs de métadonnées sont destinées à votre usage personnel et n’affectent pas le comportement de la ressource.

Propriétés de conteneur

L’exemple suivant récupère tous les conteneurs avec le préfixe demo et itère à travers la liste en répertoriant leurs propriétés.

# Create variable
 $prefix = "loop"

# Get containers
 $containers = Get-AzStorageContainer -Prefix $prefix -Context $ctx

# Iterate containers, display properties
 Foreach ($container in $containers) 
 {
    $containerProperties = $container.BlobContainerClient.GetProperties()
    Write-Host $container.Name "properties:"
    $containerProperties.Value
 }

Les résultats affichent tous les conteneurs avec le préfixe loop et indiquent leurs propriétés.

loop-container1 properties:

LastModified                      : 12/7/2021 7:47:17 PM +00:00
LeaseStatus                       : Unlocked
LeaseState                        : Available
LeaseDuration                     : Infinite
PublicAccess                      : 
HasImmutabilityPolicy             : False
HasLegalHold                      : False
DefaultEncryptionScope            : $account-encryption-key
PreventEncryptionScopeOverride    : False
DeletedOn                         : 
RemainingRetentionDays            : 
ETag                              : 0x8D9B9BA602806DA
Metadata                          : {}
HasImmutableStorageWithVersioning : False

loop-container2 properties:
LastModified                      : 12/7/2021 7:47:18 PM +00:00
LeaseStatus                       : Unlocked
LeaseState                        : Available
LeaseDuration                     : Infinite
PublicAccess                      : 
HasImmutabilityPolicy             : False
HasLegalHold                      : False
DefaultEncryptionScope            : $account-encryption-key
PreventEncryptionScopeOverride    : False
DeletedOn                         : 
RemainingRetentionDays            : 
ETag                              : 0x8D9B9BA605996AE
Metadata                          : {}
HasImmutableStorageWithVersioning : False

Métadonnées de conteneur de lecture et d’écriture

Les utilisateurs qui ont plusieurs milliers d’objets dans leur compte de stockage peuvent rapidement localiser des conteneurs spécifiques en fonction de leurs métadonnées. Pour accéder aux métadonnées, vous devez utiliser l’objet BlobContainerClient. Cet objet vous permet d’accéder aux conteneurs et à leurs blobs et de les manipuler. Pour mettre à jour les métadonnées, vous devez appeler la méthode SetMetadata(). Cette méthode n’accepte que les paires valeur-clé stockées dans un objet IDictionary générique. Pour plus d’informations, voir la classe BlobContainerClient

L’exemple ci-dessous met à jour les métadonnées d’un conteneur, puis récupère celles d’un conteneur. L’exemple vide le conteneur d’exemple de la mémoire et le récupère de nouveau pour s’assurer que les métadonnées ne sont pas lues à partir de l’objet en mémoire.

# Create variable
  $containerName = "individual-container"

# Retrieve container
 $container = Get-AzStorageContainer -Name $containerName -Context $ctx

# Create IDictionary, add key-value metadata pairs to IDictionary
 $metadata = New-Object System.Collections.Generic.Dictionary"[String,String]"
 $metadata.Add("CustomerName","Anthony Bennedetto")
 $metadata.Add("CustomerDOB","08/03/1926")
 $metadata.Add("CustomerBirthplace","Long Island City")

# Update metadata
  $container.BlobContainerClient.SetMetadata($metadata, $null)

# Flush container from memory, retrieve updated container
 $container = $null
 $container = Get-AzStorageContainer -Name $containerName -Context $ctx
 
# Display metadata
 $properties = $container.BlobContainerClient.GetProperties()
 Write-Host $container.Name "metadata:" 
 Write-Host $properties.Value.Metadata

Les résultats affichent les métadonnées complètes d’un conteneur.

individual-container metadata:

[CustomerName, Anthony Bennedetto] [CustomerDOB, 08/03/1926] [CustomerBirthplace, Long Island City]

Obtenir une signature d’accès partagé pour un conteneur

Une signature d’accès partagé (SAP) offre un accès délégué aux ressources Azure. Une SAP vous donne un contrôle granulaire sur la manière dont un client peut accéder à vos données. Par exemple, vous pouvez spécifier les ressources disponibles pour le client. Vous pouvez également limiter les types d’opérations que le client peut effectuer et spécifier la durée pendant laquelle les actions peuvent être effectuées.

Une signature d’accès partagé (SAP) est généralement utilisée pour fournir un accès temporaire et sécurisé à un client qui n’a normalement pas les autorisations. Ce scénario peut être, par exemple, un service qui permet aux utilisateurs de lire et d’écrire leurs propres données sur votre compte de stockage.

Stockage Azure prend en charge trois types de signatures d’accès partagé : SAP de délégation d’utilisateur, de service et de compte. Pour plus d’informations sur les signatures d’accès partagé, consultez l’article Créer une signature d’accès partagé de service pour un conteneur ou un blob.

Attention

Tout client disposant d’une SAP valide peut accéder aux données de votre compte de stockage tel qu’autorisé par cette SAP. Il est important de protéger une SAP contre toute utilisation malveillante ou involontaire. Faites preuve de discrétion lors de la distribution d’une SAP et mettez en place un plan de révocation d’une SAS compromis.

L’exemple suivant illustre le processus de configuration d’une SAP de service pour un conteneur spécifique à l’aide de la cmdlet New-AzStorageContainerSASToken. L’exemple configure la SAP avec les heures de début et d’expiration et un protocole. Il spécifiera également les autorisations read, write et list dans la SAP à l’aide du paramètre -Permission. Vous pouvez consulter la table complète des autorisations dans l’article Créer une SAP.

# Create variables
 $accountName   = "<storage-account>"
 $containerName = "individual-container"
 $startTime     = Get-Date
 $expiryTime    = $startTime.AddDays(7)
 $permissions   = "rwl"
 $protocol      = "HttpsOnly"

# Create a context object using Azure AD credentials, retrieve container
 $ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount
 
# Approach 1: Generate SAS token for a specific container
 $sas = New-AzStorageContainerSASToken `
 -Context $ctx `
 -Name $containerName `
 -StartTime $startTime `
 -ExpiryTime $expiryTime `
 -Permission $permissions `
 -Protocol $protocol

# Approach 2: Generate SAS tokens for a container list using pipeline
  Get-AzStorageContainer -Container $filterName -Context $ctx | New-AzStorageContainerSASToken `
 -Context $ctx `
 -StartTime $startTime `
 -ExpiryTime $expiryTime `
 -Permission $permissions `
 -Protocol $protocol | Write-Output

Remarque

Le jeton SAP retourné par le stockage Blob n’inclut pas le caractère délimiteur (« ? ») pour la chaîne de requête d’URL. Si vous ajoutez le jeton SAP à une URL de ressource, n’oubliez pas d’ajouter également le caractère délimiteur.

Supprimer des conteneurs

En fonction de votre cas d’utilisation, vous pouvez supprimer un conteneur ou une liste de conteneurs avec la cmdlet Remove-AzStorageContainer. Lors de la suppression d’une liste de conteneurs, vous pouvez tirer parti des opérations conditionnelles, des boucles ou du pipeline PowerShell, comme le montrent les exemples ci-dessous.

# Create variables
 $accountName    = "<storage-account>"
 $containerName  = "individual-container"
 $prefixName     = "loop-"

# Delete a single named container
 Remove-AzStorageContainer -Name $containerName -Context $ctx

# Iterate a loop, deleting containers
 for ($i = 1; $i -le 2; $i++) { 
     Remove-AzStorageContainer -Name (-join($containerPrefix, $i)) -Context $ctx
    } 

# Retrieve container list, delete using a pipeline
 Get-AzStorageContainer -Prefix $prefixName -Context $ctx | Remove-AzStorageContainer

Dans certains cas, il est possible de récupérer des conteneurs qui ont été supprimés. Si l’option de protection des données avec la suppression réversible de votre compte de stockage est activée, le paramètre -IncludeDeleted retourne les conteneurs supprimés pendant la période de rétention associée. Le paramètre -IncludeDeleted ne peut être utilisé qu’avec le paramètre -Prefix lors du renvoi d’une liste de conteneurs. Pour en savoir plus sur la suppression réversible, reportez-vous à l’article sur la Suppression réversible des conteneurs.

Utilisez l’exemple suivant pour récupérer une liste de conteneurs supprimés pendant la période de rétention associée au compte de stockage.

# Retrieve a list of containers including those recently deleted
 Get-AzStorageContainer -Prefix $prefixName -Context $ctx -IncludeDeleted

Restaurer un conteneur supprimé de manière réversible

Comme indiqué dans la section Conteneurs de listes, vous pouvez configurer l’option de protection des données avec la suppression réversible sur votre compte de stockage. Lorsque vous l’activez, il est possible de restaurer des conteneurs supprimés pendant la période de rétention associée.

L’exemple suivant explique comment restaurer un conteneur supprimé (suppression réversible) avec la cmdlet Restore-AzStorageContainer. Pour pouvoir suivre cet exemple, vous devez activer la suppression réversible et la configurer sur au moins un de vos comptes de stockage.

Pour en savoir plus sur l’option de protection des données avec la suppression réversible, reportez-vous à l’article Suppression réversible pour les conteneurs.

# Create variables
 $accountName = "<storage-account>"
 $prefixName  = "loop-"

# Create a context object using Azure AD credentials
 $ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount

# Retrieve all containers, filter deleted containers, restore deleted containers
 Get-AzStorageContainer -Prefix $prefixName -IncludeDeleted `
    -Context $ctx | ? { $_.IsDeleted } | Restore-AzStorageContainer

Les résultats affichent tous les conteneurs avec le préfixe demo qui ont été restaurés.

    Storage Account Name: demostorageaccount

Name                 PublicAccess         LastModified                   IsDeleted  VersionId        
----                 ------------         ------------                   ---------  ---------        
loop-container3                                                                                       
loop-container4               

Voir aussi