Maison >développement back-end >Golang >Comment puis-je faire une demande d'autorisation depuis des tâches cron vers un point de terminaison d'API sécurisé ?

Comment puis-je faire une demande d'autorisation depuis des tâches cron vers un point de terminaison d'API sécurisé ?

王林
王林avant
2024-02-09 23:50:14848parcourir

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

l'éditeur php Strawberry vous présentera comment émettre des demandes d'autorisation pour sécuriser les points de terminaison de l'API contre les tâches cron. Lors du développement d'applications Web, nous devons souvent utiliser des tâches cron pour effectuer certaines tâches planifiées. Cependant, l'envoi de requêtes directement depuis des tâches cron peut constituer un risque pour la sécurité, nous devons donc prendre certaines mesures pour garantir la sécurité des requêtes. Cet article répondra à cette question en détail et fournira des méthodes et suggestions pratiques pour aider les développeurs à résoudre ce problème.

Contenu de la question

J'ai une application Golang qui effectue l'autorisation de clé API via JWT 令牌

J'utilise Kubernetes. Ainsi, cette application Golang vit dans un pod.

Maintenant, je souhaite créer une autre application pour les tâches cron afin d'accéder au point de terminaison Golang une fois par semaine.

De quoi ai-je besoin :

Comment exécuter/ignorer l'autorisation ?

SKIP : Pas besoin d'Ingress ici car je peux simplement l'appeler en interne. Est-ce que cela aidera l'affaire ?

Ce que j'ai essayé :

J'ai essayé de conserver les tâches cron et l'API dans la même application afin de pouvoir simplement appeler le service au lieu du point de terminaison, mais cela présente également un inconvénient. Je ne peux pas créer de copie car ils copient également les tâches cron et le même point de terminaison sera atteint 1*no ofreplicas fois

Je souhaite appeler le point de terminaison "abc.com" une fois par semaine. Cela nécessite un jeton, et je ne peux pas simplement transmettre un jeton. J'espère qu'il existe un moyen de résoudre ce problème.

Solution de contournement

Cela aiderait certainement si vous les appeliez simplement en interne sans les exposer. Si deux Pods (et donc déploiements) s'exécutent sous le même cluster, vous pouvez utiliser le DNS interne de Kubernetes.

K8s crée automatiquement des enregistrements DNS pour les services que vous créez, qui peuvent être utilisés pour les communications internes au format suivant : <service-name>.<service-namespace>.svc.cluster.local

Plus d'informations dans la documentation officielle : Services et Pods DNS

Si cela semble bizarre ou si cela aide à comprendre l'essentiel, essayez de penser à un "point de terminaison" comme une règle ajoutée au fichier hosts de votre système : cela revient essentiellement à ajouter une règle où <service-name>. <service-namespace>.svc.cluster.local pointe vers l'adresse IP de votre pod, à moins que ce soit une saisie semi-automatique

Par exemple

  • Votre application Golang s'exécute dans un Pod.
  • Vous êtes dans l'espace de noms go-apps 下创建了一个指向它的服务,名为 go-api.
  • Si vos tâches cron sont exécutées dans des pods au sein du même cluster, vous pouvez utiliser go-api.go-apps.svc.cluster.local[:<port>] pour accéder à votre application sans utiliser Ingress李>

L'autorisation dépend de vous car vous la gérez généralement directement ou en utilisant un cadre spécifique. Par exemple, vous pouvez ajouter un chemin de point de terminaison personnalisé dans votre application pour garantir que les seuls clients acceptés proviennent du même sous-réseau IP privé du cluster, soit sans utiliser de jeton (non recommandé), soit en utilisant un jeton spécifique semi-fixe que vous avez choisi. générer et Un à contrôler afin que vous puissiez envoyer des requêtes à quelque chose comme ceci depuis vos crons : go-api.go-apps.svc.cluster.local:8080/api/v1/callWithNoAuth

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer