首页 > 解决方案 > IBM Cloud:通过 API 为存储桶创建与 S3 兼容的凭据

问题描述

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


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

这些“HMAC 凭据”的重点是访问存储桶,就好像它存储在 S3(或与 S3 API 兼容的任何其他设备)中一样。

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

但我在 IAM API 的在线文档中找不到任何相关内容——唯一指定“资源”和“授权策略”的 API 调用是关于创建临时令牌,而不是持久密钥[参考]
我无法'在 COS API 中也找不到任何相关的内容。那里没有什么安全问题。
如果它是开源的,我会尝试深入研究 CLI 的源代码,但可惜它不是。

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

标签: ibm-cloudibm-cloud-storagecloud-object-storageibm-cloud-iam

解决方案


因此,当您使用 HMAC 密钥创建服务凭证时,本质上发生的情况是,这些持久密钥是由 COS(不是 IAM)生成的,并绑定到 IAM 服务 ID(即非人类用户)。当您通过使用这些密钥创建签名来发送 S3 API 请求时,COS 会计算出关联的服务 ID 并与 IAM 核对以查看该身份是否具有足够的权限来执行所请求的操作。这允许您以需要浪费一些 CPU 为每个请求计算所有 HMAC 签名内容为代价来使用持久 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 密钥,它们会为您抽象出令牌管理的东西。


推荐阅读