設定 App Engine 服務帳戶

App Engine 應用程式需要服務帳戶才能存取其他 Google Cloud 服務並執行工作。

App Engine 中有兩種服務帳戶,您可以將 Cloud 專案中的任何服務帳戶指派為應用程式層級的預設服務帳戶或個別版本服務帳戶:

  • 應用程式層級的預設服務帳戶:如果您未設定「每個版本的服務帳戶」,這個服務帳戶會用於所有已部署的服務。您可以選擇指派自己建立的服務帳戶,或是使用自動建立的預設服務帳戶,後者是在您初次將服務部署至 Cloud 專案時建立。例如 App Engine 預設服務帳戶 (PROJECT_ID@appspot.gserviceaccount.com)。

  • 每個版本的服務帳戶:服務帳戶會設為已部署服務的特定版本的身分。部署現有或新版本時,您可以指定服務帳戶,讓該帳戶充當該版本的身份。舉例來說,如果某個版本需要的權限與應用程式層級的預設服務帳戶不同,您可以指派該版本專屬的服務帳戶。

查看已設定的服務帳戶

如要查看目前應用程式層級的預設服務帳戶,請執行 gcloud app describe 指令。

如要查看已部署版本使用的服務帳戶,請按照下列步驟操作:

gcloud

執行 gcloud app versions describe 指令:

  gcloud app versions describe VERSION_ID --service=SERVICE_NAME

取代:

  • VERSION_ID 替換為版本 ID。
  • SERVICE_NAME 改為您建立的服務名稱。

控制台

  1. 前往控制台的 App Engine「Versions」分頁。前往「Versions」(版本)
  2. 找出 App Engine 專屬服務帳戶的電子郵件地址。範例:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

指派應用程式層級的預設服務帳戶

根據預設,應用程式層級的預設服務帳戶是自動建立的 PROJECT_ID@appspot.gserviceaccount.com 服務帳戶。您可以使用 Google Cloud CLI、Google Cloud 控制台或 Admin API,指派其他服務帳戶擔任應用程式層級的預設服務帳戶。

在建立應用程式時指定應用程式層級的預設服務帳戶

在初始 App Engine 應用程式建立程序中,您可以選擇指派建立的服務帳戶,或使用自動建立的 PROJECT_ID@appspot.gserviceaccount.com 服務帳戶做為預設帳戶。

如要建立 App Engine 應用程式並指派應用程式層級的預設服務帳戶,您可以使用下列任一方法:

gcloud

執行 gcloud app create 指令:

gcloud app create --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

取代:

  • SERVICE_ACCOUNT_NAME 改為您建立的服務帳戶名稱。
  • PROJECT_ID 與您要指派服務帳戶的 Google Cloud 專案 ID。

控制台

  1. 前往 App Engine 頁面

    前往 App Engine

  2. 建立 Google Cloud 專案。

  3. 在「Create App」區段中,從「Identity and API access」選取服務帳戶。

更新應用程式層級的預設服務帳戶

如要更新應用程式層級的預設服務帳戶,您可以使用下列任一方法指派新的服務帳戶:

gcloud

請執行 gcloud app update 指令。

    gcloud app update --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

取代:

  • SERVICE_ACCOUNT_NAME 改為您建立的服務帳戶名稱。
  • PROJECT_ID 與您要指派服務帳戶的 Google Cloud 專案 ID。

除非您明確指派特定版本的服務帳戶,否則您日後部署的每個新版本都會使用新的應用程式層級預設服務帳戶。

控制台

  1. 前往控制台中的 App Engine「應用程式設定」分頁,然後點選「編輯應用程式設定」

    前往「應用程式設定」

  2. 從「Select a Service account」中選擇應用程式層級的預設服務帳戶,然後按一下「Save」

    系統會將您重新導向至「應用程式設定」分頁,您可以在該分頁中查看已更新的應用程式層級預設服務帳戶電子郵件地址。例如:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    除非您明確指派特定版本的服務帳戶,否則您日後部署的每個新版本都會使用新的應用程式層級預設服務帳戶。

使用特定版本的服務帳戶進行部署

您只能在部署新版本時設定特定版本的服務帳戶。使用特定版本的服務帳戶,可讓您根據應用程式執行的特定工作,為每個應用程式版本授予不同的權限,避免授予不必要的權限。

您必須先擁有現有服務帳戶,才能部署應用程式。您的版本專屬服務帳戶必須位於部署應用程式的專案中。

2024 年 5 月 15 日之後,如果專案先前未使用過 Container Registry,專案中的 gcr.io 網域映像檔就會由 Artifact Registry 託管。Google Cloud 如果您在這個日期之後建立的新專案中部署現有應用程式,服務帳戶可能沒有部署應用程式所需的權限。如要授予必要權限,請參閱「部署至 App Engine」。

設定特定版本的服務帳戶

gcloud

執行 gcloud app deploy 指令:

  gcloud app deploy --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

取代:

  • SERVICE_ACCOUNT_NAME 改為您建立的服務帳戶名稱。
  • PROJECT_ID 與您要指派服務帳戶的 Google Cloud 專案 ID 您的版本專屬服務帳戶必須位於部署應用程式的專案中。

app.yaml

app.yaml 檔案中,新增 service_account 元素來指定服務帳戶:

service_account: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

取代:

  • SERVICE_ACCOUNT_NAME 改為您建立的服務帳戶名稱。
  • PROJECT_ID 與您要指派服務帳戶的 Google Cloud 專案 ID 您的版本專屬服務帳戶必須位於部署應用程式的專案中。

appengine-web.xml

如果您使用 Java 執行階段並納入 App Engine 舊版套裝服務,請在 appengine-web.xml 檔案中加入 <service-account> 元素,藉此指定服務帳戶:

<service-account>SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com</service-account>

取代:

  • SERVICE_ACCOUNT_NAME 改為您建立的服務帳戶名稱。
  • PROJECT_ID 與您要指派服務帳戶的 Google Cloud 專案 ID 相關聯。您的版本專屬服務帳戶必須位於部署應用程式的專案中。

App Engine 預設服務帳戶

使用 App Engine 時,系統會自動建立預設 App Engine 服務帳戶。

根據貴機構的政策設定,系統可能會自動為預設服務帳戶授予專案的編輯者角色。強烈建議您 套用 iam.automaticIamGrantsForDefaultServiceAccounts 機構政策限制,停用自動角色授予功能。如果您是在 2024 年 5 月 3 日之後建立機構,系統預設會強制執行這項限制。

如果您停用自動角色授予功能,就必須決定要將哪些角色授予預設服務帳戶,然後自行授予這些角色

如果預設服務帳戶已具有「編輯者」角色,建議您將「編輯者」角色替換為權限較低的角色。如要安全地修改服務帳戶的角色,請使用政策模擬器查看變更的影響,然後授予及撤銷適當的角色

如要瞭解如何將角色授予服務帳戶和其他主體,請參閱「管理專案、資料夾和組織的存取權」。

2024 年 5 月 15 日之後,如果專案先前未使用過 Container Registry,專案中的 gcr.io 網域映像檔就會由 Artifact Registry 託管。Google Cloud 如果您在這個日期之後建立的新專案中部署現有應用程式,服務帳戶可能沒有部署應用程式所需的權限。如要授予必要權限,請參閱「部署至 App Engine」。

如要修改權限、刪除及還原服務帳戶,請參閱「建立及管理服務帳戶」。