サービス アカウントにロールを付与する

デベロッパーがアプリケーションをプレビューしてデプロイするときに、既存のサービス アカウントを使用するか、App Design Center で新しいサービス アカウントを自動的に作成できます。デベロッパーにサービス アカウントを使用させる場合は、次の操作を行う必要があります。

  • サービス アカウントとユーザー アカウントに IAM ポリシー バインディングを追加します。
  • 各リソースのデプロイに必要なロールをサービス アカウントに付与します。
  • サービス アカウントが作成されたプロジェクトの外部にデプロイする権限をサービス アカウントに追加します。
  • 組織のポリシーを更新して、サービス アカウントをプロジェクト間で使用できるようにします。

サービス アカウントを構成するには、次の操作を行います。

  1. サービス アカウントに、サービス エージェントの roles/iam.serviceAccountUser ロールの IAM ポリシー バインディングを追加します。

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
        --member="serviceAccount:service-SERVICE_ACCOUNT_PROJECT_NUMBER@gcp-sa-designcenter.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountUser"
    

    次のように置き換えます。

    • SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス。例: my-service-account@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
    • SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントを含むプロジェクトのプロジェクト ID。
    • SERVICE_ACCOUNT_PROJECT_NUMBER: サービス アカウントを含むプロジェクトのプロジェクト番号。
  2. ユーザーの roles/iam.serviceAccountUser ロールの IAM ポリシー バインディングをサービス アカウントに追加します。

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
        --member="user:USER_EMAIL" \
        --role="roles/iam.serviceAccountUser"
    

    次のように置き換えます。

    • SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス。例: my-service-account@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
    • USER_EMAIL: デプロイを実行するユーザーのユーザー メール。
  3. サービス アカウントがあるプロジェクトで、スペースを含む管理プロジェクトに必要なサービス エージェント ロールの IAM ポリシー バインディングを追加します。

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:service-MANAGEMENT_PROJECT_NUMBER@gcp-sa-designcenter.iam.gserviceaccount.com" \
        --role="roles/apphub.editor"
    
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:service-MANAGEMENT_PROJECT_NUMBER@gcp-sa-designcenter.iam.gserviceaccount.com" \
        --role="roles/config.agent"
    
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:service-MANAGEMENT_PROJECT_NUMBER@gcp-sa-designcenter.iam.gserviceaccount.com" \
        --role="roles/serviceusage.serviceUsageAdmin"
    

    次のように置き換えます。

    • SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントを含むプロジェクトのプロジェクト ID。
    • MANAGEMENT_PROJECT_NUMBER: スペースを含む管理プロジェクトのプロジェクト番号。
  4. サービス アカウントがあるプロジェクトで、iam.disableCrossProjectServiceAccountUsage 組織のポリシー制約が適用されていないことを確認します。この制約はデフォルトで適用されます。

    組織のポリシーの制約の適用を無効にするには、次のコマンドを実行します。

    gcloud resource-manager org-policies disable-enforce \
       iam.disableCrossProjectServiceAccountUsage \
       --project=SERVICE_ACCOUNT_PROJECT_ID
    

    次のように置き換えます。

    • SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントを含むプロジェクトのプロジェクト ID。
  5. プロジェクトにリソースをデプロイするために必要なロールをサービス アカウントに付与します。必要なロールは、デベロッパーがアプリケーションをデプロイするときに表示されます。

    たとえば、roles/run.admin ロールを付与するには、次のポリシー バインディングを追加します。

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:service-DEPLOYMENT_PROJECT_NUMBER@gcp-sa-designcenter.iam.gserviceaccount.com" \
        --role="roles/run.admin"
    

    次のように置き換えます。

    • SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントを含むプロジェクトのプロジェクト ID。
    • DEPLOYMENT_PROJECT_NUMBER: リソースをデプロイするプロジェクトのプロジェクト番号。
  6. App Design Center は、Infrastructure Manager を使用してコンソールにアプリケーションをデプロイします。独自のサービス アカウントを使用して Infrastructure Manager でデプロイするには、プロジェクトへのアクセス権を付与するの手順を完了します。

  7. デプロイするアプリケーションに、Developer Connect 接続を介してインポートしたプライベート コンポーネントが含まれている場合は、次の操作を行います。

    サービス アカウントを作成したプロジェクトで、サービス アカウントに roles/iam.serviceAccountTokenCreator ロールを付与します。

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    次のように置き換えます。

    • SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントを含むプロジェクトのプロジェクト ID。
    • SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス。例: my-service-account@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

次のステップ