You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.9 KiB

  1. ---
  2. - name: Rotate Tokens | Get default token name
  3. shell: "{{ bin_dir }}/kubectl get secrets -o custom-columns=name:{.metadata.name} --no-headers | grep -m1 default-token"
  4. register: default_token
  5. - name: Rotate Tokens | Get default token data
  6. command: "{{ bin_dir }}/kubectl get secrets {{ default_token.stdout }} -ojson"
  7. register: default_token_data
  8. run_once: true
  9. - name: Rotate Tokens | Test if default certificate is expired
  10. uri:
  11. url: https://{{ kube_apiserver_ip }}/api/v1/nodes
  12. method: GET
  13. return_content: no
  14. validate_certs: no
  15. headers:
  16. Authorization: "Bearer {{ (default_token_data.stdout|from_json)['data']['token']|b64decode }}"
  17. register: check_secret
  18. run_once: true
  19. failed_when: false
  20. - name: Rotate Tokens | Determine if certificate is expired
  21. set_fact:
  22. needs_rotation: '{{ check_secret.status not in [200, 403] }}'
  23. # FIXME(mattymo): Exclude built in secrets that were automatically rotated,
  24. # instead of filtering manually
  25. - name: Rotate Tokens | Get all serviceaccount tokens to expire
  26. shell: >-
  27. {{ bin_dir }}/kubectl get secrets --all-namespaces
  28. -o 'jsonpath={range .items[*]}{"\n"}{.metadata.namespace}{" "}{.metadata.name}{" "}{.type}{end}'
  29. | grep kubernetes.io/service-account-token
  30. | egrep 'default-token|kube-proxy|kube-dns|dnsmasq|netchecker|weave|calico|canal|flannel|dashboard|cluster-proportional-autoscaler|efk|tiller'
  31. register: tokens_to_delete
  32. run_once: true
  33. when: needs_rotation
  34. - name: Rotate Tokens | Delete expired tokens
  35. command: "{{ bin_dir }}/kubectl delete secrets -n {{ item.split(' ')[0] }} {{ item.split(' ')[1] }}"
  36. with_items: "{{ tokens_to_delete.stdout_lines }}"
  37. run_once: true
  38. when: needs_rotation
  39. - name: Rotate Tokens | Delete pods in system namespace
  40. command: "{{ bin_dir }}/kubectl delete pods -n {{ system_namespace }} --all"
  41. run_once: true
  42. when: needs_rotation