我如何授权多个客户端应用程序访问我的Azure存储资源?
我正在构建一个NodeJS应用程序,它运行在不同客户端的本地硬件上。 我希望该应用程序将数据记录到我的Azure存储表中。 (将来,应用程序可能需要使用其他Azure服务。) 我应该如何授权应用程序的各个实例访问我的表 我希望将每个不同的客户机限制在不同的表中,并且只具有添加和读取访问权限—不进行更新或删除 如果需要的话,我希望能够在不影响其他客户的情况下,立即撤销单个客户的访问权限 我考虑了3种选择:我如何授权多个客户端应用程序访问我的Azure存储资源?,azure,azure-active-directory,identity,rbac,Azure,Azure Active Directory,Identity,Rbac,我正在构建一个NodeJS应用程序,它运行在不同客户端的本地硬件上。 我希望该应用程序将数据记录到我的Azure存储表中。 (将来,应用程序可能需要使用其他Azure服务。) 我应该如何授权应用程序的各个实例访问我的表 我希望将每个不同的客户机限制在不同的表中,并且只具有添加和读取访问权限—不进行更新或删除 如果需要的话,我希望能够在不影响其他客户的情况下,立即撤销单个客户的访问权限 我考虑了3种选择: 我考虑为每个客户端创建一个单独的存储帐户,并为客户端提供该帐户的访问密钥。但这将提供完全访
- 我考虑为每个客户端创建一个单独的存储帐户,并为客户端提供该帐户的访问密钥。但这将提供完全访问权限(包括更新和删除)
- 我考虑为每个客户端创建一个存储访问策略(SAP),然后在该策略上创建一个共享访问签名(SAS)。客户端可以使用共享访问签名进行连接。我看到的主要缺点是,如果我希望客户机的应用程序能够访问多个表,那么每个表都需要一个单独的SAP和SAS。我认为这会增加管理开销
- 由于应用程序是身份的另一种形式,我考虑为我的软件的每个实例创建一个身份。但我不确定如何(a)让应用程序将凭据传递到azure存储,或(b)授予应用程序读取/添加到表的权限
有人有什么想法或建议吗?正如您提到的,每个表都没有SAS令牌。在您的情况下,我建议您可以为每个SAS令牌未完全访问的客户端提供单独的存储帐户 当前不支持对Azure表的身份验证访问。Azure广告集成仅可用于预览中的Blob和队列服务。
有关使用Azure Active Directory(预览)验证对Azure Blob和队列的访问的更多信息,请参阅Azure。我在中查找有关如何从节点使用SAS的确切信息时遇到一些困难,因此我认为在此处发布我的代码示例以供参考可能很有用 我采取的步骤是:
npm init
设置节点项目npm安装azure存储
以下载库index.js
的文件,其内容如下所示node index.js
来运行代码const azure=require('azure-storage');
康斯特萨苏里酒店https://myaccount.table.core.windows.net/mytable';
const sasQuery='sv=2018-03-28&si=saspolicy&tn=mytable&sig=1%2FgfWdreRKfWpRjhRy3E8MiHDIxH35SPZY5ssU8lKw%3D';
const tableService=new azure.tableService(null,null,sasUri,sasQuery);
常数项={
PartitionKey:{''''.'keyvalue'},
RowKey:{“uuuz”:“2018-10-10T03:17:21Z”},
Col1:{'':23},
Col2:{''''':423}
};
tableService.insertEntity('mytable',项,函数(错误,结果,响应){
如果(错误){
控制台错误(err);
}否则{
console.log('success');
log('result='+JSON.stringify(result,null');
log('response='+JSON.stringify(response,null');
}
});
我的下一个挑战是找到描述实体中用于插入的
“
键的文档。看起来下划线用于值,而$可以用于类型,尽管如果未指定类型,则会猜测类型。如果需要,可以生成这些对象。不要忘记,如果SAS(如我的示例中所示),那么它在存储在Windows环境变量中时需要转义(加倍)。sv=2018-03-28&si=saspolicy&tn=mytable&sig=1%%2FgfWd…
I收回上面的注释。在使用chocolaterefreshenv
命令之前,环境变量中的字符是可以的。