サービス アカウントへの役割の付与

IAM の役割を付与する際には、サービス アカウントをリソースまたは ID として扱うことができます。

アプリケーションでは、Google Cloud Platform サービスに対する認証のためにサービス アカウントを ID として使用します。たとえば、Compute Engine 仮想マシン(VM)をサービス アカウントとして実行している場合は、プロジェクト(リソース)のサービス アカウント(ID)に編集者の役割を付与できます。

これと同時に、誰が VM を起動できるかを制御することもできます。それを行うには、サービス アカウント(リソース)に関する serviceAccountUser の役割をユーザー(ID)に付与します。

サービス アカウントの詳細と、サービス アカウントのリソースや ID としてのその他の使用例については、サービス アカウントをご覧ください。

このガイドの前提条件

  • このガイドのコマンドライン サンプルを使用するには、gcloud コマンドライン ツールをインストールします。

  • 役割についてを読んで、サービス アカウントに付与できる定義済み役割のリストを確認します。

特定のリソースのサービス アカウントへの役割の付与

サービス アカウントに役割を付与すると、サービス アカウントに Cloud Platform プロジェクトのリソースに関する特定のアクションを完了するための権限が与えられます。たとえば、storage.admin 役割をサービス アカウントに付与すると、Google Cloud Storage のオブジェクトやバケットを管理できるようになります。

サービス アカウントに役割を付与するには、以下のいずれかの方法に従います。

gcloud

単一のサービス アカウントに役割を追加します。

gcloud projects add-iam-policy-binding my-project-123 \
    --member serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com --role roles/editor

コマンドから更新したポリシーが出力されます。

    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
      - serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com
      - user:email3@gmail.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
    role: roles/viewer
    etag: BwUm38GGAQk=
    version: 1

サービス アカウントへのアクセスをプロジェクト用の ID として許可する手順については、プロジェクト メンバーへのアクセス権の付与、変更、取り消しを参照してください。

API

次の POST リクエストは、projects.setIamPolicy() メソッドを使用して、プロジェクト my-project-123 のサービス アカウント my-sa-123 に編集者がアクセスできるようにします。リクエストの本文には、サービス アカウントに権限を付与する新しいポリシーが含まれている必要があります。各役割には複数のメンバーを含めることができます。

POST https://cloudresourcemanager.googleapis.com/v1beta1/projects/my-project-123:setIamPolicy

{
    "policy":
    {
        "version": 1,
        "etag": "BwUqMvZQGfo=",
        "bindings": [
        {
            "role": "roles/editor",
            "members": [
                "serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com",
                "user:alice@gmail.com"
            ]
        },
        {
            "role":"roles/owner",
            "members":
            [
                "user:bob@gmail.com",
            ]
        },
        {
            "role":"roles/viewer",
            "members":
            [
                "user:john@gmail.com",
            ]
        },
        {
            "role":"roles/iam.serviceAccountUser",
            "members":
            [
                "user:alice@gmail.com"
            ]
        },
        ]
    },
}

レスポンスには次のように新しいポリシーが含まれています。

{
    "version": 1,
    "etag": "BwUqMvZQGfo=",
    "bindings": [
    {
        "role": "roles/editor",
        "members": [
            "serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com",
            "user:alice@gmail.com"
        ]
    },
    {
        "role":"roles/owner",
        "members":
        [
            "user:bob@gmail.com",
        ]
    },
    {
        "role":"roles/viewer",
        "members":
        [
            "user:john@gmail.com",
        ]
    },
    {
        "role":"roles/iam.serviceAccountUser",
        "members":
        [
            "user:alice@gmail.com"
        ]
    },
    ]
}

Console

サービス アカウントの役割を管理する方法は、プロジェクト内のユーザーの役割を管理する場合と同じです。

  1. GCP Console で [IAM と管理] ページを開きます。

    [IAM と管理] ページを開く

  2. プロジェクトを選択し、[続行] をクリックします。

  3. 役割を追加するサービス アカウントを特定します。

    • サービス アカウントがまだメンバーリストに含まれていない場合、サービス アカウントには何も役割が割り当てられていません。[追加] をクリックし、サービス アカウントのメールアドレスを入力します。
    • サービス アカウントがすでにメンバーリストに含まれている場合、サービス アカウントには既存の役割が割り当てられています。編集するサービス アカウントの [役割] プルダウン リストをクリックします。
  4. サービス アカウントに適用する 1 つ以上の役割を選択します。

  5. サービス アカウントに役割を適用するには、[追加] または [保存] をクリックします。

サービス アカウントへの所有権とアクセスの設定

特定のユーザーが所有権を持ち、サービス アカウントとその設定にアクセスできるようにすることができます。基本的なプロジェクト オーナーの役割とプロジェクト編集者の役割を持つユーザーは、すでにサービス アカウントを変更できますが、サービス アカウント リソースに対して特定の操作のみをできるように、一部のユーザーのアクセスを制限することをおすすめします。

サービス アカウントのユーザー権限を付与するには、以下のいずれかの方法に従います。

gcloud

すべてのポリシーを更新します。

  1. 変更するポリシーを取得して、JSON ファイルに書き込みます。--format フラグを使用すると、出力形式を選択できます(選択できる出力形式は JSON、YAML、テキストです)。このページの他の例では、デフォルトのテキストでの出力形式を使用していますが、この例では JSON ファイルに出力を書き込んで、既存のポリシーを変更した後、設定しています。

        gcloud iam service-accounts get-iam-policy \
    my-sa-123@my-project-123.iam.gserviceaccount.com \
    --format json > policy.json
    

    既存のポリシーがない場合、JSON ファイルの内容は次のようになります。

    {
      "etag": "ACAB"
    }
    

    ポリシーがすでに有効な場合、JSON ファイルの内容は次のようになります。

    {
      "bindings": [
        {
          "members": [
            "user:bob@gmail.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwUqLaVeua8="
    }
    
  2. テキスト エディタを使用して、グループのメンバーとメンバーの役割を定義する bindings 配列に新しいオブジェクトを追加します。bindings 配列がまだ存在しない場合は、それを作成します。serviceAccountUser 役割を alice@gmail.com に付与するには、上記の例を次のように変更します。

    {
        "bindings": [
        {
            "role": "roles/iam.serviceAccountUser",
            "members": [
                "user:alice@gmail.com"
            ]
        },
        {
            "role": "roles/owner",
            "members": [
                "user:bob@gmail.com"
            ]
        }
        ],
        "etag": "BwUqLaVeua8=",
    }
    
  3. 次のコマンドを実行して、ポリシーを更新します。

    gcloud iam service-accounts set-iam-policy \
        my-sa-123@my-project-123.iam.gserviceaccount.com policy.json
    


    コマンドから更新したポリシーが出力されます。

    bindings:
    - members:
      - user:alice1@gmail.com
        role: roles/iam.serviceAccountUser
      - members:
    - bob@gmail.com
      role: roles/owner
      etag: BwUjMhXbSPU=
      version: 1
      


バインドの追加

次のコマンドを実行すると、既存のポリシーにバインドを 1 つ追加できます。

gcloud iam service-accounts add-iam-policy-binding \
    my-sa-123@my-project-123.iam.gserviceaccount.com \
    --member='user:jane@gmail.com' --role='roles/editor'

コマンドから更新したポリシーが出力されます。

bindings: - members: - user:alice@gmail.com role: roles/iam.serviceAccountUser - members: - user:bob@gmail.com role: roles/owner - members: - user:jane@gmail.com role: roles/editor etag: BwUqKjVeua8= version: 1


バインドの削除

次のコマンドを実行すると、既存のポリシーからバインドを 1 つ削除することができます。

gcloud iam service-accounts remove-iam-policy-binding \
    my-sa-123@my-project-123.iam.gserviceaccount.com \
    --member='user:jane@gmail.com' --role='roles/editor'

コマンドから更新したポリシーが出力されます。

bindings: - members: - user:alice@gmail.com role: roles/iam.serviceAccountUser - members: - user:bob@gmail.com role: roles/owner etag: BwUqNkVeua8= version: 1

API

リクエスト:

POST https://iam.googleapis.com/v1/projects/my-project-123/serviceAccounts/my-sa-123@my-project-123.iam.gserviceaccount.com:setIamPolicy

リクエストの本文には、付与するポリシーを含める必要があります。

{
    "policy":
    {
        "etag": "BwUqLaVeua8=",
        "bindings": [
        {
            "role": "roles/iam.serviceAccountUser",
            "members": [
                "user:alice@gmail.com"
            ]
        },
        {
            "role": "roles/owner",
            "members": [
                "user:bob@gmail.com"
            ]
        },
        ]
    },
}

レスポンスには、更新されたポリシーが含まれます。

{
    "etag": "BwUqMqbViM8=",
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@gmail.com"
        ]
    },
    {
        "role": "roles/owner",
        "members": [
        "user:bob@gmail.com"
        ]
    }
    ]
}

Console

  1. GCP Console で [IAM と管理] ページを開きます。

    [IAM と管理] ページを開く

  2. プロジェクトを選択し、[続行] をクリックします。

  3. 左側のナビゲーション メニューで [サービス アカウント] をクリックします。

  4. サービス アカウントを選択して、[権限] をクリックします。サービス アカウントにアクセスできるすべてのユーザーが表示されます。

  5. プロジェクト メンバーのメールアドレスを追加します。

  6. メンバーがサービス アカウントに対して実行できるアクションを定義する役割を選択します。

  7. プロジェクト メンバーに役割を適用するには [追加] をクリックします。

サービス アカウントに関する既存の役割の表示

サービス アカウントの IAM ポリシーを取得するには、serviceAccounts.getIamPolicy() メソッド、GCP Console、または gcloud ツールを使用します。

gcloud

サービス アカウントのポリシーを取得するには、次のコマンドを実行します。

gcloud iam service-accounts get-iam-policy \
    my-sa-123@my-project-123.iam.gserviceaccount.com

次のように、ポリシーが出力されます。

bindings:
- members:
  - user:bob@gmail.com
    role: roles/owner
- members:
  - user:alice@gmail.com
    role: roles/iam.serviceAccountUser
etag: BwUqLaVeua8=
version: 1

役割をサービス アカウントにまだ割り当てていない場合、出力には etag 値だけが表示されます。

etag: ACAB

API

次のコード スニペットでは、サービス アカウント my-sa-123@my-project-123.iam.gserviceaccount.com に対する IAM ポリシーを取得しています。

リクエスト:

POST https://iam.googleapis.com/v1/projects/my-project-123/serviceAccounts/my-sa-123@my-project-123.iam.gserviceaccount.com:getIamPolicy

レスポンス:

{
    "etag": "BwUqLaVeua8=",
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@gmail.com"
        ]
    }
    ]
}

役割をサービス アカウントにまだ割り当てていない場合、レスポンスには 1 つの etag 値だけが含まれます。

{
  "etag": "ACAB"
}

Console

  1. GCP Console で [IAM と管理] ページを開きます。

    [IAM と管理] ページを開く

  2. プロジェクトを選択し、[続行] をクリックします。このページには、すべてのユーザーと、このプロジェクトの役割が一覧表示されます。

  3. 左側のナビゲーション メニューで [サービス アカウント] をクリックします。

  4. サービス アカウントを選択して、[権限] をクリックします。サービス アカウントのすべての役割が表示されます。

IAM ポリシーの詳細については、ポリシーをご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Identity and Access Management のドキュメント