Google Cloud 内のリソースへのアクセスを制御するには、Identity and Access Management(IAM)を使用します。IAM では、プロジェクト内のどのリソースに対するどのような種類のアクセスを誰に許可するかを設定します。IAM の概要については、IAM の概要をご覧ください。
リソースをデプロイするときに、設定でプリエンプティブに IAM ポリシーを設定することで、これらのリソースにアクセスできるユーザーを制御することもできます。たとえば、作成する Pub/Sub トピックを特定のユーザーが管理できるようにしたい場合に、このことを Deployment Manager に伝えるには、構成の中で IAM ポリシーを指定します。デプロイを作成または更新するときに、Deployment Manager は IAM API を呼び出して、リソースに対する適切な権限を設定します。
始める前に
- このガイドのコマンドラインの例を使用する場合、gcloud コマンドライン ツールをインストールします。
- このガイドの API の例を使用する場合は、API アクセスを設定します。
IAM のポリシーを Deployment Manager で使用する
IAM ポリシーとは、ユーザーとその役割の集合です。IAM ポリシーの設定はプロジェクト レベルで行い、基本の役割または定義済みの役割を使用します。サービスによっては、Cloud Pub/Sub のように、リソースレベルでの IAM ポリシーの設定もサポートされています。
リソースレベルでの IAM ポリシーの設定がサポートされていないサービスについては、Deployment Manager から NO_METHOD_TO_UPDATE_ACCESS_CONTROL
エラーが返されます。
役割の一覧と、それぞれに適用できるリソースについては、役割についてをご覧ください。
Deployment Manager に IAM ポリシーを設定するための権限を付与する
Deployment Manager は Google API サービス アカウントを使用して、他の Google API を呼び出し、Google Cloud Platform リソースを管理します。プロジェクトの Google API サービス アカウントに基本の roles/owner
役割を付与して、構成で定義した IAM ポリシーを適用できるようにする必要があります。
- プロジェクトの Google Cloud コンソールで IAM ページに移動します。
- プロンプトが表示されたら、リストからプロジェクトを選択します。
次の形式のメールアドレスが設定された Google API サービス アカウントを見つけます。
[PROJECT_NUMBER]@cloudservices.gserviceaccount.com
API のサービス アカウントに
roles/owner
の役割を付与します。コンソール
- Google Cloud Console 内で、Google API サービス アカウントの [役割] プルダウンを展開し、[プロジェクト] > [オーナー] を選択します。
- [保存] をクリックして、変更を保存します。
gcloud
Google Cloud CLI で、プロジェクトの IAM ポリシーにバインディングを追加します。
gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/owner
ここで
[PROJECT_ID]
はプロジェクト ID です。[SERVICE_ACCOUNT_EMAIL]
は、サービス アカウントのメールです。
例:
gcloud projects add-iam-policy-binding database-images \ --member serviceAccount:123456789012@cloudservices.gserviceaccount.com \ --role roles/owner
API
API では、以下の URL に対して
POST
リクエストを作成します。ここで[PROJECT_ID]
はプロジェクトの ID を示します。POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
リクエストの本文には、このプロジェクトに適用するバインドのリストを含めます。
roles/owner
役割はバインドの一部になります。例:{ "policy": { "version": "0", "bindings": [ { "role": "roles/owner", "members": [ "user:example@gmail.com", "serviceAccount:123456789012@cloudservices.gserviceaccount.com" ] } ] } }
構成に IAM ポリシーを設定する
次に、以下の指示に沿って、構成またはテンプレートに IAM ポリシーを設定できます。
アクセス制御ポリシーを適用する各リソースの最上位の構成に
accessControl
セクションを追加します。リソースに目的の
gcpIamPolicy
を指定します。IAM ポリシーには、バインディングのリストを含めることができます。バインドによって、1 つの役割にメンバーのリストが結び付けられます。accessControl
を使用してサービス アカウントを管理している場合は、サービス アカウントの管理の詳細について参照してください。
たとえば、次の accessControl
セクションでは、これらの役割をユーザーに付与するバインディングを追加しています。
ユーザー | 役割 |
---|---|
alice@example.com |
roles/pubsub.editor |
|
roles/pubsub.publisher |
resources:
- name: a-new-pubsub-topic
type: pubsub.v1.topic
properties:
...
accessControl:
gcpIamPolicy:
bindings:
- role: roles/pubsub.editor
members:
- "user:alice@example.com"
- role: roles/pubsub.publisher
members:
- "user:jane@example.com"
- "serviceAccount:my-other-app@appspot.gserviceaccount.com"
IAM ポリシーの詳細については、IAM のドキュメントをご覧ください。