はじめのGCP⑱Google Cloudのユーザーアカウント棚卸し方法についてアセットインベントリを使って説明します!

GCP18キャッチ クラウド

今回は、Google Cloudで使用するユーザーアカウントの棚卸し方法について説明します。

現在、私の参画しているプロジェクトで、Google Cloudで使用しているユーザーの棚卸し方法に関する運用を提案しています。その中で調査した内容について、アウトプットします。

今後、私と同じように、Google Cloudで使用するユーザーアカウントの棚卸し方法を決める方を対象に、私が調査した内容について、実際の操作手順含めて説明します。

是非、最後までご覧いただけると嬉しいです。

Google Cloudで使用するユーザーアカウントについて

Google Cloudで使用できるユーザーアカウントは、以前のブログでも説明した通り、プリンシパルと呼びます。プリンシパルは、下記ブログのように限定されています。

注意してほしいのは、Google Cloudでユーザーアカウントを発行することはできない点です。Google Cloudというのは、旧名Google Cloud Platformのことを言います。(Google Cloudサービスはサービスの総称、Google Cloudは旧名Google Cloud Platform(GCP)で単体のサービス)

要は、下記のGoogle CloudのIAMのページでは、アカウントを新規発行するわけではなく、プリンシパルで記載しているものを、Google Cloudに取り込む形になります。

IAM

よって、プリンシパルにないアカウントに対し、上記画面の「アクセス権を付与」でアカウントに対してロールを割り当てようとすると下記画面のようにエラーメッセージが表示されてアカウントを取り込むことができません。

プリンシパルを発行する為には、既にあるメールアドレスをGoogleアカウントとして登録するか、Cloud IdentityやGoogle Workspace等が必要になります。

何がここで言いたいかというと、Google Cloud(旧名:Google Cloud Platform)で、プリンシパルを新規発行することはできないという点です。

今回の棚卸しは、あくまで、Google Cloudで使用しているユーザーアカウントの棚卸しをすることを対象にしています。

これは、実際に顧客に説明した時に、質問されたことで、AWSだと、ルートアカウントでコンソールにログインし、IAM ユーザを発行できます。Google Cloudは、コンソールでGoogleアカウントを新規発行はできません。

下記が、AWSとGoogle CloudのIAMの相違点をまとめたものになります。

Cloud Asset Inventoryの概要

次に、実際にユーザーアカウント(プリンシパル)の棚卸し方法で使用するツールの話です。Cloud Asset Inventoryを使用することで、ユーザーアカウント(プリンシパル)の棚卸しを行うことができます。今後、ユーザーアカウント(プリンシパル)は、ユーザーアカウントと表記します。

Cloud Asset Inventoryには、下記特徴があります。

  • 5週間分のアセットメタ情報の履歴が保管されている
  • 特定期間のアセットメタ情報をエクスポートできる
  • IAMポリシーを分析して、誰が何にアクセスできるかを調べることができる

上記で記載されている通り、Cloud Asset Inventoryは「IAMポリシーを分析して、誰が何にアクセスできるかを調べることができる」という機能があり、ユーザーアカウントの棚卸し時に、この機能を使用します。

ちなみに、アセットとは、Google Cloud のリソースまたはポリシーのことです。リソースとポリシーについても、上記の参考記事に記載していますので、そちらをご参照ください。

アセット インベントリの操作手順

それでは、実際にアセット インベントリの操作手順について説明します。今回の対象は、ユーザーアカウントの棚卸し方法なので、Google Cloudで使用してIAMポリシーをエクスポートして、それをGoogleドキュメントのスプレッドシートを使用して一覧表示する方法について説明します。

1.アセット インベントリを開く

組織又はプロジェクトが選択されている状態で、Google Cloudのダッシュボード左上にある、メニューアイコンを選択し、「IAMと管理→アセント インベントリ」を選択します。

アセットインベントリー

2.IAMポリシーを選択

画面上部の「IAMポリシー」を選択します。なお、IAMポリシーを開くためには「cloudasset.assets.searchAllIamPolicies」の権限が必要です。

IAMポリシー

※上記画像は、一部情報を非表示にしています。

3.CSV 形式でダウンロードを実行

CSV 形式でダウンロードを実行します。WebブラウザのダウンロードフォルダにIAMポリシーのファイルが保存されます。

ダウンロードフォルダ

4.Googleスプレッドシートで開く

ダウンロードした、IAMポリシーのCSVファイルを開きます。VS Codeで開いてもよいですが、みづらいので、私は、Google スプレッドシートを使用して開いています。ちなみに、Microsoft Excelを使用すると、2バイト文字(和文)が文字化けします。スプレッドシートで開いた場合、文字化けしません。

ダウンロードしたCSV形式のファイルをGoogleドライブの任意の場所に保存します。

Googleドライブ

CSVファイルをダブルクリックすると、画面上部に「アプリで開く」のメニューが表示されるので、「Google スプレッドシート」を選択します。

※一部情報を隠しています

CSV形式のファイルが、Google スプレッドシート形式に変換されファイルが開きます。なお、下記画像は、一部情報を隠しています。

Google スプレッドシートで開く

CSV形式のIAMポリシーの項目について

CSV形式でダウンロードされたIAMポリシーの項目は、下記6つになります。

  • リソース:詳細なリソース情報
  • リソースの種類:リソースの種類
  • プロジェクトID:プロジェクトID
  • フォルダ:プロジェクトがフォルダに包含されている場合、そのフォルダ名
  • 組織:組織ID
  • ポリシー:ポリシー詳細

ユーザーアカウントの棚卸しで使用するのは、ポリシーの部分です。

ユーザーアカウントの洗い出し

実際のユーザーアカウントの洗い出しは、上記「ポリシー」の部分を分解して使用します。業務では、ポリシーを分解するスクリプトを使用して洗い出しを行っていますが、初期は、手作業で行っていました。今回は、手作業で行います。

例えばCSV形式の一番最初のレコードのポリシー部分は以下になります。一部情報を変更しています。

{version:0,bindings:[{role:roles/iam.serviceAccountAdmin,members:[user:root@hajimenoit.com],condition:null},{role:roles/iam.serviceAccountUser,members:[user:root@hajimenoit.com],condition:null}],auditConfigs:[],etag:}

このポリシーの見方は、一つずつ分解します。ポリシーの一番最初にある

{version:0,bindings:

は、すべてのポリシーに記載されているので無視します。また、最後にある、

auditConfigs:[],etag:}

も、今回は無視します。最初に記載されている、

{role:roles/iam.serviceAccountAdmin,members:[user:root@hajimenoit.com],condition:null}

roleに記載されている「roles/iam.serviceAccountAdmin」は、「サービス アカウント管理者」ロールになります。

membersに記載されている「user:root@hajimenoit.com」は、「サービス アカウント管理者」ロールが付与されていることを表しています。

最後に記載されている「condition:null」は、「IAM Conditions」に値が設定されていないことを表しています。

以上のことから、最初の意味は、「サービスアカウント管理者ロールが付与されているユーザは、root@hajimenoit.comユーザーになる」ことを表しています。

次の行で記載されている、

{role:roles/iam.serviceAccountUser,members:[user:root@hajimenoit.com],condition:null}

roleに記載されている「roles/iam.serviceAccountUser」は、「サービス アカウント ユーザー」ロールになります。

membersに記載されている「user:root@hajimenoit.com」は、「サービス アカウント ユーザー」ロールが付与されていることを表しています。

最後に記載されている「condition:null」は、「IAM Conditions」に値が設定されていないことを表しています。

以上のことから、「サービス アカウント ユーザーが付与されているユーザは、root@hajimenoit.comユーザーになる」ことを表しています。

上記と、その他のリソース等の情報をまとめて記載すると下記の通りとなります。

  • 組織ID:6xxxxxxxxxxx(私のドメインの組織ID)
  • プロジェクトID:animated-guard-xxxxxx
  • リソースの種類:サービスアカウント
  • ポリシー①:サービスアカウント管理者ロールが付与されているユーザは、root@hajimenoit.comユーザー
    ポリシー②:サービス アカウント ユーザーが付与されているユーザは、root@hajimenoit.comユーザー

上記内容となります。ユーザーアカウントの棚卸しとしては、

プロジェクトIDユーザーアカウントリソースロール
animated-guard-xxxxxxroot@hajimenoit.comサービスアカウント・サービスアカウント管理者
・サービス アカウント ユーザー
報告形式(例)

上記のような形となります。後は、棚卸しのルールに従って、例えば、ユーザーアカウントの使用者がすでに退職している場合等は、ポリシー等に記載されている対応をとります。一般的には、他のユーザーにロールを移行するやアカウントを削除するなどです。

このように、アセット インベントリのIAMポリシーを使用することで、Google Cloudのユーザーアカウントの棚卸しを行うことができます。

アセット インベントリでは収集できない情報について

実際の棚卸時に気づいたのですが、アセット インベントリでは収集できない情報があります。私が知る限りは、下記になりますが、他にもある可能性があります。

  • Access Context Managerに設定されているユーザーアカウント
  • VPC Service Controlsに設定されているユーザーアカウント
  • Cloud SQLのインスタンスのユーザー
  • BigQueryのスケジュールクエリに設定されているユーザーアカウント

私が知る限りには、上記ユーザーアカウントについては、アセット インベントリのIAMポリシーには載ってこないです。それ以外のユーザーアカウントに関して、ご存知の方がおりましたら、お問い合わせページから教えて頂けると幸いです。

まとめ

本日は、下記5点について説明しました。

  1. Google Cloudサービスで使用するユーザーアカウントについて
  2. Cloud Asset Inventoryの概要
  3. アセットインベントリの操作手順
  4. ユーザーアカウントの洗い出し
  5. アセットインベントリでは収集できない情報について

組織で、Google Cloudを使用する際、移動や退職等があり、ユーザーアカウントがそのまま残ってしまうことがあるので、3ヶ月や半年ごと等でユーザーアカウントの棚卸しをする必要があります。今回の調査手順を例にとって、定期的にユーザーアカウントの棚卸しをすることをオススメします。

使用していないユーザーアカウントが残っていることで、セキュリティリスクが高くなってしまうからです。

これからも、Macのシステムエンジニアとして、日々、習得した知識や経験を発信していきますので、是非、ブックマーク登録してくれると嬉しいです!

それでは、次回のブログで!

タイトルとURLをコピーしました