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

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. サービス アカウントに役割を適用するには、[追加] または [保存] をクリックします。

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

ID ではなくリソースとして扱うことによって、特定のユーザーが所有権を持ち、サービス アカウントとその設定にアクセスできるようにすることができます。このセクションの手順では、サービス アカウントをリソースとして扱います。使用タイプごとの違いの詳細については、サービス アカウント トピックをご覧ください。

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

サービス アカウントにユーザー権限を付与する方法は以下のとおりです。

gcloud

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

  1. 変更するポリシーを取得して、JSON ファイルに書き込みます。--format フラグを使用すると、出力形式を選択できます(選択できる出力形式は JSON、YAML、テキストです)。このページの他の例では、デフォルトのテキストでの出力形式を使用していますが、この例では JSON ファイル(policy.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 をテンプレートとして手動でポリシーを作成します。

    ポリシーがすでに有効になっている場合、出力される policy.json ファイルの内容は次のようになります。

    {
      "bindings": [
        {
          "members": [
            "user:bob@gmail.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwUqLaVeua8="
    }
    
  2. テキスト エディタで policy.json ファイルを変更し、グループ メンバーとその役割を定義する 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
      


単一のバインディングの追加:

次のコマンドを実行して、新しいポリシーまたは既存のポリシーに単一のバインディングを追加できます。

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 のドキュメント