このページでは、1 つのサービス アカウントに対するプリンシパルのアクセス権を付与、変更、取り消す方法について説明します。プロジェクト、フォルダまたは組織内のすべてのサービス アカウントに対するプリンシパルのアクセス権を管理するには、プロジェクト、フォルダまたは組織レベルでプリンシパルの管理を行います。
Identity and Access Management(IAM)では、IAM ポリシーによってアクセスを管理します。IAM ポリシーは Google Cloud リソースに接続されます。各ポリシーには、ユーザーやサービス アカウントなどの 1 つ以上のプリンシパルを IAM ロールに関連付けるロール バインディングのコレクションが含まれています。ロール バインディングは、ポリシーが接続されているリソースと、そのリソースのすべての子孫の両方のプリンシパルに、指定されたロールを付与します。IAM ポリシーの詳細については、ポリシーについてをご覧ください。
サービス アカウントは、他のプリンシパルに自身へのアクセス権を付与できるリソースであり、他のリソースへのアクセス権を付与されることができるプリンシパルでもあります。このページでは、サービス アカウントをリソースとして扱い、他のプリンシパルにアクセス権を付与する方法について説明します。サービス アカウントに他のリソースへのアクセス権を付与する方法については、次のガイドをご覧ください。
- サービス アカウントにプロジェクト、フォルダ、組織へのアクセス権を付与するには、プロジェクト、フォルダ、組織へのアクセスの管理をご覧ください。
- サービス アカウントに他のリソースへのアクセス権を付与するには、他のリソースへのアクセスの管理をご覧ください。
このページでは、Google Cloud Console、Google Cloud CLI、REST API を使用してサービス アカウントへのアクセス権を管理する方法を説明します。アクセスの管理は IAM クライアント ライブラリでも行うことができます。
始める前に
IAM API を有効にします。
サービス アカウントについて学習する。
必要なロール
サービス アカウントへのアクセスの管理に必要な権限を取得するには、サービス アカウントまたはサービス アカウントを所有するプロジェクトに対するサービス アカウント管理者(roles/iam.serviceAccountAdmin
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。
この事前定義ロールには、サービス アカウントへのアクセスの管理に必要な権限が含まれています。必要な権限を正確に確認するには、[必要な権限] セクションを開いてください。
必要な権限
-
iam.serviceAccounts.get
-
iam.serviceAccounts.list
-
iam.serviceAccounts.getIamPolicy
-
iam.serviceAccounts.setIamPolicy
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
現在のアクセス権を表示する
次のセクションでは、Cloud Console、gcloud CLI、REST API を使用して、サービス アカウントにアクセスできるユーザーを確認する方法について説明します。IAM クライアント ライブラリを使用してサービス アカウントの IAM ポリシーを取得し、アクセス権を確認することもできます。
Console
Cloud Console で、[サービス アカウント] ページに移動します。
プロジェクトを選択します。
サービス アカウントのメールアドレスをクリックします。
[権限] タブに移動します。[このサービス アカウントにアクセスできるプリンシパル] セクションに、このサービス アカウントのロールを付与されたすべてのプリンシパルが表示されます。
このリストには、親リソースに付与されたロールのアクセス権を持つプリンシパルが含まれます。ポリシー継承の詳細については、ポリシーの継承とリソース階層をご覧ください。
省略可: Google 管理のサービス アカウントに付与されたロールを表示するには、[Google 提供のロール付与を含みます] チェックボックスをオンにします。
gcloud
サービス アカウントにアクセスできるユーザーを確認するには、サービス アカウントの IAM ポリシーを取得します。IAM ポリシーの解釈方法については、ポリシーについてをご覧ください。
サービス アカウントの IAM ポリシーを取得するには、サービス アカウントを指定して get-iam-policy
コマンドを実行します。
gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH
次の値を指定します。
SA_ID
: サービス アカウントの ID。サービス アカウントのメールアドレスを使用できます。FORMAT
: ポリシーの形式。json
またはyaml
を使用します。PATH
: ポリシーの新しい出力ファイルのパス。
たとえば、次のコマンドはサービス アカウント my-service-account
のポリシーを取得し、これを JSON 形式でホーム ディレクトリに保存します。
gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json
REST
サービス アカウントにアクセスできるユーザーを確認するには、サービス アカウントの IAM ポリシーを取得します。IAM ポリシーの解釈方法については、ポリシーについてをご覧ください。
serviceAccounts.getIamPolicy
メソッドで、サービス アカウントの IAM ポリシーを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。SA_ID
: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式)、またはサービス アカウントの一意の数値 ID のいずれかです。POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy
JSON 本文のリクエスト:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、サービス アカウントの IAM ポリシーが含まれます。次に例を示します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
単一ロールの付与または取り消し
Cloud Console または gcloud CLI では、サービス アカウントの IAM ポリシーを直接編集することなく、1 つのプリンシパルに対して 1 つのロールを付与または取り消すことができます。一般的なタイプのプリンシパルには、Google アカウント、サービス アカウント、Google グループ、ドメインがあります。プリンシパル タイプのリストについては、ID 関連のコンセプトをご覧ください。
最も適切な事前定義ロールを特定する必要がある場合は、事前定義ロールを選択するをご覧ください。
単一ロールの付与
プリンシパルに 1 つのロールを付与する方法は次のとおりです。
Console
Cloud Console で、[サービス アカウント] ページに移動します。
プロジェクトを選択します。
サービス アカウントのメールアドレスをクリックします。
[権限] タブに移動して、[このサービス アカウントにアクセスできるプリンシパル] セクションを探します。
ロールを付与するプリンシパルを選択します。
サービス アカウントの他のロールを持つプリンシパルにロールを付与するには、プリンシパルのメールアドレスを含む行を見つけて、[
プリンシパルを編集します] をクリックします。その行で、[ 別のロールを追加] をクリックします。Google が管理するサービス アカウントにロールを付与する場合は、[Google 提供のロール付与を含みます] チェックボックスをオンにして、メールアドレスを表示する必要があります。
サービス アカウントの他のロールを持っていないプリンシパルにロールを付与するには、[
アクセスを許可] をクリックし、プリンシパルのメールアドレスを入力します。
付与するロールをプルダウン リストから選択します。最善のセキュリティを得るため、プリンシパルが必要とする権限のみを含むロールを選択してください。
(省略可)ロールに条件を追加します。
[保存] をクリックします。プリンシパルにサービス アカウントのロールが付与されます。
gcloud
プリンシパルにロールをすばやく付与するには、add-iam-policy-binding
コマンドを実行します。
gcloud iam service-accounts add-iam-policy-binding SA_ID \ --member=PRINCIPAL --role=ROLE_ID \ --condition=CONDITION
次の値を指定します。
SA_ID
: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式)か、サービス アカウントの一意の数値 ID のいずれかです。PRINCIPAL
: プリンシパルまたはメンバーの識別子。通常、PRINCIPAL-TYPE:ID
の形式で指定します。例:user:my-user@example.com
PRINCIPAL
に使用できる値の一覧については、ポリシー バインディングのリファレンスをご覧ください。プリンシパル タイプが
user
の場合、識別子に含まれるドメイン名は Google Workspace ドメインまたは Cloud Identity ドメインである必要があります。Cloud Identity ドメインの設定方法については、Cloud Identity の概要をご覧ください。ROLE_ID
: 付与するロールの名前。例:roles/iam.serviceAccountUser
ロールのリストについては、ロールについてをご覧ください。CONDITION
: 省略可。ロール バインディングに追加する条件。条件の詳細については、条件の概要をご覧ください。
たとえば、サービス アカウント ユーザーのロールをサービス アカウント my-service-account@my-project.iam.gserviceaccount.com
のユーザー my-user@example.com
に付与するには、次のコマンドを実行します。
gcloud iam service-accounts add-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \ --member=user:my-user@example.com --role=roles/iam.serviceAccountUser
単一ロールの取り消し
プリンシパルの 1 つのロールを取り消すには、次の手順を行います。
Console
Cloud Console で、[サービス アカウント] ページに移動します。
プロジェクトを選択します。
サービス アカウントのメールアドレスをクリックします。
[権限] タブに移動して、[このサービス アカウントにアクセスできるプリンシパル] セクションを探します。
アクセス権を取り消すプリンシパルのメールアドレスが含まれる行を探します。その行の [
プリンシパルを編集します] をクリックします。取り消すロールごとに [削除
] ボタンをクリックして、[保存] をクリックします。
gcloud
ユーザーのロールをすばやく取り消すには、remove-iam-policy-binding
コマンドを実行します。
gcloud iam service-accounts remove-iam-policy-binding SA_ID \ --member=PRINCIPAL --role=ROLE_ID
次の値を指定します。
SA_ID
: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式)か、サービス アカウントの一意の数値 ID のいずれかです。PRINCIPAL
: プリンシパルまたはメンバーの識別子。通常、PRINCIPAL-TYPE:ID
の形式で指定します。例:user:my-user@example.com
PRINCIPAL
に使用できる値の一覧については、ポリシー バインディングのリファレンスをご覧ください。プリンシパル タイプが
user
の場合、識別子に含まれるドメイン名は Google Workspace ドメインまたは Cloud Identity ドメインである必要があります。Cloud Identity ドメインの設定方法については、Cloud Identity の概要をご覧ください。ROLE_ID
: 取り消すロールの名前。例:roles/iam.serviceAccountUser
ロールのリストについては、ロールについてをご覧ください。
たとえば、サービス アカウント my-service-account@my-project.iam.gserviceaccount.com
のユーザー my-user@example.com
からサービス アカウント ユーザーのロールを取り消すには、次のコマンドを実行します。
gcloud iam service-accounts remove-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \ --member=user:my-user@example.com --role=roles/iam.serviceAccountUser
複数のロールの付与または取り消し
複数のロールの付与と取り消しを伴う大幅なアクセス権の変更を行うには、read-modify-write のパターンを使用して、サービス アカウントの IAM ポリシーを更新します。
getIamPolicy()
を呼び出して、現在のポリシーを読み取ります。- 返されたポリシーをテキスト エディタまたはプログラムで編集し、プリンシパルまたはロール バインディングの追加や削除を行います。
setIamPolicy()
を呼び出して、更新されたポリシーを書き込みます。
このセクションでは、gcloud CLI と REST API を使用してポリシーを更新する方法について説明します。IAM クライアント ライブラリを使用してポリシーを更新することもできます。
現在のポリシーを取得する
gcloud
サービス アカウントの IAM ポリシーを取得するには、サービス アカウントを指定して get-iam-policy
コマンドを実行します。
gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH
次の値を指定します。
SA_ID
: サービス アカウントの ID。サービス アカウントのメールアドレスを使用できます。FORMAT
: ポリシーの形式。json
またはyaml
を使用します。PATH
: ポリシーの新しい出力ファイルのパス。
たとえば、次のコマンドはサービス アカウント my-service-account
のポリシーを取得し、これを JSON 形式でホーム ディレクトリに保存します。
gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json
REST
serviceAccounts.getIamPolicy
メソッドで、サービス アカウントの IAM ポリシーを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。SA_ID
: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式)、またはサービス アカウントの一意の数値 ID のいずれかです。POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy
JSON 本文のリクエスト:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、サービス アカウントの IAM ポリシーが含まれます。次に例を示します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
レスポンスを適切なタイプ(json
または yaml
)のファイルに保存します。
ポリシーを変更する
特定のユーザーに対するロールの付与または取り消しを行うには、プログラムまたはテキスト エディタを使用してサービス アカウントのポリシーのローカルコピーを変更します。
他のポリシーの変更を上書きしないため、ポリシーの etag
フィールドは編集または削除しないでください。etag
フィールドは、現在のポリシーの状態を表します。更新したポリシーを設定すると、IAM ではリクエスト内の etag
値と既存の etag
を比較し、値が一致する場合にのみポリシーを書き込みます。
ロールを付与する
プリンシパルにロールを付与するには、ポリシーのロール バインディングを変更します。付与できるロールについては、ロールについてまたはサービス アカウントに対する付与可能なロールを表示をご覧ください。最も適切な事前定義ロールを特定する必要がある場合は、事前定義ロールを選択するをご覧ください。
必要に応じて、条件を使用して特定の要件が満たされた場合にのみロールを付与できます。
すでにポリシーに含まれているロールを付与するには、既存のロール バインディングにプリンシパルを追加します。
gcloud
プリンシパルを既存のロール バインディングに追加して、返されたポリシーを編集します。このポリシーの変更は、更新したポリシーを設定するまで有効になりません。
たとえば、返されたポリシーに次のロール バインディングが含まれ、サービス アカウント ユーザーロール(roles/iam.serviceAccountUser
)が kai@example.com
に付与されているとします。
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:kai@example.com"
]
}
同じロールを raha@example.com
に付与するには、既存のロール バインディングに raha@example.com
を追加します。
{ "role": "roles/iam.serviceAccountUser", "members": [ "user:kai@example.com", "user:raha@example.com" ] }
REST
プリンシパルを既存のロール バインディングに追加して、返されたポリシーを編集します。このポリシーの変更は、更新したポリシーを設定するまで有効になりません。
たとえば、返されたポリシーに次のロール バインディングが含まれ、サービス アカウント ユーザーロール(roles/iam.serviceAccountUser
)が kai@example.com
に付与されているとします。
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:kai@example.com"
]
}
同じロールを raha@example.com
に付与するには、既存のロール バインディングに raha@example.com
を追加します。
{ "role": "roles/iam.serviceAccountUser", "members": [ "user:kai@example.com", "user:raha@example.com" ] }
まだポリシーに含まれていないロールを付与するには、新しいロール バインディングを追加します。
gcloud
プリンシパルにロールを付与する新しいロール バインディングを追加して、返されたポリシーを編集します。このポリシーの変更は、更新したポリシーを設定するまで有効になりません。
たとえば、サービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を raha@example.com
に付与するには、次のロール バインディングをポリシーの bindings
配列に追加します。
{
"role": "roles/iam.serviceAccountTokenCreator",
"members": [
"user:raha@example.com"
]
}
REST
プリンシパルにロールを付与する新しいロール バインディングを追加して、返されたポリシーを編集します。このポリシーの変更は、更新したポリシーを設定するまで有効になりません。
たとえば、サービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を raha@example.com
に付与するには、次のロール バインディングをポリシーの bindings
配列に追加します。
{
"role": "roles/iam.serviceAccountTokenCreator",
"members": [
"user:raha@example.com"
]
}
ロールを取り消す
ロールを取り消すには、ロール バインディングからプリンシパルを削除します。ロール バインディングに他のプリンシパルがない場合は、ポリシーからロール バインディング全体を削除します。
gcloud
プリンシパルまたはロール バインディング全体を削除して、返されたポリシーを編集します。このポリシーの変更は、更新したポリシーを設定するまで有効になりません。
たとえば、返されたポリシーに次のロール バインディングが含まれ、kai@example.com
と raha@example.com
にサービス アカウント ユーザーロール(roles/iam.serviceAccountUser
)が付与されているとします。
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:kai@example.com",
"user:raha@example.com"
]
}
kai@example.com
のロールを取り消すには、kai@example.com
をロール バインディングから削除します。
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:raha@example.com"
]
}
kai@example.com
と raha@example.com
の両方のロールを取り消すには、ポリシーからロール バインディングを削除します。
REST
プリンシパルまたはロール バインディング全体を削除して、返されたポリシーを編集します。このポリシーの変更は、更新したポリシーを設定するまで有効になりません。
たとえば、返されたポリシーに次のロール バインディングが含まれ、kai@example.com
と raha@example.com
にサービス アカウント ユーザーロール(roles/iam.serviceAccountUser
)が付与されているとします。
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:kai@example.com",
"user:raha@example.com"
]
}
kai@example.com
のロールを取り消すには、kai@example.com
をロール バインディングから削除します。
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:raha@example.com"
]
}
kai@example.com
と raha@example.com
の両方のロールを取り消すには、ポリシーからロール バインディングを削除します。
ポリシーを設定する
必要なロールを付与または取り消すようにポリシーを変更した後、setIamPolicy()
を呼び出して更新します。
gcloud
リソースの IAM ポリシーを設定するには、サービス アカウントを指定して set-iam-policy
コマンドを実行します。
gcloud iam service-accounts set-iam-policy SA_ID PATH
次の値を指定します。
SA_ID
: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式)か、サービス アカウントの一意の数値 ID のいずれかです。PATH
: 新しいポリシーを含むファイルのパス。
レスポンスには、更新されたポリシーが含まれます。
たとえば、次のコマンドは、policy.json
に保存されているポリシーをサービス アカウント my-service-account@my-
project.iam.gserviceaccount.com
のポリシーとして設定します。
gcloud iam service-accounts set-iam-policy my-service-account@my-project.iam.gserviceaccount.com \ ~/policy.json
REST
serviceAccounts.setIamPolicy
メソッドによって、サービス アカウントの更新済み IAM ポリシーが設定されます。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。SA_ID
: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式)、またはサービス アカウントの一意の数値 ID のいずれかです。-
POLICY
: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。たとえば、前の手順で示したポリシーを設定するには、
policy
を次のコードに置き換えます。{ "version": 1, "etag": "BwUqLaVeua8=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "user:robin@example.com" ] }, { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:setIamPolicy
JSON 本文のリクエスト:
{ "policy": POLICY }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、更新されたポリシーが含まれます。
次のステップ
- プリンシパルにサービス アカウントの権限借用や、有効期間の短いサービス アカウント認証情報の作成を許可するために、どのロールを付与するかを学習する。
- 最も適切な事前定義ロールを選択する方法を確認する。
- サービス アカウントを保護するためのベスト プラクティスで、サービス アカウントを安全に使用する方法を確認する。
- プロジェクト、フォルダ、組織へのアクセスを管理する方法を学習する。
- 他のリソースへのアクセスを管理する一般的な方法を学習する。
- 条件付きロール バインディングを使用して、プリンシパルのアクセス権を条件付きにする方法を確認する。
使ってみる
Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
無料で開始