App Engine 應用程式需要服務帳戶才能存取其他 Google Cloud 服務及執行工作。
App Engine 有兩種服務帳戶,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改為您建立的服務名稱。
控制台
- 前往控制台的 App Engine「版本」分頁。 前往「版本」
- 找出 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。
控制台
前往 App Engine 頁面
建立 Google Cloud 專案。
在「建立應用程式」部分,從「身分及 API 存取權」選取服務帳戶。
更新應用程式的應用程式層級預設服務帳戶
如要更新應用程式的應用程式層級預設服務帳戶,請使用下列其中一種方式指派新服務帳戶:
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。
除非您明確指派版本專屬的服務帳戶,否則之後部署的每個新版本都會使用新的應用程式層級預設服務帳戶。
控制台
前往主控台的 App Engine「應用程式設定」分頁,然後點選「編輯應用程式設定」。
從「選取服務帳戶」選擇應用程式層級的預設服務帳戶,然後按一下「儲存」。
系統會將您重新導向至「應用程式設定」分頁,您可以在這裡查看更新後應用程式層級預設服務帳戶的電子郵件地址。例如:
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 日後建立,系統預設會強制執行這項限制。
停用自動角色授予功能後,您必須決定要將哪些角色授予預設服務帳戶,然後自行授予這些角色。
如果預設服務帳戶已具備「編輯者」角色,建議您將「編輯者」角色替換為權限較少的角色。如要安全修改服務帳戶的角色,請使用 Policy Simulator 查看變更會造成的影響,然後授予及撤銷適當的角色。
如要瞭解如何將角色授予服務帳戶和其他主體,請參閱「管理專案、資料夾和機構的存取權」。
2024 年 5 月 15 日之後,如果專案先前未使用過 Container Registry,專案中的 gcr.io 網域映像檔就會託管於 Artifact Registry。Google Cloud 如果您在上述日期後建立的新專案中部署現有應用程式,服務帳戶可能沒有部署應用程式的必要權限。如要授予必要權限,請參閱「部署至 App Engine」。
如要修改權限、刪除及還原服務帳戶,請參閱「建立及管理服務帳戶」。