適切な認証情報を持つサービス アカウントを設定すると、認証が必要な HTTP ターゲットを Cloud Scheduler から呼び出すことができます。
サービス アカウントを設定する
サービス アカウントは通常、アプリケーションやコンピューティング ワークロードで使用され、アカウント固有のメールアドレスで識別されます。
アプリケーションは、サービス アカウント自体として認証し、サービス アカウントにアクセス権が付与されているすべてのリソースにアクセスすることで、サービス アカウントを使用して承認された API 呼び出しを行うことができます。
アプリケーションをサービス アカウントとして認証する最も一般的な方法は、アプリケーションを実行しているリソースにサービス アカウントを関連付けることです。その後、サービス アカウントに Identity and Access Management(IAM)ロールを付与すると、サービス アカウントが Google Cloud リソースにアクセスできるようになります。
- HTTP ターゲットと Cloud Scheduler ジョブに使用するサービス アカウントがまだない場合は、新しいサービス アカウントを作成します。次の点にご注意ください。 - サービス アカウントは、Cloud Scheduler ジョブが作成されたプロジェクトに属している必要があります。 
- Cloud Scheduler サービス エージェント( - service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com)は使用しないでください。この目的に使用することはできません。
- プロジェクトの Cloud Scheduler サービス エージェントの Cloud Scheduler サービス エージェント ロール( - roles/cloudscheduler.serviceAgent)を取り消さないでください。削除すると、認証が必要なエンドポイントに対する- 403レスポンスが返されます。これは、ジョブのサービス アカウントに適切なロールがあったとしても変わりません。
 
- ターゲットが Google Cloud内にある場合は、サービス アカウントに必要な IAM ロールを付与します。 Google Cloud 内の各サービスには特定のロールが必要です。生成されたトークンは受信側のサービスによって自動的に検証されます。たとえば、Cloud Run と第 2 世代の Cloud Run functions の場合は、 - Cloud Run Invokerロールを付与する必要があります。- サービス アカウントをリソースに関連付けるために必要な権限を取得するには、サービス アカウントに対するサービス アカウント ユーザー( - roles/iam.serviceAccountUser)IAM ロールを付与するよう管理者に依頼してください。この事前定義ロールには、サービス アカウントをリソースに関連付けるために必要な- iam.serviceAccounts.actAs権限が含まれています。(サービス アカウントを作成した場合は、この権限が自動的に付与されます)。- 前の手順で、Cloud Scheduler ジョブのターゲットとなるサービスを呼び出すためのサービス アカウントを明示的に作成した場合は、アカウントとその起動元権限をターゲット サービスにバインドすることで、最小権限の原則に従うことができます。 - コンソール- Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクトを選択します。 
- 呼び出すリソースタイプのページに移動します。たとえば、Cloud Run サービスを呼び出す場合は、Cloud Run サービスが一覧表示されているページに移動します。 
- 呼び出すサービスの左側にあるチェックボックスをオンにします。(サービス自体はクリックしないでください)。 
- [ 権限] タブをクリックします。 - 情報ペインが表示されていない場合は、[情報パネルを表示] > [権限] をクリックします。 
- [プリンシパルを追加] をクリックします。 
- [新しいプリンシパル] フィールドに、作成したサービス アカウントのメールアドレスを入力します。 
- [ロールを選択] リストから、付与するロールを選択します。 - プリンシパルが必要とする権限のみを含むロールを選択して、最小権限の原則に従います。 
- [保存] をクリックします。 
 - gcloud- 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 Run 関数のターゲットの場合は- roles/run.invokerです。
- その他のオプション パラメータについては、gcloud コマンドライン リファレンスをご覧ください。
 - 例: - Cloud Run サービス - my-serviceのサービス アカウント- my-service-account@my-project.iam.gserviceaccount.comに Cloud Run 起動元(- roles/run.invoker)IAM ロールを付与します。- gcloud run add-iam-policy-binding my-service \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker
- 第 2 世代の Cloud Run functions で必要な Cloud Run 起動元( - roles/run.invoker)IAM ロールを、Cloud Run 関数- my-gen2-functionのサービス アカウント- my-service-account@my-project.iam.gserviceaccount.comに付与します。- gcloud functions add-iam-policy-binding my-gen2-function \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker \ --gen2
 - Terraform を使用して Cloud Run サービスを呼び出す権限を持つサービス アカウントを作成する例については、Cloud Scheduler のサービス アカウントを作成するをご覧ください。 
- ターゲットが Google Cloudの外部にある場合、受信サービスはトークンを手動で確認する必要があります。 
- デフォルトの Cloud Scheduler サービス エージェントは、Cloud Scheduler API を有効にすると自動的に設定されます。ただし、2019 年 3 月 19 日より前にこの API を有効にしていた場合は、Cloud Scheduler サービス エージェントのロールを付与する必要があります。これにより、Cloud Scheduler では、サービス アカウントに代わって、ターゲットに認証されるためのヘッダー トークンを生成できます。 
認証を使用する Cloud Scheduler ジョブを作成する
Cloud Scheduler と HTTP ターゲットの間で認証を行うため、Cloud Scheduler はメールで指定されたクライアント サービス アカウントに基づくヘッダー トークンを作成し、HTTPS を使用してターゲットに送信します。ID(OIDC)トークンまたは OAuth(アクセス)トークンのいずれかを使用できます。一般には OIDC が使用されます。ただし、*.googleapis.com でホストされている Google API は例外で、OAuth トークンが使用されます。
認証を使用する Cloud Scheduler ジョブを作成するには、ジョブの作成時にトークンタイプと、クライアント サービス アカウントを識別するメールアドレスを追加する必要があります。
コンソール
- Google Cloud コンソールで、[Cloud Scheduler] ページに移動します。 
- [ジョブを作成] をクリックします。 
- [名前] フィールドに、プロジェクトに固有のジョブの名前を入力します。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。 
- [リージョン] リストで、ジョブのリージョンを選択します。 
- ジョブの [頻度] と [タイムゾーン] を指定します。ここで指定する文字列には、unix-cron 互換の任意の文字列を使用できます。 
- [続行] をクリックします。 
- [ターゲット タイプ] リストで、[HTTP] を選択します。 
- URL と HTTP メソッドを指定します。 
- [Auth ヘッダー] リストで、トークンタイプを選択します。一般には OIDC トークンが使用されます。ただし、 - *.googleapis.comでホストされている Google API は例外で、OAuth トークンが使用されます。
- [サービス アカウント] リストで、サービス アカウントのメールアドレスを選択します。 
- 必要に応じて、OIDC トークンの受信者を制限するオーディエンスを指定します。通常は、URL パラメータのないジョブのターゲット URL です。指定しない場合、リクエスト パラメータを含む URL 全体がオーディエンスとして使用されます。 
- 必要に応じて設定を行います。 
- [作成] をクリックします。 
gcloud
gcloud scheduler jobs create http JOB_ID \ --schedule="FREQUENCY" \ --uri=URI \ --oidc-service-account-email=SERVICE_ACCOUNT_EMAIL
次のように置き換えます。
- JOB_ID: プロジェクト内で一意のジョブ名。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。
- FREQUENCY: ジョブを実行する間隔または頻度(例:- every 3 hours、- every 10 mins)。ここで指定する文字列には、unix-cron 互換の任意の文字列を使用できます。
- URIはエンドポイントの完全修飾 URL です。
- SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス。一般には OIDC トークンが使用されます。ただし、- *.googleapis.comでホストされている Google API は例外で、OAuth トークンが使用されます。(代わりに- --oauth-service-account-emailフラグを使用して OAuth トークンタイプを定義します)。
- その他のオプション パラメータについては、gcloud コマンドライン リファレンスをご覧ください。
Cloud Scheduler サービス エージェントのロールを付与する
一部の Google Cloud サービスは、ユーザーに代わって処理を行うためにリソースにアクセスする必要があります。このニーズに応えるために、 Google Cloud では、サービス エージェントと呼ばれるサービス アカウントを作成して管理しています。これらのサービス アカウントは、 Google Cloudサービスを有効にして使用すると、自動的に作成され、ロールが付与されます。
Cloud Scheduler サービス エージェントには、Cloud Scheduler サービス エージェント(roles/cloudscheduler.serviceAgent)ロールが必要です。このロールがないと、Cloud Scheduler ジョブは失敗します。次の形式のメールアドレスを持つ Cloud Scheduler サービス エージェントに、ロールを手動で付与できます。
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
次のいずれかに該当する場合にのみ、ロールを手動で付与する必要があります。
- 2019 年 3 月 19 日より前に Cloud Scheduler API を有効にした
- サービス エージェントから Cloud Scheduler サービス エージェントのロールを削除した
Cloud Scheduler サービス エージェントがプロジェクトで設定され、Cloud Scheduler サービス エージェント ロールが付与されていることを確認するには、プロジェクトの現在のアクセス権を表示します。 Google Cloud コンソールを使用してプロジェクトのアクセス権を表示する場合は、[Google 提供のロール付与を含みます] チェックボックスを必ずオンにしてください。
サービス エージェントにロールを付与する方法については、ロールを作成してサービス エージェントに付与するをご覧ください。
次のステップ
Cloud Scheduler に対する認証をプログラムで行う方法を学習する。