Skip to content

Match camelCase keys against sensitive field names in masker - #74840

Merged
potiuk merged 3 commits into
apache:mainfrom
potiuk:mask-camelcase-sensitive-keys
Oct 16, 2026
Merged

potiuk merged 3 commits into
apache:mainfrom
potiuk:mask-camelcase-sensitive-keys

Conversation

@potiuk

@potiuk potiuk commented Oct 16, 2026

Copy link
Copy Markdown
Member

should_hide_value_for_key() normalised a key by lowercasing it and replacing non-word characters with _, then did a substring match against the sensitive field names. That works for snake_case, kebab-case and dotted keys, but camelCase / PascalCase keys lose their word boundaries: privateKey, connectionString, webhookUrl, accessKey, authHeader, keyfileDict, serviceAccount and serviceKey never matched private_key, connection_string, webhook_url and so on, so their values were not redacted (e.g. in connection extras, rendered fields or CLI output).

The key is now additionally split on camelCase / PascalCase boundaries before lowercasing (privateKey -> private_key, APIKey -> api_key, webhookURL -> webhook_url). Matching is done against both the previous normalised form and the split form, so existing behaviour is unchanged — including user-configured names without separators (e.g. mysensitivekey still matches mySensitiveKey). The change lives in the shared secrets_masker library, which is the single implementation used by airflow-core and the Task SDK.

Tests: extended TestShouldHideValueForKey with camelCase / PascalCase / acronym cases for the default field list, negative cases (primaryKey, connectionTimeout, serviceName), and configured-field cases; updated the comment from #66673 that noted camelCase was not covered.


Was generative AI tooling used to co-author this PR?
  • Yes (please specify the tool below)

Generated-by: Claude Opus 5 following the guidelines

should_hide_value_for_key() only lowercased the key and replaced
non-word runs with "_", so camelCase keys such as privateKey,
connectionString or webhookUrl never matched multi-word entries like
private_key. Keys are now also split on camelCase/PascalCase word
boundaries (including acronym runs such as APIKey) before matching.

Generated-by: Claude Opus 5 following the guidelines at https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions
@potiuk potiuk added the backport-to-v3-4-test Backport to v3-4-test label Oct 16, 2026
@potiuk potiuk added this to the Airflow 3.4.0 milestone Oct 16, 2026
@potiuk

potiuk commented Oct 16, 2026

Copy link
Copy Markdown
Member Author

@amoghrajesh Could you take a look when you have a moment? It's targeted at 3.4.0 and needs a review to make the cut on 2026-10-19.

Comment thread shared/secrets_masker/tests/secrets_masker/test_secrets_masker.py
@potiuk
potiuk merged commit 20ccfcd into apache:main Oct 16, 2026
79 checks passed
@potiuk
potiuk deleted the mask-camelcase-sensitive-keys branch October 16, 2026 23:29
@github-actions

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-4-test

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

Status Branch Result
✅ v3-4-test PR Link

github-actions Bot pushed a commit to aws-mwaa/upstream-to-airflow that referenced this pull request Oct 16, 2026
…ker (apache#74840)

* Match camelCase keys against sensitive field names in masker

should_hide_value_for_key() only lowercased the key and replaced
non-word runs with "_", so camelCase keys such as privateKey,
connectionString or webhookUrl never matched multi-word entries like
private_key. Keys are now also split on camelCase/PascalCase word
boundaries (including acronym runs such as APIKey) before matching.

Generated-by: Claude Opus 5 following the guidelines at https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions

* Rename newsfragment to the PR number

Generated-by: Claude Opus 5 following the guidelines at https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions

* Pin prefix, digit and nested redact cases for camelCase key masking
(cherry picked from commit 20ccfcd)

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
Generated-by: Claude Opus 5
potiuk added a commit that referenced this pull request Oct 17, 2026
…ker (#74840) (#74897)

* Match camelCase keys against sensitive field names in masker

should_hide_value_for_key() only lowercased the key and replaced
non-word runs with "_", so camelCase keys such as privateKey,
connectionString or webhookUrl never matched multi-word entries like
private_key. Keys are now also split on camelCase/PascalCase word
boundaries (including acronym runs such as APIKey) before matching.

Generated-by: Claude Opus 5 following the guidelines at https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions

* Rename newsfragment to the PR number

Generated-by: Claude Opus 5 following the guidelines at https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions

* Pin prefix, digit and nested redact cases for camelCase key masking
(cherry picked from commit 20ccfcd)


Generated-by: Claude Opus 5

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
vatsrahul1001 pushed a commit that referenced this pull request Oct 20, 2026
…ker (#74840) (#74897)

* Match camelCase keys against sensitive field names in masker

should_hide_value_for_key() only lowercased the key and replaced
non-word runs with "_", so camelCase keys such as privateKey,
connectionString or webhookUrl never matched multi-word entries like
private_key. Keys are now also split on camelCase/PascalCase word
boundaries (including acronym runs such as APIKey) before matching.

Generated-by: Claude Opus 5 following the guidelines at https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions

* Rename newsfragment to the PR number

Generated-by: Claude Opus 5 following the guidelines at https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions

* Pin prefix, digit and nested redact cases for camelCase key masking
(cherry picked from commit 20ccfcd)


Generated-by: Claude Opus 5

Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
SameerMesiah97 pushed a commit to SameerMesiah97/airflow-oss-sm97 that referenced this pull request Oct 27, 2026
…74840)

* Match camelCase keys against sensitive field names in masker

should_hide_value_for_key() only lowercased the key and replaced
non-word runs with "_", so camelCase keys such as privateKey,
connectionString or webhookUrl never matched multi-word entries like
private_key. Keys are now also split on camelCase/PascalCase word
boundaries (including acronym runs such as APIKey) before matching.

Generated-by: Claude Opus 5 following the guidelines at https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions

* Rename newsfragment to the PR number

Generated-by: Claude Opus 5 following the guidelines at https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions

* Pin prefix, digit and nested redact cases for camelCase key masking

Generated-by: Claude Opus 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-to-v3-4-test Backport to v3-4-test

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants