ホームページ  >  記事  >  バックエンド開発  >  cronjobs から安全な API エンドポイントに認証リクエストを行うにはどうすればよいですか?

cronjobs から安全な API エンドポイントに認証リクエストを行うにはどうすればよいですか?

王林
王林転載
2024-02-09 23:50:14802ブラウズ

如何从 cronjobs 向安全 API 端点发出授权请求?

php editor Strawberry では、cronjob から安全な API エンドポイントに認可リクエストを発行する方法を紹介します。 Web アプリケーションを開発する場合、多くの場合、スケジュールされたタスクを実行するために cronjob を使用する必要があります。ただし、cronjob からリクエストを直接送信するとセキュリティ上のリスクが生じる可能性があるため、リクエストのセキュリティを確保するために何らかの措置を講じる必要があります。この記事では、この質問に詳しく答え、開発者がこの問題を解決するのに役立つ実用的な方法と提案を提供します。

質問の内容

JWT トークンを介して API キー認証を行う golang アプリケーションがあります

Kubernetes を使用しています。したがって、この Golang アプリケーションはポッド内に存在します。

次に、cronjob が週に 1 回 golang エンドポイントにアクセスするための別のアプリケーションを作成したいと思います。

必要なもの:

認証を実行/スキップするにはどうすればよいですか?

スキップ

: Ingress は内部的に呼び出すだけなので、ここでは必要ありません。これで事件は解決するでしょうか?

私が試したこと:

エンドポイント

の代わりに

サービスを簡単に呼び出せるように、cronjob と API を同じアプリケーション内に保持しようとしましたが、これには欠点もあります。 レプリカは cron ジョブもレプリケートし、同じエンドポイントが 1*no ofreplicas 回ヒットするため、レプリカを作成できません 「abc.com」エンドポイントを週に 1 回呼び出したいと考えています。トークンが必要ですが、単純にトークンを渡すことはできません。 この問題を解決する方法があることを願っています。

回避策

公開せずに内部的に呼び出すことができれば、間違いなく役立ちます。 2 つのポッド (したがってデプロイメント) が同じクラスターで実行されている場合は、Kubernetes の内部 DNS を使用できます。

K8s は、作成したサービスの DNS レコードを自動的に作成します。これは、次の形式で内部通信に使用できます:

..svc.cluster.local

公式ドキュメントからの詳細情報: サービスと DNS ポッド

これが奇妙に聞こえる場合、または要点を理解するのに役立つ場合は、システムのホスト ファイルに追加されるルールとして「エンドポイント」を考えてみてください。基本的には、<サービス名> というルールを追加することになります。 ;. .svc.cluster.local

は、自動補完されない限り、ポッドの IP アドレスを指します

###例えば### golang アプリケーションはポッド内で実行されています。

これを指すサービスを、名前空間

go-apps
    の下に
  • go-api
  • という名前で作成しました。
  • cron-job ワーカー スレッドが同じクラスター内のポッドで実行されている場合は、go-api.go-apps.svc.cluster.local[:] を使用して、 Ingress を使用せずにアプリケーションにアクセスする
  • 認可は、通常は直接処理するか、特定のフレームワークを使用して処理するかによって決まります。 たとえば、アプリケーション内にカスタム エンドポイント パスを追加して、トークンを使用せずに (推奨されません)、またはトークンを使用する特定の半固定のクライアントを使用して、受け入れられるクライアントのみがクラスターの同じプライベート IP サブネットからのものであることを保証できます。生成して制御されたものを作成すると、cron からのリクエストを次のようなものに送信できるようになります。 go-api.go-apps.svc.cluster.local:8080/api/v1/callWithNoAuth李>

以上がcronjobs から安全な API エンドポイントに認証リクエストを行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。