本頁提供有關確保佇列建立和設定安全的建議。其中的關鍵,在於僅允許少數人員或實體使用佇列管理方法。如果是大型機構,則可能需要使用服務帳戶來執行軟體,強制實行適當的佇列設定。
通常的做法是將使用者和其他實體分為三個類別:
- 佇列管理員:這個群組中的使用者有權呼叫 Cloud Tasks 佇列管理方法,或上傳
queue.yaml
檔案。這個群組僅限少數使用者,目的是為了降低覆寫佇列設定的風險,尤其是無意間混用queue.yaml
和 Cloud Tasks 佇列管理方法時。 - Cloud Tasks 工作人員:這個群組中的使用者有權執行與 Cloud Tasks 的常見互動,例如將工作加入佇列及從佇列中移除工作。不得呼叫 Cloud Tasks 佇列管理方法。
- App Engine 部署者:如果專案有 App Engine 應用程式,這個群組中的使用者有權部署應用程式,但不得上傳
queue.yaml
檔案或發出任何 Cloud Tasks API 呼叫,因此佇列管理員可以強制執行適當的政策。
在這樣的架構中,身為佇列管理員的使用者就不應兼任 Cloud Tasks 工作者的身分,因為這樣就失去分類的意義。
如果專案只使用 Cloud Tasks 佇列管理方法,佇列管理員可能也不該是 App Engine 部署者,因為這樣一來,他們就能上傳錯誤的 queue.yaml
檔案。
小型專案和機構
小型專案和機構可以將 Identity and Access Management (IAM) 角色直接指派給使用者,將他們加入上述群組。對於想要確保設定簡單易懂的團隊,或需要手動進行佇列設定變更或 App Engine 應用程式部署的團隊,這是相當合理的做法。
將使用者新增到下列群組:
佇列管理員
專案管理員可將
cloudtasks.queueAdmin
角色授予允許呼叫 Cloud Tasks 佇列管理 API 或上傳queue.yaml
檔案的使用者。gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/cloudtasks.queueAdmin
更改下列內容:
PROJECT_ID
:您的專案 IDEMAIL
:成員使用者的電子郵件地址
以具有
cloudtasks.queueAdmin
角色的使用者,依照上述最佳做法操作,選擇下列其中一種方法來變更佇列設定。使用 Cloud Tasks API 變更佇列設定。
上傳
queue.yaml
(使用gcloud
):gcloud app deploy queue.yaml
Cloud Tasks 工作者
由於通常允許多位使用者與 Cloud Tasks 互動,因此您可以將角色指派給服務帳戶,而非個別使用者。這是實際工作環境的常見做法。詳情請參閱「大型專案和機構」。
以專案管理員身分授予角色給使用者,讓他們能夠與 Cloud Tasks 互動,但無法變更佇列設定:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.enqueuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.dequeuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskRunner gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskDeleter
將
PROJECT_ID
替換為專案 ID。
如果您具備上述一或多個角色,即可與 Cloud Tasks API 互動。
App Engine 部署者
以專案管理員身分授予角色給使用者,讓他們能夠部署 App Engine 應用程式,但無法修改佇列設定或與工作互動:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/appengine.deployer gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/appengine.serviceAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/storage.admin
更改下列內容:
PROJECT_ID
:您的專案 IDEMAIL
:成員使用者的電子郵件地址
以具有上述授予角色的使用者,部署 App Engine 應用程式。
gcloud app deploy app.yaml
大型專案和機構
大型專案和機構可利用服務帳戶來劃分職務與職責。如果團隊的基礎架構複雜,需要變更佇列設定,或許還需要部署 App Engine 應用程式,這種做法就相當實用。
為遵循最低權限原則並簡化存取權管理,這些操作說明會使用服務帳戶模擬功能。如要進一步瞭解這個模式,請參閱 Google Cloud 驗證說明文件中的「使用服務帳戶模擬功能」。
設定這些服務帳戶的操作說明如下。
佇列管理員
以專案管理員身分建立服務帳戶。
gcloud iam service-accounts create queue-admin \ --display-name "Queue Admin"
將
cloudtasks.queueAdmin
角色授予服務帳戶,以便上傳queue.yaml
檔案及呼叫 Cloud Tasks 佇列管理 API。gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:queue-admin@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.queueAdmin
將
PROJECT_ID
替換為專案 ID。選擇性允許模擬您建立的「Queue Admin」服務帳戶。
這通常是一小群校長,他們會擔任佇列管理員。在您建立的「Queue Admin」服務帳戶中,授予這些主體「
iam.serviceAccountTokenCreator
」角色。如要瞭解如何授予或撤銷單一角色,請參閱 IAM 說明文件中的授予或撤銷單一角色。依照「使用佇列管理或 queue.yaml」一文所述的最佳做法,選擇下列其中一種方法來變更佇列設定:
使用 Cloud Tasks 變更佇列設定。
使用 gcloud CLI 上傳
queue.yaml
Cloud Tasks 工作者
以專案管理員身分建立服務帳戶。
gcloud iam service-accounts create cloud-tasks-worker \ --display-name "Cloud Tasks Worker"
為服務帳戶授予角色,讓服務帳戶能夠與 Cloud Tasks 互動,但無法變更佇列設定。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.enqueuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.dequeuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskRunner gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskDeleter
將
PROJECT_ID
替換為專案 ID。選擇性地允許模擬您建立的「Cloud Tasks Worker」服務帳戶。
如要讓主體與 Cloud Tasks 互動,請在您建立的「Cloud Tasks Worker」服務帳戶中,授予
iam.serviceAccountTokenCreator
角色。如要瞭解如何授予或撤銷單一角色,請參閱 IAM 說明文件中的授予或撤銷單一角色。
App Engine 部署者
以專案管理員身分建立服務帳戶。
gcloud iam service-accounts create app-engine-deployer \ --display-name "App Engine Deployer"
將角色授予服務帳戶,讓該帳戶可以部署 App Engine 應用程式,但無法使用
queue.yaml
。gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/appengine.deployer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/appengine.serviceAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/storage.admin
將
PROJECT_ID
替換為專案 ID。選擇性允許模擬您建立的「App Engine 部署者」服務帳戶。
對於部署 App Engine 服務的主體,請在您建立的「App Engine 部署者」服務帳戶中,授予
iam.serviceAccountTokenCreator
角色。如要瞭解如何授予或撤銷單一角色,請參閱 IAM 說明文件中的授予或撤銷單一角色。
限制單一佇列的存取權
如果專案中有多個佇列,且您想限制個別佇列的存取權,可以使用佇列層級的 IAM 政策,而非專案層級。如要依佇列限制存取權,請使用 gcloud tasks queues add-iam-policy-binding
指令。例如:
gcloud tasks queues add-iam-policy-binding QUEUE_NAME --location=LOCATION \ --member=serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
更改下列內容:
QUEUE_NAME
:佇列名稱LOCATION
:佇列的位置PROJECT_ID
:您的專案 ID