📹

【Google Cloudのお勉強】03.Google Cloud の IAMについて

2023/01/27に公開

はじめに・・

前回は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として設定されていく。


G-gen Blogより

AWSとの違い

AWSの権限設定と概念が少し違う。

AWSだとプリンシパルに対して各種権限設定を割り当てるイメージだが、Google Cloudだとリソースに対して付与設定するイメージ。(もちろん用語も違う)


G-gen Blogより

ところでサービスアカウントって何?

プリンシパルの一覧でサービスアカウントが出てきたがこれは何?

  • Google アカウント
  • サービスアカウント
  • Google グループ
  • Google Workspaceアカウント
  • Cloud Identityドメイン
  • 認証済のすべてのユーザー
  • すべてのユーザー

サービスアカウントとは・・

サービス アカウントは、ユーザーではなく、Compute Engine 仮想マシン(VM)インスタンスなどのアプリケーションやコンピューティング ワークロードで使用される特別なアカウントです。

\\特別なアカウント//

サービスアカウントは独自のメールアドレス形式で識別をしている。

公式ドキュメントより

やってみた!

Google Cloudでインスタンス作るとすぐにSSH出来るのなぜ?

https://twitter.com/ymd65536/status/1614233597174775809

私もAWS脳なので疑問に思った。

サービスアカウントについて検証

プロジェクト作成直後のIAM状況ってプリンシパルは一つのみ。

GCEでインスタンスを作る前にAPIの有効化を求められるので有効化してみる。

するとAPI有効化直後のIAMを確認すると、なんか増えてる!

とりあえずGCEでインスタンス作成し、ブラウザでSSH接続すると繋がります。

サービスアカウントを削除してみる

ではこの状態でIAMからサービスアカウント関係を削除してみた!

完全にサービスアカウントを消してみる。

インスタンスに繋がらなくなった

その後に再度GCEインスタンスにブラウザでSSH接続すると繋がらなくなりました\(^o^)/

トラブルシューティングも永遠に終わらない\(^o^)/

インスタンスを作ろうとしてもエラーになりました\(^o^)/

結論、サービスアカウントがあるから繋がる

権限関係の処理はサービスアカウントで行っていたから、SSH接続できたんだと思われる。

ブラウザ経由でのSSHなのでネットワーク経路的には繋がるだろうが、権限的にはNGという状況なんだろうな。。

まとめ

今回の学習まとめ

  • IAMではリソースへのアクセス権限を設定する
  • IAMはいくつかの構成要素がある
    - プリンシパル
    • リソース
    • アクセス
  • サービスアカウントは特別なアカウント

Twitter Liveでのアウトプット内容

https://twitter.com/maijun2/status/1618916272598814722

Discussion