我的机器人无法使用系统分配的托管身份访问Blob存储帐户

时间:2020-09-09 02:39:34

标签: javascript botframework azure-storage

我正在探索将bot与Azure blob存储结合使用。我想将其用作状态的永久存储,以及存储成绩单。

我这样配置BlobStorage对象:

storageProvider = new BlobStorage( {
  containerName: process.env.BlobContainerName,
  storageAccountOrConnectionString: process.env.BlobConnectionString
} );

由于敏感信息存储在这些文件(尤其是成绩单)中,因此我正在与我的团队一起保护存储帐户及其中的容器。

我们已经为托管该机器人的应用程序服务创建了一个系统分配的托管身份,并且为该帐户授予了“存储Blob数据贡献者”角色。据我了解,它提供对存储内容的读取,写入和删除访问。

不幸的是,当漫游器尝试访问存储时,访问尝试失败。我在“ OnTurnError跟踪”中看到以下错误:

StorageError: Forbidden

有趣的是,使用相同的Blob存储连接字符串在本地运行bot。提示此问题与服务身份和/或它具有的权限有关。

有人知道导致错误的原因吗?存储帐户是否需要更多权限?也欢迎任何关于增加错误记录以潜在地查看更详细的错误消息的想法。

1 个答案:

答案 0 :(得分:0)

目前我不认为该框架支持使用系统分配的托管身份来访问Blob存储。

通过调查,我发现了许多Node.js的示例,这些示例使用两个特定的程序包使用系统分配的身份来访问Blob存储。具体来说:

身份包是一种提供获取与凭证关联的令牌的功能的包,然后由存储blob包中的代码用于与存储帐户进行交互。

如果我查看bot框架的依赖关系树,则看不到这两个软件包中的任何一个。相反,我看到了:

深入研究这两个软件包,我看不到任何用于连接到使用凭证的Azure存储帐户的代码。我能找到的唯一代码使用访问键。因此,我目前的结论是,该机器人框架不支持使用凭据访问存储帐户。

虽然我们可以探索添加使用这些软件包的代码,但目前如此大的开发工作不在我们项目的范围之内。

如果任何人比我了解的知识更多,这是不正确的,请通过评论告知我,我将作进一步探讨。

目前,我们已经决定继续使用访问键。因为它与机器人访问其他服务的方式一样安全。例如QnA Maker等认知服务。