Skip to content

Pass --header enrollment option to fleet-server #8071

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

blakerouse
Copy link
Contributor

@blakerouse blakerouse commented May 2, 2025

What does this PR do?

Currently the --header enrollment flag is used when bootstrapping Fleet Server. Those headers should also be used when communicating with Fleet Server that is not being bootstrapped.

Why is it important?

When enrolling to a Fleet Server that is behind a proxy that requires specific headers for communication it is not possible to enroll the Elastic Agent into the Fleet Server.

Checklist

  • I have read and understood the pull request guidelines of this project.
  • My code follows the style guidelines of this project
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • [ ] I have made corresponding change to the default configuration files
  • I have added tests that prove my fix is effective or that my feature works
  • I have added an entry in ./changelog/fragments using the changelog tool
  • [ ] I have added an integration test or an E2E test (covered well in unit tests)

Disruptive User Impact

None

How to test this PR locally

Setup a Fleet Server behind a proxy that requires a specific header for traffic to flow. Then enroll the elastic-agent with the required header:

./elastic-agent enroll --url http://proxy-url --enrollment-token ${token} --header X-Custom-Header=TEST

Related issues

Copy link
Contributor

mergify bot commented May 2, 2025

This pull request does not have a backport label. Could you fix it @blakerouse? 🙏
To fixup this pull request, you need to add the backport labels for the needed
branches, such as:

  • backport-./d./d is the label that automatically backports to the 8./d branch. /d is the digit
  • backport-active-all is the label that automatically backports to all active branches.
  • backport-active-8 is the label that automatically backports to all active minor branches for the 8 major.
  • backport-active-9 is the label that automatically backports to all active minor branches for the 9 major.

@blakerouse blakerouse marked this pull request as ready for review May 2, 2025 19:20
@blakerouse blakerouse requested a review from a team as a code owner May 2, 2025 19:20
@blakerouse blakerouse added Team:Elastic-Agent-Control-Plane Label for the Agent Control Plane team backport-9.0 Automated backport to the 9.0 branch backport-8.19 Automated backport to the 8.19 branch labels May 2, 2025
@elasticmachine
Copy link
Contributor

Pinging @elastic/elastic-agent-control-plane (Team:Elastic-Agent-Control-Plane)

@blakerouse blakerouse removed the backport-9.0 Automated backport to the 9.0 branch label May 2, 2025
Copy link

Quality Gate failed Quality Gate failed

Failed conditions
37.5% Coverage on New Code (required ≥ 40%)

See analysis details on SonarQube

@elasticmachine
Copy link
Contributor

💚 Build Succeeded

cc @blakerouse

kind: enhancement

# Change summary; a 80ish characters long description of the change.
summary: Add --header to enrollment communication with Fleet Server
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
summary: Add --header to enrollment communication with Fleet Server
summary: Use --header from enrollment when communicating with Fleet Server

The current version doesn't quite read correctly as a sentence to me.

Path string `config:"path" yaml:"path,omitempty"`
Host string `config:"host" yaml:"host,omitempty"`
Hosts []string `config:"hosts" yaml:"hosts,omitempty"`
Headers map[string]string `config:"headers" yaml:"headers,omitempty"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the headers are secrets, is this going to leak them in diagnostics? Are they either already redacted or not included in diagnostics at all?

func(t *testing.T) *http.ServeMux {
mux := http.NewServeMux()
mux.HandleFunc("/api/fleet/agents/enroll", func(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("X-Test-Header") != "Test-Value" {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This proves we use a header for /enroll, is this enough to also prove the same header would be included in a checkin?

I see in enroll.go we explicitly add the header to enrollCmdOption so it isn't obvious just by reading it. Regardless, would there be a way to test that?

Copy link
Contributor

@kaanyalti kaanyalti left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes look good to me. Once the ci is green and Craig's comments are addressed I can approve

@blakerouse blakerouse marked this pull request as draft May 8, 2025 15:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport-8.19 Automated backport to the 8.19 branch Team:Elastic-Agent-Control-Plane Label for the Agent Control Plane team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

--header is not used with communication to Fleet Server
4 participants