in Workflow automation/Move Malicious Blob FunctionApp Defender for Storage/MoveMaliciousBlobEventTrigger.cs [115:144]
private static async Task MoveCleanBlobAsync(Uri blobUri, ETag blobETag, ILogger log)
{
var blobUriBuilder = new BlobUriBuilder(blobUri);
if (blobUriBuilder.BlobContainerName == CleanContainer)
{
log.LogInformation("blob {0} is already in {1} container, skipping", blobUriBuilder.BlobName, CleanContainer);
return;
}
var destContainerUri = new Uri($"https://{blobUriBuilder.Host}/{CleanContainer}");
var defaultAzureCredential = new DefaultAzureCredential();
var srcBlobClient = new BlobClient(blobUri, defaultAzureCredential);
var destContainerClient = new BlobContainerClient(destContainerUri, defaultAzureCredential);
log.LogInformation("Creating {0} container if it doesn't exist", CleanContainer);
await destContainerClient.CreateIfNotExistsAsync();
var destBlobClient = destContainerClient.GetBlobClient(blobUriBuilder.BlobName);
if (!await srcBlobClient.ExistsAsync())
{
log.LogError("blob {0} doesn't exist", blobUri);
return;
}
log.LogInformation("MoveBlob: Copying blob to {0}", destBlobClient.Uri);
var copyConditions = new BlobRequestConditions { IfMatch = blobETag };
var copyFromUriOperation = await destBlobClient.StartCopyFromUriAsync(srcBlobClient.Uri, sourceConditions: copyConditions);
await copyFromUriOperation.WaitForCompletionAsync();
log.LogInformation("MoveBlob: Deleting source blob {0}", srcBlobClient.Uri);
await srcBlobClient.DeleteAsync();
log.LogInformation("MoveBlob: blob moved successfully");
}