GCP (IAM)
GCP のリソースに対する権限を管理する。 Cloud IAM は追加料金なしで利用できる。
IAM では 3 つの設定をする。
- 誰が
- どのリソースに対して
- 何ができるか
組織内の各ユーザが、業務に必要な最小限の権限だけを持つように設定することが大事。
メンバ
誰がに設定できるものは次のものがある。
- Google アカウント または Cloud Identity ユーザ
- Google グループ
- G Suite ドメイン または Cloud Identity
- サービスアカウント: アプリに属するアカウント
他に特殊な設定値として次のものがある。
- allAuthenticatedUsers: Google アカウントまたはサービスアカウントで認証されたユーザ全員
- allUsers: ネット上の全員
役割
Primitive(基本の役割)
基本の役割では、プロジェクト内の全リソースに対する権限を設定できる。
- Viewer(閲覧者) リソースの表示ができるが、リソースの状態を変更することはできない。
- Editor(編集者) Viewer の権限に加えて、リソースの状態を変更できる。
- Owner(オーナー) Editor の権限に加えて、リソースに対する役割と権限を管理でき、課金の設定もできる。
課金管理アカウントを作る場合は、リソースの変更権限を持たず、課金設定可能なアカウントとして作成するとよい。
Pre defined roles(事前定義された役割)
特定のリソースに対してできる操作の権限を設定できる。 例えば、次のような役割を設定できる
ある G Suites チームは、projectA のすべての Compute Engine の管理権限をもつ
Custom roles(カスタムの役割)
カスタムの役割は、組織レベル、プロジェクトレベルでのみ使用できる。 フォルダレベルでは使用できない。
より細かい権限管理ができるが、権限を管理するコストが生まれるため、カスタムの役割は使うかどうかをよく考えること。
サービスアカウント
ユーザではなく、特定の Compute Engine に権限を与えたい場合などに利用する。 例えば、アプリが Cloud Storage にデータを保存する場合に、インターネット上のユーザからはデータを読み取れないようにし、データにアクセスできるのはアプリからのみとしたい場合など。
サービスアカウントのアカウント名、パスワードは次のようになる。
- アカウント名 = メールアドレス
- パスワード = 暗号鍵
IAM ポリシー
Cloud IAM は「Cloud IAM ポリシー」を作成してユーザに役割を付与できる。 ポリシーは、組織レベル、プロジェクトレベル、リソースレベルで設定できる。 上の階層で設定したポリシーは、下の階層に引き継ぐ。
下位のポリシーが優先されるため、例えば次の場合、該当ユーザはバケットの書き込み権限を得るようになる。
- 組織ポリシーでバケットの読み取りのみを許可
- プロジェクトポリシーでバケットの読み書きを許可
組織
- プロジェクトA
Compute Engine
App Engine
...
- プロジェクトB
Cloud Pub/Sub
Cloud Storage
...
...
IAM 管理
権限付与には次の方法がある。
- GCP の GUI
- Google IAM API を使用したアプリ
- gcloud(CLI)
また、フォルダを作り複数のプロジェクトをまとめることもできる。
組織
- フォルダA
- プロジェクトA
- プロジェクトB
- フォルダB
- プロジェクトC
- プロジェクトD
フォルダを作る場合は組織が必須で、組織を作るためには G Suite Domain が必要。 G Suite Domain がある場合は自動的に組織が作られる。 G Suite Domain がない場合は Google Cloud ID を使うと組織が作成できる。
::: info 組織を作ったあとは、まず次をやっておくのがおすすめ。
- プロジェクトや課金アカウントを作成できる人を限定する :::
gcloud で IAM 管理
ロールの表示:
gcloud projects get-iam-policy <PROJECT_ID>
# ユーザに対するRoleのみ表示
gcloud projects get-iam-policy <PROJECT_ID> \
--flatten="bindings[].members" \
--filter="bindings.members:user:" \
--format='table(bindings.members,bindings.role)'
ロールの付与:
gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member user:<USER_NAME> \
--role <ROLE>
# ex: 特定のユーザに閲覧権限を付与
gcloud projects add-iam-policy-binding my-project \
--member user:test-user@gmail.com \
--role roles/viewer
# ex: 特定のサービスアカウントにPub/Subのパブリッシュ権限を付与
gcloud projects add-iam-policy-binding my-project \
--member serviceAccount:test-user@my-project.iam.gserviceaccount.com \
--role roles/pubsub.publisher
USER_NAME
は gmail アドレスなどを、ROLE
はロールの名前(roles/viewer
など)を指定する。
指定できるロールの一覧はココを参照: https://cloud.google.com/iam/docs/understanding-roles
ロールの削除:
gcloud projects remove-iam-policy-binding <PROJECT_ID> \
--member user:<USER_NAME> \
--role <ROLE>
# ex
gcloud projects remove-iam-policy-binding my-project \
--member user:test-user@gmail.com \
--role roles/viewer
add-iam-policy-binding
がremove-iam-policy-binding
に変わっただけ。
サービスアカウントの作成
gcloud beta iam service-accounts create [SA-NAME] \
--description "[SA-DESCRIPTION]" \
--display-name "[SA-DISPLAY-NAME]"
サービスアカウントの鍵を作成する
gcloud iam service-accounts keys create ~/key.json \
--iam-account [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
Ref: https://cloud.google.com/iam/docs/creating-managing-service-account-keys?hl=ja