必须如何存储 Azure Blob 存储连接数据以支持所有可用的寻址模式?
How does Azure BlobStorage connection data have to be stored to support all available addressing modes?
我正在使用库 Microsoft.Azure.Storage.Blob
11.2.3.0 and Microsoft.Azure.Storage.Common
11.2.3.0 从 .NET Core 3.1 应用程序连接到 Azure BlobStorage。
我的应用程序的用户应该向 Azure BlobStorage to/from 提供连接信息,应用程序将在其中 deposit/retrieve 数据。
最初,我假设允许用户指定 连接字符串 和自定义 blob 容器名称(作为默认值的可选覆盖)就足够了。我可以简单地将连接字符串填充到 CloudStorageAccount.Parse
方法中,然后取回一个存储帐户实例来调用 CreateBlobCloudClient
on.
现在我正在尝试使用此方法通过特定于容器的 SAS 进行连接(另请参阅 my other question about that),看来连接字符串可能不是最通用的方法。
相反,它现在似乎是一个 blob 容器 URL,加上一个 SAS 令牌 或 一个帐户密钥(可能还有一个帐户名,认为似乎包括在内在 blob 容器中 URL 已经)更加通用。但是,我担心指向我需要支持的 blob 存储的下一种方式(无论哪种方式)可能需要另一种信息 - 因此我的问题:
我需要在我的应用程序的配置文件中支持哪些“字段”集,以确保我的用户可以以他们想要的任何方式指向他们的 BlobStorage,只要他们 有 BlobStorage?
(微软是否有标准解决方案或最佳实践推荐?)
请注意,我只关心要存储什么。任意长的字符串?某种复杂的对象?如果有,有哪些字段?
我不会在知道配置必须包含的内容后询问如何存储该配置。例如,这与安全加密凭据等无关
解决方法要使用 SAS 令牌访问存储帐户,您需要传递 帐户名称以及 SAS 令牌和 Blob 名称 如果您尝试上传并且需要提供您的 SAS 令牌的权限。
Microsoft 建议尽可能使用 Azure Active Directory (Azure AD) 来授权对 blob 和队列数据的请求,而不是共享密钥。 Azure AD 提供优于共享密钥的安全性和易用性。有关使用 Azure AD 授权访问数据的更多信息,see Authorize access to Azure blobs and queues using Azure Active Directory..
注意:根据我的测试,您需要传递存储帐户名称和 SAS 令牌以及容器名称和 Blob 名称
示例: 我尝试使用容器级 SAS 令牌将文件上传到容器。能够成功上传文件。
const string sasToken = "SAS Token";
StorageCredentials storageCredentials = new StorageCredentials(sasToken);
const string accountName = "teststorage65";//Account Name
const string blobContainerName = "test";
const string blobName = "test.txt";
const string myFileLocation = @"Local Path ";
var storageAccount = new CloudStorageAccount(storageCredentials, accountName, null, true);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer = blobClient.GetContainerReference(blobContainerName);
//blobContainer.CreateIfNotExists();
CloudBlockBlob cloudBlob = blobContainer.GetBlockBlobReference(blobName);
cloudBlob.UploadFromFile(myFileLocation);
如您所知,您可以使用 存储连接字符串 连接存储。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("Connection string");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("test");
您的应用程序需要在运行时访问连接字符串以授权对 Azure 存储的请求。
您有多种选择来存储您的连接字符串或 SAS 令牌
1) 您可以将连接字符串存储在环境变量中。
2) 桌面或设备上的应用程序 运行 可以将连接字符串存储在 app.config 或 web.config 文件。将连接字符串添加到这些文件的 AppSettings 部分。
3) Azure 云服务中的应用程序 运行 可以将连接字符串存储在 Azure 服务配置架构 (.cscfg) 文件中。将连接字符串添加到服务配置文件的 ConfigurationSettings 部分。
参考:https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string
我正在使用库 Microsoft.Azure.Storage.Blob
11.2.3.0 and Microsoft.Azure.Storage.Common
11.2.3.0 从 .NET Core 3.1 应用程序连接到 Azure BlobStorage。
我的应用程序的用户应该向 Azure BlobStorage to/from 提供连接信息,应用程序将在其中 deposit/retrieve 数据。
最初,我假设允许用户指定 连接字符串 和自定义 blob 容器名称(作为默认值的可选覆盖)就足够了。我可以简单地将连接字符串填充到 CloudStorageAccount.Parse
方法中,然后取回一个存储帐户实例来调用 CreateBlobCloudClient
on.
现在我正在尝试使用此方法通过特定于容器的 SAS 进行连接(另请参阅 my other question about that),看来连接字符串可能不是最通用的方法。
相反,它现在似乎是一个 blob 容器 URL,加上一个 SAS 令牌 或 一个帐户密钥(可能还有一个帐户名,认为似乎包括在内在 blob 容器中 URL 已经)更加通用。但是,我担心指向我需要支持的 blob 存储的下一种方式(无论哪种方式)可能需要另一种信息 - 因此我的问题:
我需要在我的应用程序的配置文件中支持哪些“字段”集,以确保我的用户可以以他们想要的任何方式指向他们的 BlobStorage,只要他们 有 BlobStorage?
(微软是否有标准解决方案或最佳实践推荐?)
请注意,我只关心要存储什么。任意长的字符串?某种复杂的对象?如果有,有哪些字段?
我不会在知道配置必须包含的内容后询问如何存储该配置。例如,这与安全加密凭据等无关
解决方法要使用 SAS 令牌访问存储帐户,您需要传递 帐户名称以及 SAS 令牌和 Blob 名称 如果您尝试上传并且需要提供您的 SAS 令牌的权限。
Microsoft 建议尽可能使用 Azure Active Directory (Azure AD) 来授权对 blob 和队列数据的请求,而不是共享密钥。 Azure AD 提供优于共享密钥的安全性和易用性。有关使用 Azure AD 授权访问数据的更多信息,see Authorize access to Azure blobs and queues using Azure Active Directory..
注意:根据我的测试,您需要传递存储帐户名称和 SAS 令牌以及容器名称和 Blob 名称
示例: 我尝试使用容器级 SAS 令牌将文件上传到容器。能够成功上传文件。
const string sasToken = "SAS Token";
StorageCredentials storageCredentials = new StorageCredentials(sasToken);
const string accountName = "teststorage65";//Account Name
const string blobContainerName = "test";
const string blobName = "test.txt";
const string myFileLocation = @"Local Path ";
var storageAccount = new CloudStorageAccount(storageCredentials, accountName, null, true);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer = blobClient.GetContainerReference(blobContainerName);
//blobContainer.CreateIfNotExists();
CloudBlockBlob cloudBlob = blobContainer.GetBlockBlobReference(blobName);
cloudBlob.UploadFromFile(myFileLocation);
如您所知,您可以使用 存储连接字符串 连接存储。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("Connection string");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("test");
您的应用程序需要在运行时访问连接字符串以授权对 Azure 存储的请求。
您有多种选择来存储您的连接字符串或 SAS 令牌
1) 您可以将连接字符串存储在环境变量中。
2) 桌面或设备上的应用程序 运行 可以将连接字符串存储在 app.config 或 web.config 文件。将连接字符串添加到这些文件的 AppSettings 部分。
3) Azure 云服务中的应用程序 运行 可以将连接字符串存储在 Azure 服务配置架构 (.cscfg) 文件中。将连接字符串添加到服务配置文件的 ConfigurationSettings 部分。
参考:https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string