【Google Cloudのお勉強】03.Google Cloud の IAMについて
はじめに・・
前回はGoogle Cloudの基本的なリソース概念・ユーザー管理・課金管理を勉強しましたが、今回は権限管理を司るIAMについて学びましたので、まとめとなります。
Google Cloud の IAM とは
Google Cloud の Identity and Access Management =(IAM)
リソースへのアクセス権を細かく設定することができる。
公式ドキュメントより
IAM の3つの構成要素
以下3つある。
- 誰が(主体・プリンシパル)
- 何に(リソース)
- どうするか(アクション・IAMロール)
誰が(主体・プリンシパル)
- Google アカウント
- サービスアカウント
- Google グループ
- Google Workspaceアカウント
- Cloud Identityドメイン
- 認証済のすべてのユーザー
- すべてのユーザー
上記のプリンシパルを指定して認可を定める、
何に(リソース)
- 組織
- フォルダ
- プロジェクト
- サービス
- サービスで作成したリソース
前回学習したGoogle Cloudのリソース階層に対してそれぞれ設定が可能。上位階層に設定すると、その権限は下位にまで継承される。
どうするか(アクション・IAMロール)
- 基本ロール
- オーナー
- 編集者
- 閲覧者
- 課金管理者
- 事前定義ロール
- カスタム定義ロール
上記それぞれのロールがあるが、詳細は以下の内容となります。
基本ロールとは
IAMが出る前に実装されていた、今は利用は推奨されていない。
- オーナー(メンバーの招待や削除、プロジェクト削除等)
- 編集者(アプリケーションのデプロイ等)
- 閲覧者(読み取り専用)
- 課金管理者(課金の管理など)
事前定義ロールとは
- 基本ロールより詳細な設定が出来る
- あらかじめ権限設定がセットでまとまっている
- インスタンスの起動を許可、削除は拒否など
- 数が多くて識別しづらい
カスタム定義ロールとは
- 定義ロールを更に細かく自作設定する感じなのがカスタム定義ロール
- 様々な権限を細かく指定が出来る。
Binding
Google Cloudの各リソースに紐づく IAM Policyの中にロールやメンバーなどの権限設定が各bindingとして設定されていく。
AWSとの違い
AWSの権限設定と概念が少し違う。
AWSだとプリンシパルに対して各種権限設定を割り当てるイメージだが、Google Cloudだとリソースに対して付与設定するイメージ。(もちろん用語も違う)
ところでサービスアカウントって何?
プリンシパルの一覧でサービスアカウントが出てきたがこれは何?
- Google アカウント
- サービスアカウント
- Google グループ
- Google Workspaceアカウント
- Cloud Identityドメイン
- 認証済のすべてのユーザー
- すべてのユーザー
サービスアカウントとは・・
サービス アカウントは、ユーザーではなく、Compute Engine 仮想マシン(VM)インスタンスなどのアプリケーションやコンピューティング ワークロードで使用される特別なアカウントです。
\\特別なアカウント//
サービスアカウントは独自のメールアドレス形式で識別をしている。
公式ドキュメントより
やってみた!
Google Cloudでインスタンス作るとすぐにSSH出来るのなぜ?
私もAWS脳なので疑問に思った。
サービスアカウントについて検証
プロジェクト作成直後のIAM状況ってプリンシパルは一つのみ。
GCEでインスタンスを作る前にAPIの有効化を求められるので有効化してみる。
するとAPI有効化直後のIAMを確認すると、なんか増えてる!
とりあえずGCEでインスタンス作成し、ブラウザでSSH接続すると繋がります。
サービスアカウントを削除してみる
ではこの状態でIAMからサービスアカウント関係を削除してみた!
完全にサービスアカウントを消してみる。
インスタンスに繋がらなくなった
その後に再度GCEインスタンスにブラウザでSSH接続すると繋がらなくなりました\(^o^)/
トラブルシューティングも永遠に終わらない\(^o^)/
インスタンスを作ろうとしてもエラーになりました\(^o^)/
結論、サービスアカウントがあるから繋がる
権限関係の処理はサービスアカウントで行っていたから、SSH接続できたんだと思われる。
ブラウザ経由でのSSHなのでネットワーク経路的には繋がるだろうが、権限的にはNGという状況なんだろうな。。
まとめ
今回の学習まとめ
- IAMではリソースへのアクセス権限を設定する
- IAMはいくつかの構成要素がある
- プリンシパル- リソース
- アクセス
- サービスアカウントは特別なアカウント
Twitter Liveでのアウトプット内容
Discussion