Identity and Access Management(IAM)には、プリンシパルがアクセスできるリソースを制御するために役立ついくつかのポリシータイプがあります。このページでは、これらのポリシータイプの使用方法と管理方法の違いについて説明します。
IAM ポリシーのタイプ
IAM には次のタイプのポリシーがあります。
- 許可ポリシー
- 拒否ポリシー
- プリンシパル アクセス境界(PAB)ポリシー
次の表に、これらのポリシータイプの違いを示します。
ポリシー | ポリシーの機能 | ポリシーの管理に使用される API | ポリシーとターゲットの関係 | ポリシーをターゲットに接続する方法 | ポリシーの親リソース |
---|---|---|---|---|---|
許可ポリシー | プリンシパルにリソースへのアクセス権を付与する | 許可ポリシーを管理するリソースの API |
1 対 1 の関係 各許可ポリシーは 1 つのリソースに適用されます。各リソースには 1 つの許可ポリシーのみを適用できます。 |
ポリシーの作成時にリソースを指定する | 許可ポリシーが適用されるリソースと同じ |
拒否ポリシー | プリンシパルが特定の権限を使用できないようにする | IAM v2 API |
1 対多の関係 各拒否ポリシーは 1 つのリソースに適用されます。各リソースには最大 500 個の拒否ポリシーを設定できます。 |
拒否ポリシーを作成するときにリソースを指定する | 拒否ポリシーが適用されているリソースと同じ |
プリンシパル アクセス境界ポリシー | プリンシパルがアクセスできるリソースを制限する | IAM v3 API |
多対多の関係 各 PAB ポリシーは、無制限のプリンシパル セットに適用できます。各プリンシパル セットには、最大 10 個の PAB ポリシーをバインドできます。 |
PAB ポリシーをプリンシパル セットに接続するポリシー バインディングを作成します。 | 組織 |
以降のセクションでは、各ポリシータイプについて詳しく説明します。
プリンシパルにアクセス権を付与するポリシー
プリンシパルにリソースへのアクセス権を付与するには、IAM 許可ポリシーを使用します。
許可ポリシーを使用すると、Google Cloud のリソースへのアクセス権を付与できます。許可ポリシーは、ロール バインディングとメタデータで構成されます。ロール バインディングでは、リソースに対して特定のロールを付与するプリンシパルを指定します。
許可ポリシーは常に 1 つのリソースに適用されます。許可ポリシーをリソースに適用すると、そのポリシーはリソースの子孫に継承されます。
許可ポリシーを作成して適用するには、許可ポリシーを受け入れるリソースを特定し、そのリソースの setIamPolicy
メソッドを使用して許可ポリシーを作成します。許可ポリシー内のすべてのプリンシパルに、リソースとそのリソースのすべての子孫に対して指定されたロールが付与されます。各リソースに適用できる許可ポリシーは 1 つだけです。
許可ポリシーの詳細については、許可ポリシーについてをご覧ください。
プリンシパルへのアクセスを拒否するポリシー
プリンシパルがリソースにアクセスできないようにするには、IAM 拒否ポリシーを使用します。IAM 拒否ポリシーは IAM v2 API で使用できます。
許可ポリシーと同様に、拒否ポリシーは常に 1 つのリソースに適用されます。拒否ポリシーは、プロジェクト、フォルダ、組織に適用できます。このプロジェクト、フォルダ、または組織は、リソース階層内のポリシーの親としても機能します。リソースに拒否ポリシーを適用すると、そのポリシーはリソースの子孫に継承されます。
拒否ポリシーを作成して適用するには、IAM v2 API を使用します。拒否ポリシーを作成するときに、拒否ポリシーが接続されているリソースを指定します。拒否ポリシー内のすべてのプリンシパルは、指定された権限を使用してそのリソースとそのリソースの子孫にアクセスできなくなります。各リソースには、最大 500 個の拒否ポリシーを関連付けることができます。
拒否ポリシーの詳細については、拒否ポリシーをご覧ください。
プリンシパルがアクセスできるリソースを制限するポリシー
プリンシパルがアクセスできるリソースを制限するには、プリンシパル アクセス境界ポリシーを使用します。プリンシパル アクセス境界ポリシーは IAM v3 API で使用できます。
プリンシパル アクセス境界ポリシーを作成して適用するには、プリンシパル アクセス境界ポリシーを作成し、ポリシー バインディングを作成して、そのポリシーをプリンシパル セットに接続します。
プリンシパル アクセス境界ポリシーは常に組織の子になります。プリンシパル アクセス境界ポリシーのポリシー バインディングは、ポリシー バインディングで参照されるプリンシパル セットに最も近いプロジェクト、フォルダ、または組織の子です。
各ポリシー バインディングでは、1 つのプリンシパル アクセス境界ポリシーを 1 つのプリンシパル セットにバインドします。プリンシパル アクセス境界ポリシーは、任意の数のプリンシパル セットにバインドできます。各プリンシパル セットには、最大 10 個のプリンシパル アクセス境界ポリシーをバインドできます。プリンシパル アクセス境界ポリシーを削除すると、そのポリシーに関連するすべてのポリシー バインディングも削除されます。
プリンシパル アクセス境界ポリシーの詳細については、プリンシパル アクセス境界ポリシーをご覧ください。
ポリシー評価
プリンシパルがリソースにアクセスしようとすると、IAM は関連するすべての許可ポリシー、拒否ポリシー、プリンシパル アクセス境界ポリシーを評価し、プリンシパルがリソースにアクセスできるかどうかを確認します。これらのポリシーのいずれかで、プリンシパルがリソースにアクセスできないことが示されている場合、IAM はアクセスを拒否します。
実際には、IAM はすべてのポリシータイプを同時に評価し、結果をまとめて、プリンシパルがリソースにアクセスできるかどうかを判断します。ただし、このポリシー評価は次の段階で行うことを想定しています。
-
IAM は、関連するすべてのプリンシパル アクセス境界ポリシーを確認し、プリンシパルがリソースにアクセスできるかどうかを確認します。プリンシパル アクセス境界ポリシーは、次の条件が満たされている場合に機能します。
- ポリシーが、プリンシパルを含むプリンシパル セットにバインドされている。
- プリンシパル アクセス境界ポリシーが、プリンシパルが使用しようとしている権限をブロックしている。プリンシパル アクセス境界ポリシーがブロックする権限は、プリンシパル アクセス境界ポリシーのバージョンによって異なります。ポリシー バージョンは、プリンシパル アクセス境界ポリシーを作成するときに指定します。詳細については、プリンシパル アクセス境界ポリシーのバージョンをご覧ください。
関連するプリンシパル アクセス境界ポリシーを確認した後、IAM は次のいずれかを行います。
- 関連するプリンシパル アクセス境界ポリシーに、プリンシパルがアクセスしようとしているリソースが含まれていない場合、IAM はプリンシパルがリソースにアクセスできないようにします。
- 関連するプリンシパル アクセス境界ポリシーに、プリンシパルがアクセスしようとしているリソースが含まれている場合、IAM は次のステップに進みます。
- 関連するプリンシパル アクセス境界ポリシーがない場合、または IAM が関連するプリンシパル アクセス境界ポリシーを評価できない場合、IAM は次のステップに進みます。
-
IAM は、関連するすべての拒否ポリシーを確認し、プリンシパルで権限が拒否されているかどうか確認します。関連する拒否ポリシーには、リソースに接続している拒否ポリシーだけでなく、継承された拒否ポリシーも含まれます。
- これらの拒否ポリシーのいずれかでプリンシパルが必要とする権限が拒否されている場合、IAM はリソースへのアクセスを許可しません。
- プリンシパルが必要とする権限を拒否するポリシーがない場合、IAM は次のステップに進みます。
-
IAM は、関連するすべての許可ポリシーをチェックして、プリンシパルに必要な権限があるかどうか確認します。関連する許可ポリシーには、リソースに接続している許可ポリシーだけでなく、継承された許可ポリシーも含まれます。
- プリンシパルに必要な権限が付与されていない場合、IAM はリソースへのアクセスを許可しません。
- プリンシパルに必要な権限が付与されている場合、IAM はリソースへのアクセスを許可します。
次の図に、このポリシーの評価フローを示します。
次のステップ
- 許可ポリシーの詳細を確認する。
- 拒否ポリシーの詳細を確認する。
- プリンシパル アクセス境界ポリシーの詳細を確認する。