Ibm cloud IBMCloud:通过API为bucket创建S3兼容的Cred

Ibm cloud IBMCloud:通过API为bucket创建S3兼容的Cred,ibm-cloud,ibm-cloud-storage,cloud-object-storage,ibm-cloud-iam,Ibm Cloud,Ibm Cloud Storage,Cloud Object Storage,Ibm Cloud Iam,TL;DR我们如何使用S3兼容层自动创建每个用户的凭据以访问COS存储桶? AFAIK的唯一记录方式是CLI;但是在web服务中嵌入命令行执行不是很吸引人 IBM针对COS(云对象存储)的在线文档展示了为给定bucket和给定角色创建“具有HMAC凭据的服务密钥”的两种方法 从管理界面 使用CLI>ibmcloud资源服务密钥创建******--parameters'{“HMAC”:true}' 这些“HMAC信条”的要点是访问bucket,就像它存储在S3(或与S3API兼容的任何其他设

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


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

  • 从管理界面
  • 使用CLI>
    ibmcloud资源服务密钥创建******--parameters'{“HMAC”:true}'
这些“HMAC信条”的要点是访问bucket,就像它存储在S3(或与S3API兼容的任何其他设备)中一样

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

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


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

因此,当您使用HMAC密钥创建服务凭据时,实际上发生的是,这些持久密钥由COS(不是IAM)生成,并绑定到IAM服务ID(即非人类用户)。当您通过使用这些密钥创建签名来发送S3API请求时,COS会计算出关联的服务ID,并与IAM进行检查,以查看该标识是否具有足够的权限来执行所请求的操作。这允许您使用持久的HMAC密钥,而不需要浪费一些CPU来计算每个请求的所有HMAC签名。因此,虽然IAM在策略实施级别涉及幕后,但身份验证由COS直接处理

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

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

基本上,IAM旨在为管理员、开发人员和其他云服务提供身份验证和授权IBM云中的操作的功能(因此不打算扩展到几千个访问策略),但您应该考虑类似于最终用户authz的功能


您使用的是什么语言/框架?你在使用COS SDK吗?如果您更愿意使用API密钥,它们会为您抽象出令牌管理内容。

因此,当您使用HMAC密钥创建服务凭据时,实际上发生的是这些持久密钥由COS(而不是IAM)生成,并绑定到IAM服务ID(即非人类用户)。当您通过使用这些密钥创建签名来发送S3API请求时,COS会计算出关联的服务ID,并与IAM进行检查,以查看该标识是否具有足够的权限来执行所请求的操作。这允许您使用持久的HMAC密钥,而不需要浪费一些CPU来计算每个请求的所有HMAC签名。因此,虽然IAM在策略实施级别涉及幕后,但身份验证由COS直接处理

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

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

基本上,IAM旨在为管理员、开发人员和其他云服务提供身份验证和授权IBM云中的操作的功能(因此不打算扩展到几千个访问策略),但您应该考虑类似于最终用户authz的功能

什么语言/框架