欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GCP: IAM的使用

程序员文章站 2022-07-01 14:51:44
...

一、基本概念

IAM可让您通过定义谁(Identity)对哪些资源(Resource)具有哪种访问权限(Role)来管理访问权限控制。下面分别来解释这三个主体。

(一)与Identity相关的概念

包含5种类型的identity,前面三种用得最多

  1. Google 帐号:Google 帐号代表开发者、管理员或与 GCP 互动的任何其他人员
  2. 服务帐号(Service Account):服务帐号属于您的应用而非某个最终用户,也就是说这个帐号是给程序用的, 我们的应用程序需要使用某个服务帐号来调用其他服务
  3. Google 群组:Google 群组是 Google 帐号和服务帐号的指定集合,它是将访问权限政策(Policy)应用于一组用户的一种便捷方式。
  4. G Suite 网域:
  5. Cloud Identity 网域:

(二)与Resource相关的概念

  • Resource(资源): 项目、Compute Engine 实例和 Cloud Storage 存储分区都属于资源。

(三)与Role相关的概念

  1. Permission(权限): 权限决定了可以对资源执行的操作。在 Cloud IAM 领域中,权限以 <service>.<resource>.<verb> 的形式表示,例如 pubsub.topics.publish, 表示pubsub服务对topic有publish的权限。
  2. Role(角色): 角色是一组权限(permission)的集合。您不能直接为用户分配权限;而应为用户授予角色,为用户授予一个角色就是授予该角色包含的所有权限。
  3. Policy(政策):要为用户授予角色,您可以创建 Cloud IAM Policy,这是一组定义谁(member)拥有何种访问权限(role)的语句集合。Policy附加到资源,用于在访问该资源时强制实施访问权限控制。

以下代码段演示了 Cloud IAM 政策的结构,可以看出policy是用于定义member与role的一种绑定关系

{
  "bindings": [
   {
     "role": "roles/storage.objectAdmin",
     "members": [
       "user:aaa@qq.com",
       "serviceAccount:aaa@qq.com",
       "group:aaa@qq.com",
       "domain:google.com" ]
   },
   {
     "role": "roles/storage.objectViewer",
     "members": ["user:aaa@qq.com"]
   }
   ]
}

使用命令行快速授予/撤消单个用户角色 

# 快速授予单个用户角色
gcloud [GROUP] add-iam-policy-binding [RESOURCE-NAME]
  --member user:[USER-EMAIL] --role [ROLE-ID]

# 在my-project项目下,给用户aaa@qq.com授予角色roles/viewer
gcloud projects add-iam-policy-binding my-project
  --member user:aaa@qq.com --role roles/viewer

# 撤消单个用户角色
gcloud [GROUP] remove-iam-policy-binding [RESOURCE-NAME]
  --member user:[EMAIL] --role [ROLE-ID]

# 查看policy
gcloud projects get-iam-policy [PROJECT] --format [FORMAT] > [FILE-PATH]

# 修改policy
gcloud projects set-iam-policy [PROJECT] [FILE-PATH]

二、上述概念之间的关系

  • 一个权限决定了可以对资源执行的操作,以下图compute.instances.delete为例,compute是一个服务,instance是一个资源,服务compute对虚拟机实例(instance)有删除的权限。
  • 一个角色(Role)包含多个权限(Permission), 如下图, 一个role (compute.instance.Admin) 包含6种权限。

GCP: IAM的使用

  • Policy描述了用户与权限的一种绑定关系

例如:下图中,一个policy将用户(aaa@qq.com)与 Role (roles/appengine.appAdmin)进行绑定,一旦这个policy attached到某个项目上,那当前用户拥有appengine的所有权限。

GCP: IAM的使用

三、最佳实践

GCP 资源以分层方式组织,其中组织节点是层次结构中的根节点,项目是组织的子项,其他资源是项目的后代。每项资源有且仅有一个父项。如下图,层级关系是:organization----->folder----->project----->resource。 以某公司为例,example.com是某一个公司的组织,通常只有一个, Folders 表示为不同的环境,分为(Sandbox/Dev/Stage/Production)四种环境, Project表示具体的项目。

GCP: IAM的使用

 通过下图可以看出,IAM是如何对这资源进行访问控制的。

GCP: IAM的使用

示例:Cloud Storage

在 Cloud Storage 中,存储分区和对象是资源,其中存储分区是容纳对象的容器。将 Cloud IAM 与 Cloud Storage 结合使用的示例是允许拥有所上传文件的读取权限。

 

请想象这样一个场景:许多用户将文件上传到存储分区,但他们应该无法读取或删除其他用户上传的任何文件。您的数据处理专家应该能够读取和删除上传的文件,但应该无法删除存储分区,因为其他人正在使用存储分区位置上传其文件。在此场景中,您可以按如下方式在项目上设置政策:

  • 存储对象管理员授予您的数据处理专家 Alice(使用 aaa@qq.com)。
    • Alice 在项目级层拥有对象管理权限,并且可以读取、添加和删除项目中任何存储分区内的任何对象。
  • 存储对象创建者授予用户群组 aaa@qq.com。
    • 此政策意味着 aaa@qq.com 的所有成员都可以将文件上传到存储分区。
    • 群组成员拥有他们上传的文件,但他们无法读取或删除其他用户上传的任何文件。

下图演示了上面的示例:

GCP: IAM的使用

相关标签: GCP