Shared VPC の設定で権限エラーが発生した場合の対処方法
困っていた内容
「host-project」というプロジェクトの VPC のサブネットに、別プロジェクト(app-project)からアクセスしたい。そのために Shared VPC を設定しようとしたところ、Google Cloud コンソールで「Enable and Continue」をクリックしても
Required 'compute.organizations.enableXpnHost' permission for 'projects/host-project'
というエラーが表示され、Shared VPC の有効化ができませんでした。
- プロジェクトのオーナー権限は持っている
- 組織管理者(Organization Administrator)もいるが、該当権限がない
- どの権限を誰に付与すればよいか分からない
回答
Shared VPC の有効化に必要な権限
Shared VPC のセットアップには、プロジェクトのオーナー権限だけでなく、組織・フォルダレベルでの追加権限が必要です。具体的には、組織またはフォルダレベルで IAM ロール compute.xpnAdmin と resourcemanager.projectIamAdmin の権限付与が必要です。
権限の付与方法
- 組織管理者(Organization Administrator) でログイン
- Shared VPC を管理するユーザー(例:
projectowner@example.com
)に、組織またはフォルダレベルで以下のロールを付与roles/compute.xpnAdmin
roles/resourcemanager.projectIamAdmin
- プリンシパル(ユーザーやサービスアカウント)が組織またはフォルダに属していることを確認
サービスプロジェクト側の権限
サービスプロジェクトからホストプロジェクトのネットワークにアクセスするには、ホストプロジェクト側でサービスプロジェクト管理者に roles/compute.networkUser
を付与する必要があります。
やってみた
実際に Google Cloud コンソールを利用して、ホスト側の設定をしてみます。
1. 必要なロールを付与
Google Cloud コンソールを利用して、Shared VPC ホスト側で操作するユーザーに対して組織レベルで以下 2 つのロールを付与します。
- Compute Shared VPC 管理者(compute.xpnAdmin)
- Project IAM 管理者(resourcemanager.projectIamAdmin)
2. Shared VPC の有効化
- Google CLoud コンソールにおいて、「VPC ネットワーク」、「共有 VPC」を選択した後に、「共有 VPC の設定」を押下します。
- 「有効にして続行」を押下した後に、必要な情報を入力して保存ボタンを押下します
3. サービスプロジェクト管理者へのネットワーク権限の付与
ホストプロジェクト(host-project)で、サービスプロジェクト管理者に roles/compute.networkUser を付与します。
ホスト側の設定が完了しました。これで、ホスト側から共有したサブネットをサービスプロジェクト側において利用できるようになりました。
Shared VPC の概念図は、Google Cloud 公式ブログの以下の図が分かりやすいと思います。Shared VPC は、ネットワーク管理を一元化するために利用します。
Shared VPC : 複数プロジェクトにまたがる仮想ネットワークを一元管理 | Google Cloud 公式ブログ
まとめ
Shared VPC は Google Cloud 組織(Organization)リソースが必須の機能です。個人の Gmail アカウントで利用しているプロジェクトなど、組織に属していない環境では利用できない点にご注意ください。
この記事がどなたかのお役に立てば幸いです。