HTTP ターゲットでの認証の使用

適切な認証情報を持つサービス アカウントを設定すると、認証が必要な HTTP ターゲットを Cloud Scheduler から呼び出すことができます。

サービス アカウントの設定

  1. Cloud Scheduler から HTTP ターゲットを呼び出す際に使用する既存のサービス アカウントを特定するか、この目的のためにサービス アカウントを新規作成します。これはクライアント サービス アカウントです。

  2. ターゲットが Google Cloud の一部である場合は、必要なIAM ロールを付与してクライアントサービスアカウントを更新します。Google Cloud 内の各サービスには異なるロールが必要です。 たとえば、Cloud Run の場合、Cloud Run Invokerのロールなどを追加する必要があります。

  3. Cloud Scheduler 自体には、Cloud Scheduler Service Agentのロールが付与された独自のサービスアカウントが必要です。これにより、Cloud Scheduler では、クライアント サービス アカウントに代わって、ターゲットに認証されるためのヘッダー トークンを生成できます。このロールが付与された Cloud Scheduler のサービス アカウントは、Cloud Scheduler API を有効にすると自動的に設定されます。ただし、2019 年 3 月 19 日より前にこの API を有効にしていた場合は、この役割を手動で追加する必要があります。

認証を使用するスケジューラ ジョブの作成

認証を使用するジョブを作成するには、create-jobリクエストに 2 つの情報を追加する必要があります。

  • 使用するトークンタイプ
  • クライアント サービス アカウントを識別するメールアドレス

    コンソールの使用

    1. 頻度を指定します。
    2. ターゲット タイプとして HTTP を指定します。
    3. URL とメソッドを追加します。
    4. Auth headerプルダウンからトークンタイプを選択します。一般には OIDC が使用されます。ただし、*.googleapis.com でホストされている Google API は例外で、OAuth トークンが使用されます。
    5. Service accountテキストボックスにクライアントサービスアカウントのメールアドレスを追加します。

    画像

    gcloud の使用

    構文:

     gcloud scheduler jobs create http ${JOB_ID} --schedule="every 10 mins" --uri=${URI} --oidc-service-account-email=${CLIENT_SERVICE_ACCOUNT_EMAIL}
    

    ここで

    1. ${JOB_ID}はジョブの名前です。これはプロジェクト内で一意でなければなりません。 ジョブを削除しても、プロジェクトでそのジョブ名を再利用できないことに注意してください。
    2. スケジュール(頻度、ジョブ間隔とも呼ばれます)はジョブを実行する頻度です(例: "every 3 hours")。 ここで指定する文字列には、crontab 互換の任意の文字列を使用できます。 また、従来の App Engine cron に慣れているデベロッパーは、App Engine Cron 構文も使用できます。
    3. ${URI}は、エンドポイントの完全修飾 URL です。
    4. --oidc-service-account-emailまたは--oauth-service-account-emailは、トークンタイプを定義します。一般には OIDC が使用されます。ただし、*.googleapis.com でホストされている Google API は例外で、OAuth トークンが使用されます。
    5. ${CLIENT_SERVICE_ACCOUNT_EMAIL}は、クライアントサービスアカウントのメールアドレスです。
    6. gcloud コマンドライン リファレンスで説明されている他のオプション パラメータも使用できます。

トークンタイプの選択

Cloud Scheduler と HTTP ターゲットの間で認証を行うため、Cloud Scheduler はメールで指定されたクライアント サービス アカウントに基づくヘッダー トークンを作成し、HTTPS を介してターゲットに送信します。 OIDC トークンか OAuth トークンを使用できます。 一般には OIDC が使用されます。ただし、*.googleapis.com でホストされている Google API は例外で、OAuth トークンが使用されます。

Cloud Scheduler サービス エージェントの役割を Cloud Scheduler サービス アカウントに手動で追加する

この操作は、Cloud Scheduler API を 2019 年 3 月 19 日より前に有効にした場合のみ必要になります。

コンソールの使用

  1. プロジェクトのプロジェクト番号は、Google Cloud プロジェクトの設定ページで確認できます。
  2. その番号をコピーします。
  3. IAM 管理コンソール ページを開きます。
  4. [Add] をクリックします。[Add members] 画面が開きます。
  5. [新しいメンバー] ボックスに、次の形式のメールアドレスを追加します。

    service-[project-number]@gcp-sa-cloudscheduler.iam.gserviceaccount.com
    

    [project-number] は上記でコピーしたプロジェクト番号に置き換えます。

  6. [Select a role] プルダウンから [Service Management] -> [Cloud Scheduler Service Agent] を選択します。

  7. [Save] をクリックします。

gcloud の使用

  1. プロジェクト番号を確認します。

    gcloud projects describe [project-id] --format='table(projectNumber)'
    

    [project-id] は実際のプロジェクト ID に置き換えます。

  2. その番号をコピーします。

  3. コピーしたプロジェクト番号を使用して、Cloud Scheduler サービス アカウントに Cloud Scheduler Service Agent のロールを付与します。

    gcloud projects add-iam-policy-binding [project-id] --member serviceAccount:service-[project-number]@gcp-sa-cloudscheduler.iam.gserviceaccount.com --role roles/cloudscheduler.serviceAgent
    

    [project-id] は実際のプロジェクト ID に、[project-number] は上記のプロジェクト番号に置き換えます。