本頁面說明如何建立以使用者管理服務帳戶設定的接收器,藉此傳送記錄檔項目。根據預設,記錄功能會為資源中的所有接收器使用記錄服務帳戶。不過,如果記錄接收器位於不同專案中,您可以建立及管理自己的使用者管理服務帳戶,集中管理含有使用者管理服務帳戶的專案中的 Identity and Access Management 權限。
只有在接收器目的地為記錄檔儲存區或 Trusted Cloud 專案時,您才能建立使用使用者管理的服務帳戶的接收器。本文中的範例說明如何設定接收器,該接收器使用使用者代管的服務帳戶,且目的地為記錄值區。
事前準備
-
安裝 Google Cloud CLI,然後 使用同盟身分登入 gcloud CLI。 登入後,執行下列指令初始化 Google Cloud CLI:
gcloud init
確認您有使用者管理的服務帳戶,然後將下列變數設為使用者管理服務帳戶的適當值:
CUSTOM_SA_PROJECT_ID: 含有使用者管理服務帳戶的專案 ID。
CUSTOM_SA:使用者自行管理的服務帳戶電子郵件地址。
如要瞭解如何建立服務帳戶,請參閱「建立服務帳戶」。
請確認您有可做為記錄接收器目的地的記錄值區,然後將下列變數設為適合記錄值區的值。如有需要,請建立記錄檔值區:
LOG_BUCKET_PROJECT_ID: 包含記錄值區的專案 ID。
LOCATION:記錄值區的位置。
BUCKET_NAME:記錄值區的名稱。
找出您打算建立記錄接收器的專案中,現有的 Logging 服務帳戶名稱,然後將下列變數設為適當的值:
SINK_PROJECT_ID: 您打算建立記錄接收器的專案 ID。
LOGGING_SA:預設記錄服務帳戶的電子郵件地址。如要取得這個位址,請執行下列指令:
gcloud logging settings describe --project=SINK_PROJECT_ID
在回應中,以
loggingServiceAccountId
開頭的行會列出服務帳戶的電子郵件地址。
在包含使用者自管服務帳戶的專案中,請確保系統不會強制執行機構政策布林限制
iam.disableCrossProjectServiceAccountUsage
。根據預設,系統會強制執行這項限制。如要停用這項限制,以便將服務帳戶附加至其他專案中的資源,請執行下列指令:gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=CUSTOM_SA_PROJECT_ID
如要進一步瞭解如何啟用跨專案的服務帳戶,請參閱啟用跨專案附加服務帳戶的功能。
- PRINCIPAL:要授予角色的主體 ID。主體 ID 通常採用以下格式:
PRINCIPAL-TYPE:ID
。 例如:principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com
。如需PRINCIPAL
可採用的完整格式清單,請參閱「主要 ID」。 - SINK_NAME:記錄接收器的名稱。
執行
gcloud logging write
指令:執行下列指令前,請先進行下列替換作業:
- LOG_NAME:記錄的名稱。舉例來說,您可以將這個欄位設為
mylog
。
執行
gcloud logging write
指令:gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
先前的指令會傳回以下訊息:
Created log entry.
- LOG_NAME:記錄的名稱。舉例來說,您可以將這個欄位設為
如要讀取您剛才寫入的記錄項目,請執行下列指令:
gcloud logging read 'textPayload="Test log entry"' \ --bucket=BUCKET_NAME --location=LOCATION \ --view=_AllLogs --project=SINK_PROJECT_ID
如要瞭解如何將記錄項目轉送至支援的目的地,請參閱「將記錄檔轉送至支援的目的地」。
如要瞭解 Logging 如何轉送及儲存記錄項目,請參閱「轉送和儲存空間總覽」。
如果使用接收器將記錄項目傳送至其他目的地時發生問題,請參閱排解記錄檔傳送問題。
如要瞭解如何在目的地中查看記錄項目,以及記錄項目的格式和組織方式,請參閱在接收器目的地中查看記錄。
授予 IAM 角色
本節說明建立使用使用者管理服務帳戶的接收器時,必須符合哪些必要條件。
允許使用者代管的服務帳戶將記錄項目寫入接收器目的地
授予使用者管理的服務帳戶所需權限,以便將記錄檔項目寫入您在後續步驟中建立的接收器目的地。接收器的目的地是儲存在名為「LOG_BUCKET_PROJECT_ID」專案中的記錄儲存區。
如要將必要權限授予使用者管理的服務帳戶,請在含有記錄值區的專案中,授予該服務帳戶「記錄值區寫入者」角色 (roles/logging.bucketWriter
):
gcloud projects add-iam-policy-binding LOG_BUCKET_PROJECT_ID \
--member='serviceAccount:CUSTOM_SA' \
--role='roles/logging.bucketWriter'
如要進一步瞭解上述指令,請參閱 gcloud projects add-iam-policy-binding
。
設定服務帳戶模擬
設定預設的 Cloud Logging 服務帳戶 LOGGING_SA,以便模擬使用者管理的服務帳戶 CUSTOM_SA。預設的 Cloud Logging 服務帳戶位於 Trusted Cloud 專案中,您要建立的記錄接收器會使用使用者管理的服務帳戶。
如要設定服務帳戶模擬,請在使用者管理的服務帳戶中,將服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator
) 授予 Cloud Logging 服務帳戶:
gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='serviceAccount:LOGGING_SA' \
--role='roles/iam.serviceAccountTokenCreator'
服務帳戶模擬功能涉及兩個主體:缺少資源存取權的服務帳戶,以及具備資源存取權的服務帳戶。在本例中,使用者管理的服務帳戶是具有權限的帳戶,因為該帳戶可將記錄項目寫入接收器目的地,也就是名為 LOG_BUCKET_PROJECT_ID 的專案中的記錄 bucket。Logging 服務帳戶具備轉送記錄項目的權限。
如要進一步瞭解服務帳戶憑證建立者角色,請參閱服務帳戶憑證建立者角色。
如要進一步瞭解服務帳戶模擬功能,請參閱「關於服務帳戶模擬功能」。
允許主體以使用者管理的服務帳戶執行作業
授予要建立接收器的主體所需權限,讓他們以使用者管理的服務帳戶身分執行作業。
如要授予必要權限,請在 Trusted Cloud 儲存使用者管理服務帳戶的專案CUSTOM_SA_PROJECT_ID中,將「服務帳戶使用者」角色 (roles/iam.serviceAccountUser
) 授予主體。
執行下列指令前,請先進行下列替換作業:
執行 gcloud iam service-accounts add-iam-policy-binding
指令:
gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='PRINCIPAL' \
--role='roles/iam.serviceAccountUser'
如果您使用自訂角色,主體就需要 iam.serviceAccounts.actAs
權限。
如要進一步瞭解服務帳戶使用者角色,請參閱服務帳戶使用者角色。
建立使用使用者代管服務帳戶的記錄接收器
如要使用使用者管理的服務帳戶建立接收器,請執行 gcloud logging sinks create
指令,並加入 --custom-writer-identity
選項。
執行下列指令前,請先進行下列替換作業:
執行 gcloud logging sinks create
指令:
gcloud logging sinks create SINK_NAME \
logging.googleapis.com/projects/LOG_BUCKET_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
--custom-writer-identity=serviceAccount:CUSTOM_SA \
--project=SINK_PROJECT_ID
確認接收器是否會將記錄項目傳送至目的地
在本節中,您將使用 gcloud CLI 寫入及讀取記錄項目,驗證接收器是否正確地將記錄項目傳送至目的地。
如要確認接收器是否正確地將記錄項目傳送至目的地,請按照下列步驟操作: