Google CloudのIAMについて、IAMの基礎的な考え方からGoogle Cloudの固有の概念を含めて、初学者にも分かるように解説をします!
解読してみよう!
以下、アプリ開発者がIAM管理者に依頼をする文章の例です!
testプロジェクトのインスタンスからCloud Storageにファイルをアップロードできるようにしたいので、私が入っているIAMグループにインスタンスとCloudStorageを編集するためのIAMロールを付与し、念のためインスタンスに割り当てられているサービスアカウントの権限も確認してください。
この記事を読むと解読できるようになります。何を言っているか分からない方はぜひ最後まで読んでみてください!
IAMとは?
IAMとは、Identity and Access Managementの略称で、IDやCloudへのアクセス権限を管理することができるサービスのことです。
Cloudはボタン1つで様々なことが出来てしまうので、権限を管理することがとても重要になります。本番環境をぶっ壊すこともできてしまいますし、認証情報が流出した場合に高額の請求が来る、、なんてこともあります。IAMを学ぶことで、様々なリスクを回避しましょう。
IAMでは「誰が」どの「リソース」に対して「何をするか」を管理することが出来ます。
Google Cloud IAMの登場人物
Google Cloudには主に以下の6つの登場人物が存在します。
リソース、プロジェクト、フォルダ、組織
リソースとは、Compute EnginやCloud RunなどのGoogle Cloudの製品のことです。
IAMから少しそれますが、Google Cloudを理解するうえでの必須の概念を説明します。
Google Cloudのリソースは以下の図のように階層構造で管理をされています。
Google Cloudのリソースは階層構造になっており、ポリシーは上位層から下位層に向けて継承していきます。
リソースとは
Compute EngineやCloud RunなどのGoogle Cloud製品のことを指します。上記の図では最下層に位置します。
プロジェクトとは
リソースを管理する単位のことです。Google Cloudのリソースはプロジェクトの配下に所属することになります。
Google Cloudはプロジェクト単位でリソースの使用量と課金量を把握することが出来るため、個人的にはとても分かりやすいかなと思います。
CUIで操作する場合はプロジェクトIDを使用してリソースを扱うことが多く、自分がどのプロジェクトのリソースを使用しているか理解することがとても重要になります。誤ったプロジェクトに対して操作しないように気を付けましょう。
フォルダとは
プロジェクトをフォルダという単位で管理することが出来ます。個人利用の場合は作らなくてもよい場合もあります。
組織とは
組織でGoogle Cloudリソースを管理する場合のルートノードになります。組織管理者は強い権限を持ち、下位層に権限を委譲していきます。フォルダと同様に、個人利用の場合は作らなくてもよい場合もあります。
ポリシーの継承とは?
上司層に付与されたポリシーは下位層のリソースに継承されます。継承された権限は編集することが出来ません。
以下の画像を例として説明します。組織に所属しているkizuki@gmail.comというユーザーはオーナー権限を持っています。組織の下位層となるフォルダを作成した場合、フォルダにも同様の権限を持つkizuki@gmail.comというユーザーが作成されます。フォルダの階層であるプロジェクトを作成した場合も、同様の権限をもつユーザーが作成されます。
IAMの基礎知識
IAMの基礎知識である、IAMユーザー、IAMポリシー、IAMロールについて説明します。
IAMユーザー
Cloudサービスの使用を許可されたユーザーアカウントのことです。
IAM ユーザーは、Google Cloud Console、CloudSDKなどのコマンドラインツールなどを通してCloudサービスにアクセスすることができます。
IAMポリシー
Cloud リソースへのアクセスを制御するためのルール(権限)のことです。
IAMポリシーを付与することで「誰が」どの「リソース」に対して、「何をできるようするか」を決めることができます。つまり、IAM ポリシーを付与することで、IAMユーザーに対して、Cloudリソースへのアクセスを制御することが出来ます。
例として、AさんのIAMユーザーアカウントにDBにアクセスできるようなIAMポリシーを割り当てることで、AさんのユーザーアカウントからDBにアクセスすることができるようになります。
IAMロール
IAMポリシーのまとまりのことです。
ポリシーを一つずつ割り当てていくのは手間がかかります。上記に記載した、IAMポリシーの例では複数のIAMポリシーを割り当てなければなりません。
IAM ロールには、特定のアクションを実行するために必要な権限がまとめられており、IAMユーザーにIAMロールを割り当てることによって、必要な権限をまとめてつけられるようになります。また、ロールは強い権限が優先されます。
(例)AさんがCloud Storegaにバケットを作成したい場合に、AさんのIAMユーザーアカウントに「roles/storage.bucketAdmin」のIAMロールを割り当てることで、Aさんがバケットを作成できるようになる。
IAMユーザー、IAMポリシー、IAMロールの関係性まとめ
IAMユーザー、IAMポリシー、IAMロールの関係性を図にまとめました。
IAMユーザーに、IAMポリシーのまとまりであるIAMロールを割り当てることで権限を管理していきます。
Google Cloudは5種類のプリンシパルにロールを付与していく!
プリンシパルとは、Google Cloud リソースにアクセスする権限を持つ、ユーザー、グループ、サービスアカウントのことを指します。主に以下5種類のプリンシパルが存在します。
【プリンシパル①】Googleアカウント
皆さんご存じ、GoogleのWebサービスにアクセスするユーザーアカウント(g-mailアカウント)のことです。Google CloudはGoogleアカウントで使用することが出来るため、新規にアカウントを作成する手間がありません。
【プリンシパル②】サービスアカウント
Google Cloud特有の概念として、サービスアカウントというものがあります。
サービスアカウントとは、人間だけでなく、システムも使用することが出来るアカウントのことです。サービスアカウントは、Google Cloudのリソースにアクセスするために必要になります。「人間に付与する」だけではなく、「システムに付与するアカウントである」というのが理解が難しいところだと思います。
リソースにサービスアカウントを割り当てることで他のリソースを閲覧したり、操作することが出来るようになります。
例として、以下の図のように、作成したVMインスタンス(Compute Engine)にDBにアクセスする権限を持つサービスアカウントを付与することで、VMインスタンスからDBにアクセスすることができるようになります。
【プリンシパル③】Googleグループ
権限が付与されるユーザーのまとまりのこと。
アカウントをグループでまとめることで、グループに所属している全員に同様の権限を割り当てることが出来ます。
Google Cloudでは、アカウント毎に権限を管理するのではなく、グループを使用することが推奨されています。
【プリンシパル④】Google Workspace アカウント
@example.comなどの通常のドメインをGoogleアカウントとして使用することが出来る、Google Workspaceというサービスがあります。Google Workspaceで作成したドメイン単位で権限を割り当てることが出来ます。
【プリンシパル⑤】Cloud Identity ドメイン
Cloud Identityで作成したドメインに権限を割り当てることができます。
Google Cloudでは3種類のIAMロールがある
Google Cloudでは3種類のIAMロールがあります。
- 基本ロール
- 事前定義ロール
- カスタムロール
こちらの3種類のIAMロールについて説明をしていきます。
基本ロール
プロジェクト内のすべてのGoogle Cloudサービスに適用することが出来るロールです。オーナー、編集者、閲覧者、課金管理者の4種類があります。基本ロールは権限が強すぎるため、本番環境などでは使用しないほうが良いです。
事前定義ロール
既にGoogle Cloudで定義されており、プロジェクト内の特定のGoogle Cloudサービスに適用することが出来るロールです。特定のサービスに対してきめ細やかな権限を割り当てることが出来ます。基本的には事前定義ロールを使うことが推奨されています。
カスタムロール
カスタムロールとして、必要な権限を自分で選び、独自のロールを作ることが出来ます。自分でメンテナンスをしていかなければならないため、運用コストがかかります。また、ロールを作成した方がいなくなった場合に「このロールなんだっけ、、?」ということにもなる可能性があります。
まとめ
本記事を読むことで以下が解読できるようになったのではないでしょうか??
testプロジェクトのインスタンスからCloud Storageにファイルをアップロードできるようにしたいので、私が入っているIAMグループにインスタンスとCloudStorageを編集するためのIAMロールを付与し、念のためインスタンスに割り当てられているサービスアカウントの権限も確認してください。
Google Cloud特有の概念さえ理解してしまえば、Google CloudのIAMについて理解するのは難しくないです。冒頭でも記載したように、IAMを管理することがリスクを事前に防ぐことにつながります。安全なCloudライフをエンジョイするためにも、必ずIAMについて理解しておきましょう!