こんにちは
このガイドにはグーグルさんが提供しているCloud IAMの概要上で省略して簡単にIAMのことが分かる為提供いたします。
詳細はここです。
では、主な基本知識を説明いたします。
Identity and Access Management(IAM)を管理します
Cloud IAMは各リソースに対するアクセス制御を行うためのサービスです。
Cloud IAM では、誰(ID)がどのリソースに対してどのようなアクセス権(役割)を持つのかを定義することにより、アクセス制御を管理します。
次の図に、Cloud IAM で権限を管理する仕組みを示します。
誰(ID): Members
アクセス権(役割): Roles
1つ以上のMembersを1つのRolesにバインド: Policy
ではIAMを使ってみよう~
―対象プロジェクト名:ACE-le-202004
IAM 役割の割り当てを表示します
Cloud Console で IAM ページを開きます
[追加] をクリックします。
IAM 役割をアカウントまたは Googleグループに割り当ています
[New members]
Cloud IAM では、メンバーに対してアクセス権を付与します。メンバーには次のタイプがあります。
― Google アカウント
― サービス アカウント
― Google グループ
― G Suite ドメイン
― Cloud Identity ドメイン
今回の作成するPolicyは、
―Memberタイプ:Googleアカウントemail
―Roles: Storage Object Creator
Roles一覧はリンクをご参考下さい
結果は、
では共有された者からストレージへアクセスしてみよう
次の図にアクセスが出来ない理由はstorage.buckets.listの権限がありません。
とりあえず、先ほど作成したPolicyを調整します。RolesはStorage Adminへ変更します。
Storage Admin権限でStorageリソースを利用できるようになっています。
以上にStorage Adminの権限をhuong_le@xxxxxx-s.co.jpメンバーへ提供しました。
このRolesでいくつことができますか。Rolesページで確認できます。
Filter tableのところにStorage Adminを入力します。
Storage Adminを選らんでStorage Adminが提供する権限が表します。
カスタム IAM 役割を定義します
以上の続きですが、huong_le@xxxxxx-s.co.jpメンバーにバケットの削除権限を提供したい場合、カスタムIAMを作成しないとね~
Roles/Storage Adminページ上にあるCreate From Roleボタンを選択します。
カスタムしましょ
―Title:Custom Storage Admin
―Descipttion:Created on: 2020-03-19 Based on: Storage Admin
―ID:CustomStorageAdmin
―Role launch stage: Alpha
―storage.buckets.deleteコレクションのチェックを外します
又は、このメンバーにCloud SQL Viewer権限を提供したい場合、
Add permissionsボタンを選択してCloud SQL Viewerののコレクションを選択します。
Custom Storage Admin Roleが作成されました。
このRoleをhuong_le@xxxxxx-s.co.jpメンバーに提供します。
IAMページへ戻って先ほど作成したPolicyを編集します
では、huong_le@xxxxxx-s.co.jpメンバーがバッケトを削除してみよう~
出来ないでしょね!
そして、SQLの状況が見えますか
見えますよね~
五つメンバータイプにはサービスアカウントは他のメンバーとは違います。。。
サービスアカウントって何だろう?
サービス アカウントを管理します
Cloud IAMのサービスアカウントページにサービスアカウントを管理します。
サービス アカウントは、ユーザーではなく、アプリケーションや仮想マシン(VM)インスタンスで使用される特別なアカウントです。
アプリケーションからGCP上のリソースにアクセスする際はサービスアカウントによる認証処理が必要となります。
サービスアカウントを使用して、承認された API 呼び出しを行います。
GCPプロジェクト作成する時、Compute EngineサービスアカウントとApp Engineサービスアカウントが自動的に作成されます。
GCE、GKEおよびGAEのそれぞれの環境で稼働するアプリケーションから各類リソースへアクセスができます。
その他の環境で稼働するアプリケーションならば専用のサービスアカウントを追加しないといけない。(最大100個です)
実際にサービスアカウントを作成してみよう~
制限された特権によってサービスアカウントを管理します
Create service accountボタンを選択しサービスアカウントを作成します。
Service account ID:dsk-le
Service account description: Create at 2020/03/19 18:18
ここまでは、dsk-le@ace-le-202004.iam.gserviceaccount.comアカウントが作成されました。
次はこのサービスアカウントによる役割を設定します。
Role:Cloud sql admin
サービスアカウントをアクセスできるメンバーを設定します。
Service account users role:[Google account email]
サービスアカウントキーを作成します
##サービスアカウントをVMインスタンスに割り当ています
以前に言いました、
"GCPプロジェクト作成する時、Compute EngineサービスアカウントとApp Engineサービスアカウントが自動的に作成されます。"
ということは、VMを作成すればCompute EngineサービスアカウントはDefaultが設定されます。
Compute Engineページを開いてVMを作成してましょ
Service accountはdefaultで設定します
VMをCreateするボタンをクリックして以下の情報を設定します。
Name | vm-custom-service |
---|---|
Region | us-central1 |
Zone | us-centra1-c |
Machine type | f1-micro |
Service account | 設定なし |
【Create】ボタンをクリックして vm-custom-service が作成されます。
このVMをクリックしてService accountのところにDefaultアクセス権限を確認します。
デフォルトサービスアカウント: 576862306389-compute@developer.gserviceaccount.com
Storage*(Read only)*は例としてアクセスしてみます。
ストレージのリソースを準備しておきます。
BUCKET_NAME: Storageのバケット作成はここを参考
OBJECT_NAME: バケットのオブジェクト作成はここに参考
例、
BUCKET_NAME: bucket-from-editer-ace-le-202004
OBJECT_NAME: sample1.txt
VMのterminalを起動する為、SSHをクリックします。
次のコメントを実行します
gsutil rm gs://[BUCKET_NAME]/[OBJECT_NAME]
しかし、次のコメントを実行します
gsutil ls gs://bucket-from-editer-ace-le-202004
バケットのオブジェクトを削除できませんが、観覧できます。なぜならストレージのアクセスはRead only権限です。
Service accountはカスタムサービスアカウントで設定します
以前に作成したVMはサービスアカウントをデフォルトからカスタムサービスアカウントへ変更します。
順番は、変更する為一旦VMを中止します。VMを修正ボタンクリックして修正した後に再起動します。
VMを中止
サービスアカウント変更
以前に作成したdsk-leサービスアカウントを選びます。
VMを再起動してSHHを開きます。以前の実行したコメントはもう一度実行します。
gsutil rm gs://[BUCKET_NAME]/[OBJECT_NAME]
何故ならbucket-from-editer-ace-le-202004バケットはdsk-le@ace-le-202004.iam.gserviceaccount.comメンバーにアクセス権限を提供することが忘れました
ストレージへアクセスできると確認します。
gsutil ls gs://[BUCKET_NAME]/[OBJECT_NAME]
アクセスできましたよね。次のカスタム権限を確認します
gsutil rm gs://[BUCKET_NAME]/[OBJECT_NAME]
結果は、sample1.txtファイルが削除されました。
サービスアカウントを使ってユーザーアカウントに権限を提供したくても開発するときサービスアカウントキーの情報を設定すれば提供するリソースへアクセスできるという得点です。
別のプロジェクトのサービスアカウントにアクセス権を付与します
Google Cloud Platform Console 内で、プロジェクトリストからプロジェクトAを選択します。
プロジェクトB: dataproc
[メンバー] ボックスに、プロジェクトAの「サービス アカウントのメールアドレス」を入力します。
[役割] プルダウンを展開し、[Storage Admin] を選択します。
プロジェクトA: ACE-le-202004
ということはProjectAに作成したサービスアカウントはProjectBで利用できます。
お疲れ様です
IAMの仕事はちょっとでも分かりましたか^・〜
サービスアカウントキー(JSONファイルなど)の利用方法を説明するつもりがありましたが記事が長かったので別の記事にすると思いますので待ってね〜
また、プロジェクトとマネージドサービスの監査ログも大切だと思いますから、参考してね。
最後まで読んで頂きまして有難うございます( ´ ▽ ` )b