サービス アカウントに対するアクセス権の管理

このページでは、1 つのサービス アカウントに対するメンバーのアクセス権を付与、変更、取り消す方法について説明します。プロジェクト、フォルダまたは組織内のすべてのサービス アカウントに対するメンバーのアクセス権を管理するには、プロジェクト、フォルダまたは組織レベルでメンバーの管理を行います。

Identity and Access Management(IAM)では、IAM ポリシーによってアクセスを管理します。IAM ポリシーは Google Cloud リソースに接続されます。各ポリシーには、ユーザーやサービス アカウントなどの 1 つ以上のメンバーを IAM ロールに関連付けるロール バインディングのコレクションが含まれています。ロール バインディングは、ポリシーが接続されているリソースと、そのリソースのすべての子孫の両方のメンバーに、指定されたロールを付与します。IAM ポリシーの詳細については、ポリシーについてをご覧ください。

サービス アカウントは、他のメンバーにアクセス権を付与できるリソースであり、他のメンバーにアクセス権を付与できるメンバーでもあります。このページでは、サービス アカウントをリソースとして扱い、他のメンバーにアクセス権を付与する方法について説明します。サービス アカウントに他のリソースへのアクセス権を付与する方法については、次のガイドをご覧ください。

このページでは、Google Cloud Console、gcloud コマンドライン ツール、REST API を使用して、サービス アカウントへのアクセスを管理する方法について説明します。アクセスの管理は IAM クライアント ライブラリでも行うことができます。

始める前に

サービス アカウントについて学習する。

必要な権限

サービス アカウントへのアクセスを管理するには、次の権限を含むロールが必要です。

  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

これらの権限を最小権限の原則に従って取得するには、管理者に次のロールのいずれかを付与するよう依頼してください。

  • サービス アカウント管理者(roles/iam.serviceAccountAdmin
  • セキュリティ管理者(roles/iam.securityAdmin

あるいは、必要な権限を含む別のロールを管理者に付与してもらうこともできます。たとえば、カスタムロールや、許容範囲がより広い事前定義ロールなどです。

現在のアクセス権を表示する

次のセクションでは、Cloud Console、gcloud ツール、REST API を使用して、サービス アカウントにアクセスできるユーザーを確認する方法について説明します。IAM クライアント ライブラリを使用してサービス アカウントの IAM ポリシーを取得し、アクセス権を確認することもできます。

Console

  1. Cloud Console で、[サービス アカウント] ページに移動します。

    [サービス アカウント] に移動

  2. プロジェクトを選択します。

  3. サービス アカウントのメールアドレスをクリックします。

  4. [権限] タブに移動します。[Members with access to this service account] セクションに、このサービス アカウントのロールを付与されたすべてのメンバーが表示されます。

    このリストには、親リソースに付与されたロールのアクセス権を持つメンバーが含まれます。ポリシー継承の詳細については、ポリシーの継承とリソース階層をご覧ください。

  5. 省略可: 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 ツールでは、サービス アカウントの IAM ポリシーを直接編集することなく、1 つのメンバーに対して 1 つのロールを付与または取り消すことができます。一般的なタイプのメンバーには、Google アカウント、サービス アカウント、Google グループ、ドメインがあります。メンバータイプのリストについては、ID 関連のコンセプトをご覧ください。

単一ロールの付与

メンバーに 1 つのロールを付与する方法は次のとおりです。

Console

  1. Cloud Console で、[サービス アカウント] ページに移動します。

    [サービス アカウント] に移動

  2. プロジェクトを選択します。

  3. サービス アカウントのメールアドレスをクリックします。

  4. [権限] タブに移動して、[Members with access to this service account] セクションを探します。

  5. ロールを付与するメンバーを選択します。

    • 既存のメンバーにロールを付与するには、メンバーのメールアドレスが含まれている行を探し、その行の [ Edit member] をクリックして、[ 別のロールを追加] をクリックします。

      Google が管理するサービス アカウントにロールを付与する場合は、[Google 提供のロール付与を含みます] チェックボックスをオンにして、メールアドレスを表示する必要があります。

    • 新しいメンバーにロールを付与するには、[ アクセスを許可] をクリックして、メンバーのメールアドレスを入力します。

  6. 付与するロールをプルダウン リストから選択します。最善のセキュリティを得るため、メンバーが必要とする権限のみを含むロールを選択してください。

  7. (省略可)ロールに条件を追加します。

  8. [保存] をクリックします。メンバーにサービス アカウントのロールが付与されます。

gcloud

メンバーにロールをすばやく付与するには、add-iam-policy-binding コマンドを実行します。

gcloud iam service-accounts add-iam-policy-binding SA_ID \
    --member=MEMBER --role=ROLE_ID \
    --condition=CONDITION

次の値を指定します。

  • SA_ID: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com の形式)か、サービス アカウントの一意の数値 ID のいずれかです。

  • MEMBER: メンバーの識別子。通常、MEMBER-TYPE:ID の形式で指定します。例: user:my-user@example.comMEMBER に使用できる値の一覧については、ポリシー バインディングのリファレンスをご覧ください。

    メンバータイプが 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

  1. Cloud Console で、[サービス アカウント] ページに移動します。

    [サービス アカウント] に移動

  2. プロジェクトを選択します。

  3. サービス アカウントのメールアドレスをクリックします。

  4. [権限] タブに移動して、[Members with access to this service account] セクションを探します。

  5. アクセス権を取り消すメンバーのメールアドレスが含まれる行を探します。次に、その行の [ メンバーを編集] をクリックします。

  6. 取り消す役割ごとに [削除]()ボタンをクリックし、[保存] をクリックします。

gcloud

ユーザーのロールをすばやく取り消すには、remove-iam-policy-binding コマンドを実行します。

gcloud iam service-accounts remove-iam-policy-binding SA_ID \
    --member=MEMBER --role=ROLE_ID

次の値を指定します。

  • SA_ID: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com の形式)か、サービス アカウントの一意の数値 ID のいずれかです。

  • MEMBER: メンバーの識別子。通常、MEMBER-TYPE:ID の形式で指定します。例: user:my-user@example.comMEMBER に使用できる値の一覧については、ポリシー バインディングのリファレンスをご覧ください。

    メンバータイプが 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 ポリシーを更新します。

  1. getIamPolicy() を呼び出して、現在のポリシーを読み取ります。
  2. 返されたポリシーをテキスト エディタまたはプログラムで編集し、メンバーまたはロール バインディングの追加や削除を行います。
  3. setIamPolicy() を呼び出して、更新されたポリシーを書き込みます。

このセクションでは、gcloud ツールと 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.comraha@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.comraha@example.com の両方のロールを取り消すには、ポリシーからロール バインディングを削除します。

REST

メンバーまたはロール バインディング全体を削除して、返されたポリシーを編集します。このポリシーの変更は、更新したポリシーを設定するまで有効になりません。

たとえば、返されたポリシーに次のロール バインディングが含まれ、kai@example.comraha@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.comraha@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 分を差し上げます。

無料で開始