使用使用者代管的服務帳戶設定記錄接收來源

本頁面說明如何建立以使用者管理服務帳戶設定的接收器,藉此轉送記錄項目。根據預設,Logging 會針對資源中的所有接收器使用 Logging 服務帳戶。不過,如果記錄匯入端位於不同專案,您可以建立及管理自己的使用者管理服務帳戶,這樣就能從包含使用者管理服務帳戶的專案中,集中管理 Identity and Access Management 權限。

只有在接收目的地為記錄資料集或 Google Cloud 專案時,才能建立使用使用者管理的服務帳戶的接收器。本文件的範例說明如何設定使用者代管的服務帳戶,並將記錄值區做為目的地。

事前準備

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 請確認您有使用者代管的服務帳戶,然後將下列變數設為使用者代管的服務帳戶的適當值:

    • CUSTOM_SA_PROJECT_ID:包含使用者管理服務帳戶的專案專案 ID。

    • CUSTOM_SA:使用者自行管理的服務帳戶電子郵件地址。

    如要瞭解如何建立服務帳戶,請參閱「建立服務帳戶」。

  3. 請確認您有可做為記錄匯入目的地的記錄值區,然後將下列變數設為適合記錄值區的值。如有必要,請建立記錄檔值區

    • LOG_BUCKET_PROJECT_ID:包含記錄值區的專案 ID。

    • LOCATION:記錄值區的位置。

    • BUCKET_NAME:記錄值區的名稱。

  4. 請找出您打算建立記錄匯出目的地的專案中,所含的「Logging」服務帳戶名稱,然後將下列變數設為適當的值:

    • SINK_PROJECT_ID:您打算建立記錄匯流程的專案 ID。

    • LOGGING_SA:預設記錄服務帳戶的電子郵件地址。如要取得這個位址,請執行下列指令:

      gcloud logging settings describe --project=SINK_PROJECT_ID
      

      在回應中,以 loggingServiceAccountId 開頭的行會列出服務帳戶的電子郵件地址。

  5. 在包含使用者自管服務帳戶的專案中,請確認系統不會強制執行機構政策布林限制 iam.disableCrossProjectServiceAccountUsage。根據預設,系統會強制執行這項限制。如要停用這項限制,以便將服務帳戶附加至其他專案中的資源,請執行下列指令:

    gcloud resource-manager org-policies disable-enforce \
    iam.disableCrossProjectServiceAccountUsage \
    --project=CUSTOM_SA_PROJECT_ID
    

    如要進一步瞭解如何跨專案啟用服務帳戶,請參閱「啟用服務帳戶,以便跨專案附加」。

  6. 授予 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 服務帳戶會出現在您要建立使用者管理服務帳戶的記錄匯流程的 Google 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 中的記錄值區。Logging 服務帳戶具備轉送記錄項目的權限。

    如要進一步瞭解服務帳戶憑證建立者角色,請參閱「服務帳戶憑證建立者角色」。

    如要進一步瞭解服務帳戶模擬功能,請參閱「關於服務帳戶模擬功能」。

    讓主體以使用者管理的服務帳戶執行作業

    請將所需權限授予將建立匯流程的使用者,讓他們以使用者管理的服務帳戶身分執行作業。

    如要授予必要權限,請在儲存使用者管理服務帳戶 CUSTOM_SA_PROJECT_ID 的 Google Cloud 專案中,將「服務帳戶使用者」角色 (roles/iam.serviceAccountUser) 授予實體。

    執行下列指令前,請先進行下列替換:

    • PRINCIPAL:您要授予角色的主體 ID。主體 ID 通常採用以下格式:PRINCIPAL-TYPE:ID。例如:user:my-user@example.com。如需 PRINCIPAL 可用的完整格式清單,請參閱「主要識別碼」。

    執行 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 選項。

    執行下列指令前,請先進行下列替換:

    • SINK_NAME:記錄接收器的名稱。

    執行 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 寫入及讀取記錄項目,驗證匯流排是否正確地轉送記錄項目。

    如要確認接收器是否正確轉送記錄項目,請按照下列步驟操作:

    1. 執行 gcloud logging write 指令:

      執行下列指令前,請先進行以下替換:

      • LOG_NAME:記錄的名稱。例如,您可以將這個欄位設為 mylog

      執行 gcloud logging write 指令:

      gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
      

      先前的命令會傳回以下訊息:Created log entry.

    2. 如要讀取剛才寫入的記錄項目,請執行下列指令:

      gcloud logging read 'textPayload="Test log entry"' \
      --bucket=BUCKET_NAME --location=LOCATION \
      --view=_AllLogs --project=SINK_PROJECT_ID
      

    後續步驟