HTTP ターゲットで認証を使用する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

サービス アカウントを設定する

  1. HTTP ターゲットで Cloud Scheduler ジョブに使用するサービス アカウントがまだない場合は、新しいサービス アカウントを作成します。次の点にご注意ください。

    • サービス アカウントは、Cloud Scheduler ジョブが作成されるプロジェクトに属している必要があります。

    • デフォルトの Cloud Scheduler サービス アカウント(service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com)は使用しないでください。この Google 管理のサービス アカウント(サービス エージェントとも呼ばれます)は、この目的で使用できません。

    • プロジェクトまたはその Cloud Scheduler Service Agent (roles/cloudscheduler.serviceAgent) ロールから、デフォルトの Cloud Scheduler サービス アカウントを削除しないでください。その場合、ジョブのサービス アカウントに適切なロールがあっても、認証が必要なエンドポイントに 403 レスポンスが返されます。

  2. ターゲットが Google Cloud 内にある場合は、必要な IAM ロールをサービス アカウントに付与します。Google Cloud 内の各サービスには特定のロールが必要で、受信側のサービスは生成されたトークンを自動的に検証します。たとえば、Cloud Run と第 2 世代の Cloud Functions 関数では、Cloud Run Invoker ロールを追加する必要があります。

    ユーザーが管理するサービス アカウントでリソースをデプロイするには、デプロイ担当者がそのサービス アカウントに対する iam.serviceAccounts.actAs 権限を持っている必要があります。サービス アカウントを作成した場合は、この権限が自動的に付与されます。そうでない場合は、正しい権限を持つユーザーがサービス アカウントに対するこの権限を付与する必要があります。

    おすすめの方法: 前の手順で、Cloud Scheduler ジョブが対象とするサービスの呼び出しに特化したサービス アカウントを作成した場合は、そのアカウントとターゲット サービスに対する呼び出し元権限をバインディングすることによる次の最小権限の原則(セキュリティに関するベスト プラクティス)を考慮してください。これを行うには、Google Cloud コンソールまたは gcloud CLI を使用します。

    コンソール

    1. Google Cloud コンソールを開きます。

    コンソールへ移動

    2. プロジェクトを選択します。

    3. 呼び出すリソースタイプのページに移動します。たとえば、Cloud Run サービスを呼び出す場合は、Cloud Run サービスを一覧表示するページに移動します。

    4. 呼び出すサービスの左側にあるチェックボックスをオンにします。(サービス自体はクリックしないでください)。

    5. [権限] タブをクリックします。 情報ペインが表示されていない場合は、[情報パネルを表示] をクリックしてから [権限] をクリックします。

    6. [プリンシパルを追加] をクリックします。

    7. [プリンシパルを追加] に、作成したサービス アカウントのメールアドレスを入力します。

    8. [ロールを割り当てる] で、プルダウン リストから付与するロールを選択します。最小権限の原則に従って、プリンシパルが必要とする権限のみを含むロールを選択します。

    9. [保存] をクリックします。

    gcloud

    add-iam-policy-binding コマンドを実行します。

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
    --member=PRINCIPAL --role=ROLE
    

    次のように置き換えます。

    • RESOURCE_TYPE: ターゲットのリソースタイプ。たとえば、Cloud Run ターゲットの場合は run です。
    • RESOURCE_ID: ターゲットの識別子。たとえば、Cloud Run ターゲットのサービス名です。
    • PRINCIPAL: サービス アカウントの識別子。形式は serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS です。例: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
    • ROLE: ターゲット サービスの呼び出しに必要なロールの名前。たとえば、Cloud Run や第 2 世代の Cloud Functions ターゲットの場合は roles/run.invoker です。

    例:

    • Cloud Run のターゲット: 次のコマンドは、Cloud Run 起動元ロールを、Cloud Run サービス my-service 用のサービス アカウント my-service-account@my-project.iam.gserviceaccount.com に付与します。

      gcloud run add-iam-policy-binding my-service \
      --member=my-service-account@my-project.iam.gserviceaccount.com \
      --role=roles/run.invoker
      
    • Cloud Functions のターゲット: 次のコマンドは、第 2 世代の Cloud Functions の関数で必要な Cloud Run 起動元ロールを、第 2 世代の Cloud Functions の関数 my-gen2-function 用のサービス アカウント my-service-account@my-project.iam.gserviceaccount.com に付与します。

      gcloud functions add-iam-policy-binding my-gen2-function \
      --member=my-service-account@my-project.iam.gserviceaccount.com \
      --role=roles/run.invoker --gen2
      
  3. ターゲットが Google Cloud の外部にある場合、受信サービスはトークンを手動で確認する必要があります。

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

    デフォルトの Cloud Scheduler サービス アカウントがプロジェクトで設定され、Cloud Scheduler Service Agent ロールが付与されていることを確認するには、プロジェクトの現在のアクセス権を表示します。Google Cloud コンソールを使用してプロジェクトのアクセス権を表示する場合、[Google 提供のロール付与を含みます] チェックボックスを必ずオンにしてください。

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

認証を使用するジョブを作成するには、トークンタイプと、クライアント サービス アカウントを識別するメールアドレスを create-job リクエストに追加する必要があります。

コンソール

  1. 頻度を指定します。
  2. ターゲット タイプとして HTTP を指定します。
  3. URL と HTTP メソッドを追加します。
  4. [Auth ヘッダー] リストで、トークンタイプを選択します。一般には OIDC が使用されます。ただし、*.googleapis.com でホストされている Google API は例外で、OAuth(アクセス)トークンが使用されます。
  5. [サービス アカウント] で、クライアント サービス アカウントのメールアドレスを指定します。
  6. [オーディエンス] はオプションで、OIDC トークンの受信者を制限します。通常は、ジョブのターゲット URL です(URL パラメータなし)。指定しないと、デフォルトで(リクエスト パラメータを含む)URL 全体がオーディエンスとして使用されます。

gcloud

gcloud scheduler jobs create http JOB_ID \
  --schedule="FREQUENCY" --uri=URI \
  --oidc-service-account-email=CLIENT_SERVICE_ACCOUNT_EMAIL

次のように置き換えます。

  • JOB_ID: ジョブの名前。これはプロジェクト内で一意でなければなりません。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。
  • FREQUENCY: ジョブの間隔は、ジョブの実行頻度です(例: every 3 hoursevery 10 mins)。ここで指定する文字列には、crontab 互換の任意の文字列を使用できます。 (おすすめしませんが、従来の App Engine cron 構文は既存のジョブで引き続きサポートされます。)
  • URI はエンドポイントの完全修飾 URL です。
  • --oidc-service-account-email または --oauth-service-account-email はトークンタイプを定義します。一般には OIDC が使用されます。ただし、*.googleapis.com でホストされている Google API は例外で、OAuth トークンが使用されます。
  • CLIENT_SERVICE_ACCOUNT_EMAIL は、クライアント サービス アカウントのメールです。
  • 他のオプション パラメータを使用できます。詳細については、gcloud コマンドライン リファレンスをご覧ください。

トークンタイプを選択する

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

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

この操作は、次のいずれかに該当する場合にのみ必要です。

  • 2019 年 3 月 19 日より前に Cloud Scheduler API を有効にした
  • サービス アカウントから Cloud Scheduler サービス エージェントのロールを削除した

Cloud Scheduler サービス アカウントには、Cloud Scheduler サービス エージェントのロールが必要です。このロールがないと、Cloud Scheduler ジョブは失敗します。Cloud Scheduler サービス エージェントのロールは、Google Cloud コンソールまたは gcloud CLI を使用して Cloud Scheduler サービス アカウントに追加できます。

コンソール

  1. Google Cloud コンソールで、[設定] ページに移動します。

    [設定] に移動

  2. プロジェクト番号を探してコピーします。

  3. Google Cloud コンソールの [IAM] ページに移動します。

    IAM に移動

  4. [Add] をクリックします。[プリンシパルの追加] ペインが開きます。

  5. [新しいプリンシパル] フィールドに、次の形式のメールアドレスを追加します。

    service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
    

    PROJECT_NUMBER は、実際の Google Cloud プロジェクトの番号に置き換えます。

  6. [ロールを選択] リストで、[サービス管理] > [Cloud Scheduler サービス エージェント] の順に選択します。

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

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: 先ほどコピーしたプロジェクト番号