Identity and Access Management(IAM)では、ほとんどの Google Cloud サービスで、事前定義ロールが複数提供されています。各事前定義ロールには、タスクの実行に必要な権限または関連するタスクのグループが含まれています。
単純なタスクであれば、多くの場合、適切な事前定義ロールを簡単に見つけることができます。たとえば、プリンシパルが Cloud Storage バケット内のオブジェクトを表示する必要がある場合は、ストレージ オブジェクト閲覧者のロール(roles/storage.objectViewer
)が適しています。
しかし、事前定義ロールは数百もあるため、プリンシパルに最適なロールを特定するのは容易ではありません。また、最小権限の原則に従ったロールを見つけるのが難しい場合もあります。最小権限の原則とは、プリンシパルに必要以上の権限を付与しないことを意味します。
このページでは、最適な事前定義ロールを選択するための手順について説明します。
必要な権限を特定する
プリンシパルが必要とする権限を特定するには、まず、実行する必要があるタスクと、それに使用する Google Cloud サービスのリストを作成します。たとえば、プリンシパルが Compute Engine を使用して仮想マシン インスタンスを作成する場合があります。
タスクとサービスを特定したら、各タスクに必要な権限を特定します。その方法はいくつかあります。
Google Cloud サービスのドキュメントを確認してください。
一部のサービスでは、タスク指向の入門ガイドで「始める前に」セクションまたは各タスクの説明に、必要なロールや権限が記載されています。たとえば、Compute Engine の場合は、VM イメージのインポートとエクスポートを行うための前提条件をご覧ください。
アクセス制御のページに、必要なロールと権限が記載されている場合もあります。たとえば、Spanner の場合は、Google Cloud コンソール タスクに必要な権限をご覧ください。
タスクの完了に使用する REST または RPC API メソッドを確認し、API リファレンス ドキュメントで必要な IAM 権限を確認してください。
一部のサービスでは、REST と RPC API のドキュメントで各メソッドに必要な権限が記載されています。たとえば、
instances.get
メソッドの場合は、Compute Engine のドキュメントをご覧ください。各サービスの権限のリストを確認して、関連する権限を見つけてください。
ほとんどの場合、権限の名前から、その権限で可能な操作を判断できます。たとえば、Compute Engine VM インスタンスを作成するための権限は
compute.instances.create
という名前です。わかりやすいように、権限名は
SERVICE.RESOURCE_TYPE.ACTION
という形式になっています。
通常、すべてのタスクで必要となる権限を特定する必要はありません。その代わりに、各タスクに最も関連性の高い権限を特定します。その権限が事前定義ロールに含まれている場合、関連する権限も含まれている可能性があります。
このプロセスで、必要な権限の中で最も強力な権限も特定する必要があります。通常、最も強力な権限を含む事前定義ロールの数は多くありません。そのため、これらの権限に重点を置くことで、対象となるロールの数が少なくなります。
たとえば、次のタイプの権限は強力な権限です。
- リソースを作成および削除する権限
- 暗号鍵や個人情報(PII)などの機密データにアクセスする権限
- リソースに許可ポリシーまたは拒否ポリシーを設定する権限
- 組織、フォルダ、プロジェクトを更新する権限。この権限を使用すると、他のリソースが更新を継承できるようになります。
一方、次のタイプの権限はそれほど強力ではありません。
- リソースを一覧表示する権限
- 機密性が高くないデータにアクセスするための権限
- Compute Engine 仮想マシン インスタンスの最小 CPU プラットフォームなど、リスクが限定された設定を更新する権限
権限を含むロールを見つける
必要な権限を特定したら、それらの権限を含む事前定義ロールを探し、適切なロールのリストを作成します。このようなロールを見つける最も簡単な方法は、すべての IAM 権限と各権限を含むロールが記載されている権限のリファレンスを検索することです。
最小権限の原則に従うため、複数の事前定義ロールが必要になることもあります。特に、必要な権限が複数の Google Cloud サービスに属している場合は、このような作業が必要になります。たとえば、プリンシパルが Cloud Storage オブジェクトの表示と Cloud SQL データベースの管理を行う必要がある場合、両方のサービスに適切な権限が 1 つの事前定義ロールに含まれていることはまずありません。このようなロールが見つかったとしても、そのロールにはプリンシパルに必要のない権限が大量に含まれている可能性があります。リスクを軽減するため、このケースでは Cloud Storage に必要な権限を含むロールと、それとは別に Cloud SQL に必要な権限が含まれているロールを探してください。
適切なロールを選択する
最適な事前定義ロールのリストができたので、その中から最適なロールを選択しましょう。
まず、次のタイプのロールを削除します。
本番環境の場合: オーナー(
roles/owner
)、編集者(roles/editor
)、閲覧者(roles/viewer
)などの基本ロール。基本ロールには、すべての Google Cloud サービスにかかわる多くの権限が含まれます。本番環境では、他に選択肢がない限り、基本ロールを付与しないでください。代わりに、ニーズに合わせて最も制限された事前定義ロールまたはカスタムロールを付与します。
サービス エージェントのロール。通常、タイトルは「Service Agent」で終わり、名前は
serviceAgent
で終わります。これらのロールはサービス エージェント用です。サービス エージェントは、Google Cloud サービスがリソースにアクセスするために使用する特別なタイプのサービス アカウントです。サービス エージェントのロールには、プリンシパルがアクセスする必要のないサービスなど、複数のサービスに対する権限が含まれている傾向があります。
次に、事前定義ロールのリファレンスまたは Google Cloud コンソールの [ロール] ページを使用して、ロールに含まれる権限を確認します。プリンシパルに付与しない権限が含まれていないかどうか確認し、不要な権限を含むロールを削除します。
このプロセスで事前定義ロールがすべて除外されてしまった場合は、ユースケースに合ったカスタムロールの作成を検討します。それ以外の場合は、ニーズを満たし、権限数が最も少ないロールを選択します。
ロールを付与する場所を決定する
ロールは、リソース階層に属する特定の Google Cloud リソースに付与します。Compute Engine VM インスタンスなどの下位レベルのリソースは、プロジェクト、フォルダ、組織などの上位レベルのリソースに付与されているロールを継承します。
指定した事前定義ロールを付与する場所を選択します。
- プリンシパルが下位レベルのリソースにアクセスする必要がある場合は、そのリソースにロールを付与します。
プリンシパルがプロジェクト、フォルダまたは組織内の多くのリソースにアクセスする必要がある場合は、プロジェクト、フォルダまたは組織にロールを付与します。プリンシパルのニーズを満たす最下位レベルのリソースを選択します。
また、IAM Conditions を使用して、プロジェクト、フォルダ、組織内の特定のリソースにのみロールを付与することもできます。
複数の事前定義ロールを特定した場合は、リソース階層のさまざまなレベルでロールを付与する必要があるかどうかを検討してください。たとえば、プリンシパルが単一の Cloud SQL データベースにアクセスする必要がある一方で、多くのさまざまな Compute Engine VM インスタンスが必要な場合は、データベースに対する Cloud SQL のロールとプロジェクトに対する Compute Engine のロールを付与します。
プリンシパルにロールを付与する
これで、プリンシパルにロールを付与する準備が整いました。ロールを付与する方法については、以下をご覧ください。
ロールを付与した後、Policy Analyzer と Policy Troubleshooter を使用して、プリンシパルがアクセスできるリソースを確認し、アクセスに関する問題のトラブルシューティングを行うことができます。
プリンシパルが正しいリソースに対する適切な権限を持っていても、タスクを完了できない場合は、プリンシパルが必要とする権限を見落としている可能性があります。その場合は、同じ作業を繰り返します。必要な権限をリストに追加し、これらの権限を含むロールを見つけて最適なロールを選択します。
誤って過剰な権限を含むロールを付与した場合、ロールの推奨事項により、プリンシパルのニーズを満たす権限の少ないロールが提案される可能性があります。一部のロール バインディングはロールの最適化案を取得しません。
次のステップ
- Policy Simulator を使用して、プリンシパルのロールに対する変更をテストする方法を確認する。
- Policy Analyzer で、プリンシパルがリソースに対してどのようなアクセス権を持っているかを確認する方法を調べる。
- アクセスに関する問題のトラブルシューティングの詳細を確認する。