本頁提供有關確保佇列建立和設定安全的建議。其中的關鍵,在於僅允許少數人員或實體使用佇列管理方法。如果是大型機構,則可能需要使用服務帳戶來執行軟體,強制實行適當的佇列設定。
通常的做法是將使用者和其他實體分為三個類別:
- 佇列管理員:這個群組中的使用者有權呼叫 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