代码之家  ›  专栏  ›  技术社区  ›  changembidar

blob存储的推荐访问实践

  •  0
  • changembidar  · 技术社区  · 1 年前

    由于我们正在构建Saas应用程序,并且我们现在需要将一些账单存储为容器中的azure blob,以便通过REST API在容器中创建blob(这里我们使用的是nodejs),因此我找到了两个选项来完成该过程

    1. 创建角色分配并将其分配为角色权限
    2. 通过创建具有某些规范(如用户委派密钥)的SAS令牌

    我想知道这种非人类机器人自动化方法在容器内创建blob时,建议采用哪种做法

    通过服务原则分配角色是否容易受到攻击,如果是,那么SAS及其对令牌的定期请求和验证呢,任何参考文件都会有所帮助。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Venkatesan    1 年前

    通过服务原则分配角色是否容易受到攻击,如果是,那么SAS及其对令牌的定期请求和验证呢,任何参考文件都会有所帮助。

    对于在容器内创建blob的自动化方法,我建议您选择 RBAC 在需要持续、长期访问的情况下,使用具有适当RBAC角色的服务主体,如 Storage Blob Data Contributor 你可以访问它。

    在哪里? SAS tokens 提供对特定资源(如容器或blob)和特定权限(如写入或列表)的限时访问。因此,SAS令牌将有助于解决临时或定期访问需求等情况。

    通过服务原则分配角色是否容易受到攻击,

    • 如果他们的凭据被暴露或管理不善,服务主体可能会有风险。
    • 为了解决这个问题,定期更改凭据并实施严格的访问控制非常重要。

    这是 node.js 使用服务主体进行身份验证并在Azure blob存储中创建blob的代码。

    首先创建服务主体并分配角色 Storage Blob Data contributor 角色使用此 MS-Document .

    代码:

    
    const { DefaultAzureCredential } = require('@azure/identity');
    const { BlobServiceClient } = require('@azure/storage-blob');
    
    // Replace with your values
    const accountName = "venkat32xxx3";
    const containerName = "sample";
    const blobName = "test.txt";
    const content = "Hello, World!";
    
    // Authenticate using DefaultAzureCredential
    const credential = new DefaultAzureCredential();
    const blobServiceClient = new BlobServiceClient(`https://${accountName}.blob.core.windows.net`, credential);
    
    async function createBlob() {
      try {
        const containerClient = blobServiceClient.getContainerClient(containerName);
        await containerClient.createIfNotExists();
        const blockBlobClient = containerClient.getBlockBlobClient(blobName);
        await blockBlobClient.upload(content, Buffer.byteLength(content));
        console.log(`Blob "${blobName}" is uploaded successfully.`);
      } catch (error) {
        console.error('Error uploading blob:', error);
      }
    }
    

    对于配置,将服务主体凭据存储为环境变量。

    AZURE_CLIENT_ID=<your-client-id>
    AZURE_CLIENT_SECRET=<your-client-secret>
    AZURE_TENANT_ID=<your-tenant-id>
    

    输出:

    Blob "test.txt" is uploaded successfully.
    

    enter image description here

    推荐文章