Skip to content

SRVOCF-1078: Reduce deploy ServiceAccount token lifetime to a configurable 30 days - #174

Open
dsimansk wants to merge 1 commit into
openshift:masterfrom
dsimansk:SRVOCF-1078-reduce-lifetime-of-deploy-serviceaccount
Open

SRVOCF-1078: Reduce deploy ServiceAccount token lifetime to a configurable 30 days#174
dsimansk wants to merge 1 commit into
openshift:masterfrom
dsimansk:SRVOCF-1078-reduce-lifetime-of-deploy-serviceaccount

Conversation

@dsimansk

@dsimansk dsimansk commented Sep 1, 2026

Copy link
Copy Markdown

Summary

  • Reduce the deploy ServiceAccount token default lifetime from 365 days
    (1 year) to 30 days, shrinking the exposure window for the credential
    stored in the repo's GitHub Actions KUBECONFIG secret.
  • Make the lifetime configurable via a new SA_TOKEN_EXPIRY env var,
    accepting common duration notation (30d, 10h, 7d12h). Empty falls back
    to the 30 day default. Exposed as the plugin.saTokenExpiry Helm value
    and wired into the deployment container env.
  • Thread the configured expiry through cluster.New, Handlers, and
    RequestToken; add unit tests for the parser and for the configured
    expiry reaching the TokenRequest.

Fixes SRVOCF-1078

Checklist

  • Updated docs/ARCHITECTURE.md (if there are relevant changes to our layered architecture)

Additional Info

The token is still a one-shot credential with no in-product refresh, so a
function's CI stops deploying once the token expires. A user-triggered
re-issue path and keyless rotation (GitHub OIDC federation or a GitOps
pull model) are tracked as follow-ups on the Jira issue; they are out of
scope here.

The deploy ServiceAccount token was minted with a 365 day (1 year)
lifetime and stored in a GitHub Actions secret. A credential that
long-lived is unnecessary exposure if the secret leaks, since it far
outlasts the interval between deployments.

Reduce the default lifetime to 30 days and make it configurable via
the SA_TOKEN_EXPIRY env var, accepting common duration notation such
as 30d, 10h, or 7d12h. The value is wired through a Helm value
(plugin.saTokenExpiry) into the deployment's container env.

The token is still a one-shot credential with no in-product refresh,
so a function's CI stops deploying once the token expires. A
user-triggered re-issue path and keyless rotation are tracked as
follow-ups.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@openshift-merge-bot

Copy link
Copy Markdown

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Sep 1, 2026
@openshift-ci-robot

openshift-ci-robot commented Sep 1, 2026

Copy link
Copy Markdown

@dsimansk: This pull request references SRVOCF-1078 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the sub-task to target the "5.1.0" version, but no target version was set.

Details

In response to this:

Summary

  • Reduce the deploy ServiceAccount token default lifetime from 365 days
    (1 year) to 30 days, shrinking the exposure window for the credential
    stored in the repo's GitHub Actions KUBECONFIG secret.
  • Make the lifetime configurable via a new SA_TOKEN_EXPIRY env var,
    accepting common duration notation (30d, 10h, 7d12h). Empty falls back
    to the 30 day default. Exposed as the plugin.saTokenExpiry Helm value
    and wired into the deployment container env.
  • Thread the configured expiry through cluster.New, Handlers, and
    RequestToken; add unit tests for the parser and for the configured
    expiry reaching the TokenRequest.

Fixes SRVOCF-1078

Checklist

  • Updated docs/ARCHITECTURE.md (if there are relevant changes to our layered architecture)

Additional Info

The token is still a one-shot credential with no in-product refresh, so a
function's CI stops deploying once the token expires. A user-triggered
re-issue path and keyless rotation (GitHub OIDC federation or a GitOps
pull model) are tracked as follow-ups on the Jira issue; they are out of
scope here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci
openshift-ci Bot requested review from Cragsmann and pmeida September 1, 2026 11:32
@openshift-ci

openshift-ci Bot commented Sep 1, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign jhadvig for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci

openshift-ci Bot commented Sep 1, 2026

Copy link
Copy Markdown

@dsimansk: all tests passed!

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants