5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Cloudのサービスアカウントってなんやねん

5
Posted at

こんにちは、ふくちです。
タイトルの通り、良くわからんので調べてみます。

サービスアカウント≒AWSのIAMサービスロール

結論、普段AWSを使っている身からすると、多分こんな感じの認識でOKです。図にするとこんな感じ。
image.png

…なんかCloud RunとIAMロールの間に挟まってるやつがいますね。こいつがサービスアカウントです。公式ドキュメントの説明によると↓こうです。

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

アプリケーションをサービス アカウントとして認証する最も一般的な方法は、アプリケーションを実行しているリソースにサービス アカウントを関連付けることです。たとえば、サービス アカウントを Compute Engine インスタンスに関連付けると、そのインスタンスで実行されているアプリケーションがサービス アカウントとして認証されるようにできます。その後、サービス アカウントに IAM ロールを付与すると、サービス アカウントは(さらにはインスタンス上の)アプリケーションが Google Cloud リソースにアクセスできるようになります。

ここの説明でサービスアカウントに加えてIAMロールというのも出てきます。サービスアカウントがAWSのIAMロール相当じゃないんかい。わけがわからんのでもう少し調べてみます。

調べてみると、サービスアカウントはプリンシパルでありリソースでもあるという記述が出てきます。

サービス アカウントはプリンシパルです。これにより、サービス アカウントに Google Cloud リソースへのアクセス権を付与できます。

ただし、サービス アカウントはリソースでもあります。つまり、サービス アカウントにアクセスする権限を他のプリンシパルに付与できます。

おまえは何を言っているんだ
image.png

まぁ1つずつ整理しましょう。

プリンシパル

まずプリンシパルは実行の主体です。AWSでもあった気がしてきますね。つまりその権限をもらって何かをする側。

例えばCloud RunからCloud Storageバケット内のオブジェクトの閲覧を許可する場合は、Cloud Runに紐づけたサービスアカウントに対してオブジェクト閲覧者のロール(roles/storage.objectViewer)を付与するような形。

なるほどつまり、AWSではリソースに直接IAMロール付与していますが、Google Cloudではサービスアカウントを挟まないといけないんですね。

image.png

で、どうやらIAMロールもAWSのIAMロールとは異なるらしいです。
Google CloudにおいてはIAMロールが既に権限を束ねているようで、どちらかというとAWSのマネージドポリシーに近そうです。

例えばこのCloud Run編集者というロールを確認してみます。
image.png

すると事前に89個の権限が付与されていることがわかります。
image.png

こんな感じで、ロールには直接権限が束ねられて設定されているようです。
なので、サービスアカウントが実質AWSのIAMロールであり、Google CloudのIAMロールは実質AWSのIAMポリシーという関係性のようです。

リソース

そしてリソースはプリンシパルから何かしらアクセスされる側のもの。先程の例で言えばCloud Storage側。プリンシパル(Cloud Run)に紐づくサービスアカウントにおいて、リソース(Cloud Storage)を、ターゲットに指定できるということ。

これと同じことがサービスアカウントでも起こります。つまり、このサービスアカウントを誰が使ってよいか、ということも定義できるということ。

roles/iam.serviceAccountUserを使えば、そのサービスアカウントをCloud Runなどに紐づけることができるようになります。
また、roles/iam.serviceAccountTokenCreatorを使えば、一時的にそのサービスアカウントの権限を借りることができるようになります。

まぁAWSでもIAMロールを別のリソースに紐づけたり、Assume Roleできたりしますもんね。それと同じイメージでしょうか。

サービスアカウントをコンソールで触ってみるぜ

Cloud Runだとこんな感じでサービスアカウントを設定できるらしいです。形式は<サービスアカウントID>@<プロジェクト情報>.iam.gserviceaccount.comみたいな形になるっぽいです。

image.png

サービスアカウント作成画面はこんな感じ。
image.png

で、このサービスアカウントに付与できるロールを指定します。自作したロール・マネージドロールどちらも設定できます。これがプリンシパルとして使う際の設定です。
image.png

もしくは、サービスアカウントユーザーロールとサービスアカウント管理者ロールというのを設定できます。これがリソースとして使う際の設定です。
image.png

厳密にはユーザーロールのところで、このサービスアカウントを誰に渡すか、を設定しています。これで指定されたユーザーが、このサービスアカウントをCloud Runなどに紐づけて良い、とされるようです。

また、管理者ロールのところで、このサービスアカウント自体を編集・無効化など管理して良いのは誰か、を設定しています。

まとめ

Google Cloudっていちいち書くのめんどいのでGCPに戻してほしい。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?