临时访问 GCP 资源

8

我对GCP还很陌生,但我曾在AWS上使用AWS Cognito Assume Role API和组织账号池以及创建自定义URL来提供临时访问AWS资源的服务。

我现在想为GCP创建类似的解决方案。我希望能够为500个并发用户提供访问权限。有没有人可以提供什么最佳方法?

经过我的研究和开发,可以使用服务账户,但存在一些项目限制。

3个回答

4
您可以使用IAM条件。如果要脚本化访问权限,这篇文档非常有用。您可以使用控制台进行测试。
首先,在IAM页面中添加或编辑权限。选择一个角色,然后单击添加权限。 enter image description here 命名您的条件并选择相应条件。 enter image description here 编辑 您也可以直接使用API进行操作。
您还可以使用客户端库。没有专门针对资源管理器的库,您需要使用Discovery API。在这里了解资源管理器v1的描述
因此,在Python中,代码如下:
import googleapiclient.discovery
resourceManager = googleapiclient.discovery.build("cloudresourcemanager","v1")
result = resourceManager.projects().getIamPolicy(resource="<ProjectId>").execute()
print(result)
body={
'policy': {
  'bindings': [
    {
      'role': 'roles/storage.objectViewer',
      'members': [
        'user:myUser@example.com'
      ],
      'condition': {
        'title': 'expirable access',
        'expression': 'request.time < timestamp("2020-10-01T00:00:00.000Z")'
      }
    }
  ],
  'version': 3
  }
}
result = resourceManager.projects().setIamPolicy(resource="<ProjectId>", body=body).execute()
print(result)

注意:您需要针对要授予的每个角色重复绑定代码块

请小心操作

在这两种情况下,您都将设置IAM策略,这将覆盖项目上的现有策略。顺便说一句,一个好的做法是在设置策略之前执行getIamPolicy(也在我的示例中),并在设置之前更新结果。


是的,但您需要编写脚本!如果这500个用户具有完全相同的限制,我是说,您想同时在同一角色上应用完全相同的条件,最好创建一个Google组,将这500个用户放入其中,然后仅为用户组定义访问和条件。 - guillaume blaquiere
不,将会有10到15个不同的权限集合,我们能否使用API定义这些条件集合?因为一切都将在脚本中动态完成。 - shivaniverma6991

2
GCP具有短期服务帐户凭据
该过程涉及一个调用者,可以是Google帐户或服务帐户,并发出请求以创建第二个服务帐户的短期凭据。
例如,您可以生成具有特定权限的OAuth 2.0访问令牌,有效期为1小时。
请注意,服务帐户与常规用户帐户不同,它们属于特定的GCP资源(如VM),并且不属于G Suite域。它们也不能通过浏览器登录。

-1
在GCP中,您可以使用Google Identity Platform存储用户身份,包括用户名和密码。https://developers.google.com/identity 有不同类型的身份存储可用,您可以从列表中选择其中之一。从Google Cloud->Identity Provider->提供商列表中,选择选项Email/Password(附带截图enter image description here)。您可以使用Google Firestore保存用户数据。
Cloud Firestore(NoSQL)是Firebase和Google Cloud Platform提供的适用于移动、Web和服务器开发的灵活可扩展数据库。
我通常将其与Google Firebase结合使用,并创建UI以加速开发。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接