IBM Cloud:通过API为存储桶创建与S3兼容的凭证

问题描述

TL; DR 如何使用S3兼容性层自动创建每用户凭据以访问COS存储桶?
唯一记录的AFAIK方式是CLI。但是将命令行执行嵌入到Web服务中并不是很吸引人!


针对COS (云对象存储)的IBM在线文档显示了两种为给定存储桶和给定角色 [reference]创建“具有HMAC凭证的服务密钥”的方法。

  • 通过管理界面
  • 使用CLI >> ibmcloud resource service-key-create ****** --parameters '{"HMAC":true}'

这些“ HMAC凭据”的目的是像访问存储区一样,将其存储在S3(或与S3 API兼容的任何其他设备)中。

现在,我假设UI和CLI都使用幕后的某种API 。也许他们必须与IAM API和COS API一起使用,才能将特定于COS的功能公开为“通用”安全功能。

但是我在IAM API的在线文档中找不到任何相关内容-唯一指定“资源”和“授权策略”的API调用是关于创建临时令牌,而不是持久密钥 [reference]
我也找不到与COS API相关的任何内容。那里没有安全性。
而且我会尝试研究CLI的源代码(如果它是开放源代码的,但是可惜不是)。

我想我唯一的希望是从实际开发CLI的IBM员工那里获取“内部信息” ...因此是下面的标签。

解决方法

因此,当您使用HMAC密钥创建服务凭证时,实际上发生的情况是这些永久密钥是由COS(不是IAM)生成的,并绑定到IAM服务ID(即非人类用户)。当您通过使用这些密钥创建签名来发送S3 API请求时,COS会找出关联的服务ID并与IAM一起检查以查看该身份是否具有足够的特权来执行所请求的操作。这使您可以使用持久性HMAC密钥,但需要浪费一些CPU为每个请求计算所有HMAC签名内容。因此,虽然IAM在策略执行级别处于幕后工作,但身份验证直接由COS处理。

现在,如果您要以编程方式创建服务凭证,则有一个REST API,但没有已发布的库(尽管我想您可以尝试从OpenAPI规范中生成一个)。本质上,您只需调用该API并在{"HMAC":true}对象内提供"Parameters"位。在响应中,您将找到带有HMAC密钥的凭据。

所有这些,您不想为应用程序的最终用户使用IAM令牌或HMAC签名。考虑一下您作为执行操作的执行者已绑定到HMAC凭证的服务ID。尝试使用户身份验证部分保持隔离,然后在允许某些最终用户执行某项操作时,让服务ID进行操作。显然,所有应用程序都将有所不同并面临各自的挑战。我们已经看到使用的一种模式(我一直打算为之编写教程)是让应用程序生成一个预签名的URL,并将其传递给客户端,从而避免了在应用程序空间之外传递凭据的任何需要。

IAM基本上是供管理员,开发人员和其他云服务用来对IBM Cloud中的操作进行身份验证和授权的(因此不打算扩展成千上万个访问策略),但是您应该寻找一些东西像App ID这样的最终用户身份验证片。

您使用的是哪种语言/框架?您是否在使用COS SDK?如果您想使用API​​密钥,它们会为您抽象化令牌管理内容。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...