Skip to content

fix(storage): forward aws_external_id to STS AssumeRole in CloudStore S3 (3.27 backport) - #4109

Closed
ashish-atlan wants to merge 1 commit into
release/v3.27from
fix/CSA-641-s3-external-id-3.27
Closed

ashish-atlan wants to merge 1 commit into
release/v3.27from
fix/CSA-641-s3-external-id-3.27

Conversation

@ashish-atlan

Copy link
Copy Markdown
Contributor

Changelog

  • Backport of fix(storage): forward aws_external_id to STS AssumeRole in CloudStore S3 #4108 onto release/v3.27, a new branch created at v3.27.2 (0daa2965).
  • CloudStore.from_credentials (S3) now forwards extra.aws_external_id to make_s3_assume_role_provider, which sends it as ExternalId on STS AssumeRole. Blank or whitespace-only values are dropped.
  • No behaviour change for credentials without the field.

Additional context (e.g. screenshots, logs, links)

  • Why a backport: the consuming app (atlan-csa-uber-app) is on 3.27.x, and every release from 3.28 on requires pyatlan>=11.3, which the app isn't ready for yet.
  • Difference from fix(storage): forward aws_external_id to STS AssumeRole in CloudStore S3 #4108: the code change is identical (the cherry-pick applied cleanly). The only difference is that in the two new tests the patch target is StsCredentialProvider, not _UtcExpiryStsCredentialProvider, because v3.27.2 doesn't have that wrapper yet.
  • Ask: please cut v3.27.3 from release/v3.27 after merge. If you'd prefer a different backport process or branch name, let me know and I'll retarget.
  • Ref: CSA-641

Checklist

  • Additional tests added (6 cases in tests/unit/storage/test_cloud.py)
  • All CI checks passed
  • Relevant documentation updated (module docstring only)

Local: tests/unit/storage/test_cloud.py gives 50 passed, and pre-commit (ruff, ruff-format, isort, pyright) passes.


Copyleft License Compliance

  • No code subject to a Copyleft license was used.

🤖 Generated with Claude Code

CloudStore.from_credentials read extra.aws_role_arn but never passed an
external ID to make_s3_assume_role_provider, so roles whose trust policy
requires sts:ExternalId could not be assumed. Read extra.aws_external_id
(the key already used by the SQL IAM-auth path) and forward it; blank
values are dropped since STS rejects an empty ExternalId.

Refs: CSA-641
@linear

linear Bot commented Oct 1, 2026

Copy link
Copy Markdown

CSA-641

@cmgrote

cmgrote commented Oct 2, 2026

Copy link
Copy Markdown
Collaborator

Not needed — fix in the app: https://github.com/atlanhq/atlan-csa-uber-app/pull/184

@cmgrote cmgrote closed this Oct 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants