GCP スキルバッジをもらおう4.IAM のカスタムの役割〜Security & Identity Fundamentals
実際にラボを実施した際の記録を載せていきます。
学習の助けになったリンクや、後に見るための学習メモ、ちょっと迷った手順を書いていきます。
あと、コマンドも忘れたくないのでログしていきます。
-
- 学習の助けになったリンクは、「学習に役立つリンク」にまとめて書いてあります。
-
- 学習メモはアイコンをつけてます。
-
- 迷った手順は箇条書きでつらつら書いてます。
- 実際の手順については、Google Cloud Skills Boostのラボの手順を参照してください。
クエスト「Security & Identity Fundamentals」のふたつめのラボです。
SkillBoostの始め方は記事「GCP スキルバッジをもらおう 1Google Cloud Skill Boostをはじめよう」をどうぞ。
25日にスキルバッジが獲得できるペースで公開していきます。
实验室的信息 de
ラボの名前:IAM のカスタムの役割
所要時間:1時間 レベル:Fundamental 必要なクレジット:5
概要:
カスタムの役割の作成、更新、削除をCloudSDKで実施する。
学習に役立つリンク
参考网址:
IAM
角色说明
相关SDK:
IAM
角色
实验室执行记录
理解IAM的自定义角色。
学习笔记:角色=角色
角色是权限的组合
角色可以分配给用户、群组或服务帐户
角色包括基本角色和自定义角色。
学習メモ:権限
次の形式で表せられる。
..
たとえば、
compute.instances.list 権限を持つユーザーは所有する Google Compute Engine インスタンスを一覧表示できる。
権限は REST メソッドと一対一で対応している。
GCP の各サービスには、各 REST メソッドに対して関連付けられている権限があり、メソッドを呼び出すには、呼び出し元にその権限が必要。
所需的权限和角色。
学习笔记:为创建自定义角色需要iam.roles.create权限的调用者
-
- プロジェクトの場合
-
- デフォルトでは、プロジェクト オーナーのみが新しい役割を作成できる。オーナーは、同じプロジェクトの他のユーザーに「IAM 役割の管理者」の役割(roles/iam.roleAdmin)を付与して管理する
-
- 組織の場合
-
- 組織管理者のみが「組織の役割の管理者」の役割(roles/iam.organizationRoleAdmin
-
- カスタムの役割を表示するだけで管理はできない。
- IAM セキュリティ レビュー担当者の役割(roles/iam.securityReviewer)
准备创建自定义角色
リソースで使用可能な権限を表示する
$gcloud iam list-testable-permissions //cloudresourcemanager.googleapis.com/projects/$DEVSHELL_PROJECT_ID
name: appengine.applications.create
stage: GA
---
name: appengine.applications.get
stage: GA
---
...
...
customRolesSupportLevel: TESTING
name: appengine.memcache.flush
stage: BETA
---
$
显示可以分配给资源的角色
实验室中,虽然这个步骤在后面,但为了确认元数据时指定的角色名字,我想先执行这部分。
$gcloud iam list-grantable-roles //cloudresourcemanager.googleapis.com/projects/$DEVSHELL_PROJECT_ID
---
description: Access to edit and deploy an action
name: roles/actions.Admin
title: Actions Admin
---
...
...
---
description: Gives Cloud Workflows service account access to managed resources.
name: roles/workflows.serviceAgent
title: Cloud Workflows Service Agent
$
获取角色元数据
句子结构
$gcloud iam roles describe [ROLE_NAME]
可以在将[ROLE_NAME]添加到的地方指定先前通过list-grantable-roles确认过的角色名称。
例如,在实验室操作中可以使用”roles/editor”。
$ gcloud iam roles describe roles/dialogflow.aamAdmin
description: An admin has access to all resources and can perform all administrative
actions in an AAM project.
etag: AA==
includedPermissions:
- dialogflow.agents.export
- dialogflow.agents.get
...
...
- resourcemanager.projects.list
name: roles/dialogflow.aamAdmin
stage: GA
title: AAM Admin
$
创建自定义角色
要创建新的自定义角色,可以使用gcloud iam roles create命令。
该命令有两种使用方式。
-
- 役割の定義が含まれる YAML ファイルを使用する–fileで指定。
-
- フラグを使用して役割の定義を指定する
- (カスタムの役割を作成する場合は–organization [ORGANIZATION_ID]フラグまたは –project [PROJECT_ID]フラグを使用して、組織レベルまたはプロジェクト レベルのどちらに適用するかを指定する必要があります)。
在实验室中,我们可以按项目级别创建自定义角色。
使用YAML文件创建自定义角色
句子结构
title: [ROLE_TITLE]
description: [ROLE_DESCRIPTION]
stage: [LAUNCH_STAGE]
includedPermissions:
- [PERMISSION_1]
- [PERMISSION_2]
学习笔记:
我们将使用以下内容创建和保存用于演练的Yaml文件。
使用nano时,按照ctrl+X>Y>Enter的顺序保存并关闭即可。
创建名为”Role Editor”的角色。
文件名:role-definition.yaml
内容:
title: "Role Editor"
description: "Edit access for App Versions"
stage: "ALPHA"
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
使用已创建的yaml文件来指定并创建权限
执行以下命令。
$gcloud iam roles create editor --project $DEVSHELL_PROJECT_ID \
--file role-definition.yaml
フラグを使用してカスタムの役割を作成する
次のコマンドを実行する。
「Role Viewer」という名前の役割を作成している。
$gcloud iam roles create viewer –project $DEVSHELL_PROJECT_ID \
–title “Role Viewer” –description “Custom role description.” \
–permissions compute.instances.get,compute.instances.list –stage ALPHA
列出自定义角色的作用。
确认已创建的角色。
执行下一条命令。
$gcloud iam roles list --project $DEVSHELL_PROJECT_ID
---
description: Edit access for App Versions
etag: BwVxLgrnawQ=
name: projects/[PROJECT_ID]/roles/editor
title: Role Editor
---
description: Custom role description.
etag: BwVxLg18IQg=
name: projects/[PROJECT_ID]/roles/viewer
title: Role Viewer
编辑现有的自定义角色
学习笔记:关于竞争。
たとえば、プロジェクトの 2 人のオーナーが、1 つの役割に対して相反する変更を同時に行うと、一部の変更が失敗する可能性があります。
Cloud IAM では、カスタムの役割の etag プロパティを使用してこの問題を解決します。このプロパティは、カスタムの役割が最後のリクエスト以降に変更されているかどうかを確認するために使用されます。etag 値を保持している Cloud IAM にリクエストを出すと、Cloud IAM はリクエスト内の etag 値と、カスタムの役割に関連付けられている既存の etag 値を比較します。etag 値が一致した場合にのみ変更を書き込みます。
可以使用gcloud iam roles update命令来编辑角色。这个命令有两种方式:Yaml和标志。
describe命令会返回角色的定义,该定义包含了唯一标识角色当前版本的etag值。为了确保同时更改的角色不会被覆盖,需要在更新后的角色定义中指定etag值。
使用YAML文件来更新自定义角色
创建一个用于更新的YAML文件。
因为想获取 etag 值,所以首先使用 describe 命令获取该值。
gcloud iam roles describe editor --project $DEVSHELL_PROJECT_ID
将输出内容复制。
使用以下内容创建并保存新的yaml文件。
文件名:new-role-definition.yaml
内容:
复制describe命令的内容,并在includedPermissions:部分添加两个权限。
- storage.buckets.get
- storage.buckets.list
会变成这样。
description: Edit access for App Versions
etag: BwVxIAbRq_I=
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
- storage.buckets.get
- storage.buckets.list
name: projects/[PROJECT_ID]/roles/editor
stage: ALPHA
title: Role Editor
使用创建的YAML文件来更新角色
指定一个已创建的yaml文件并执行gcloud iam roles update命令。
$gcloud iam roles update editor --project $DEVSHELL_PROJECT_ID \
--file new-role-definition.yaml
フラグを使用してカスタムの役割を更新する
学习笔记:标记的内容
通过使用下面的标志,可以添加或删除权限。
–add-permissions [PERMISSIONS]:将权限(如果有多个,使用逗号分隔)添加到角色中。
–remove-permissions [PERMISSIONS]:从角色中删除权限(如果有多个,使用逗号分隔)。
或者,还可以使用–permissions [PERMISSIONS]标志来指定新的权限。提供逗号分隔的权限列表,将替换现有的权限列表。
执行下面的命令
gcloud iam roles update viewer --project $DEVSHELL_PROJECT_ID \
--add-permissions storage.buckets.get,storage.buckets.list
禁用自定义角色
使用 “–stage” 标志将角色设置为 DISABLED。
执行以下 gcloud 命令以禁用 viewer 角色。
$gcloud iam roles update viewer --project $DEVSHELL_PROJECT_ID \
--stage DISABLED
删除自定义角色
学习笔记:即使删除了角色,一段时间内仍处于逻辑删除状态。
使用gcloud iam roles delete命令可以删除自定义角色。删除后的角色将变为无效,并且无法用于创建新的IAM策略绑定。
删除角色后,现有的绑定将保留但变为无效。在7天内,可以取消角色的删除。7天后,角色的完全删除过程将开始,并持续30天。37天后,角色ID将再次可用。
学习笔记:逐步删除
注意:如果要逐步取消角色,请将 role.stage 属性更改为 DEPRECATED,并设置 deprecation_message,以通知用户应使用的替代角色或获取详细信息的位置。
执行下列指令
gcloud iam roles delete viewer --project $DEVSHELL_PROJECT_ID
取消自定义角色的删除
如果在7天内,您可以将角色恢复到原始状态。已删除的角色处于 DISABLED 状态。您可以通过更新 –stage 标志来重新启用它们,例如以下命令。
gcloud iam roles undelete viewer --project $DEVSHELL_PROJECT_ID
辛苦了
确认右上方的得分显示已经变为”100/100″后,点击”结束实验室”按钮,实验室的步骤就完成了。