Skip to content

Tracking: expand GrantCredential across cloud services #807

Description

@Xuanwo

Goal

Track service-specific uses of the public GrantCredential / Granter<K> capability introduced by #801 and merged in #803.

This tracker covers operations where an explicit existing service Credential authorizes issuance of another independently usable, bounded, expiring Credential in the same service family. The operation may downscope the source authority or transition into another authority domain; strict permission-subset semantics are service-specific and are not part of the core contract.

Shared contract

Every implementation in this tracker should follow the existing reqsign API pattern:

ProvideCredential<K> + GrantCredential<Credential = K> -> Granter<K>
ProvideCredential<K> + SignRequest<Credential = K>     -> Signer<K>
  • Bind stable endpoint/account/role configuration and one typed service-specific grant to the concrete granter before constructing Granter<K>.
  • Consume the source through the existing ProvideCredential<K> path; do not change ProvideCredential or add a generic granted-credential provider adapter.
  • Return the existing service Credential with exact expiration semantics so it remains directly consumable by Signer<K>.
  • Validate the source credential variant and grant before I/O, then reject output that is no longer usable after I/O.
  • Cache only source or service-specific intermediary state when required; never cache granted output in core, and partition intermediary caches by authority and source identity.
  • Redact source credentials, granted credentials, policies, session keys, and raw credential responses from Debug and errors.
  • Use Context I/O and preserve the crate's native/WASM MaybeSend contract.
  • Keep existing fixed-configuration ProvideCredential implementations as compatibility APIs. They may share request construction and response parsing with a new granter; migration is not required.

Delivered foundation

Service coverage

AWS

These checkboxes mean that the public APIs and deterministic protocol coverage are merged into main. All three AWS granters now also have live-service CI paths: AssumeRoleGranter and S3ExpressSessionGranter execute in the gated jobs repaired by #823, while #830 provisions a real S3 Access Grants environment, calls GetDataAccess, and validates the issued credential with STS GetCallerIdentity. The trusted PR run and the post-merge main run both passed these jobs.

Remaining live-cloud acceptance gaps are separate from implementation completion. Real GCP CAB interoperability from #805 / #808 is still unverified, and #817 retains live Azure HNS acceptance for Service SAS o / p permissions.

Remaining service work

  • Alibaba Cloud RAM STS AssumeRole — reuse the provider added by feat(aliyun-oss): add assume role credential provider #724 as service-internal machinery, with typed role/policy parameters and an explicit source credential. Aliyun OSS: Credential Chain & Signing Parity #684 tracked broader credential-chain and signing parity.
  • Tencent Cloud STS — research and implement the signed GetFederationToken or AssumeRole flow with typed policy/identity parameters. AssumeRoleWithWebIdentity remains a ProvideCredential flow because its source is an external identity token, not an existing Tencent credential.
  • Huawei Cloud IAM agency credentials — add a granter only for the explicit source-credential-authorized agency/token issuance flow, with exact temporary AK/SK/security-token expiration.
  • Volcengine STS AssumeRole for TOS — first verify the current public protocol, per-issuance authorization controls, and authoritative expiration fields; then implement a granter if the response can satisfy the SigningCredential validity contract. Volcengine TOS credential providers and presign support #752 previously grouped STS, metadata credentials, and presign; only the granting portion belongs here.

Existing issue consolidation

No open duplicate issue was found for the remaining Alibaba Cloud, Tencent Cloud, Huawei Cloud, or Volcengine granting work. Add a dedicated child issue when an item enters implementation, link it here, and keep service-specific protocol decisions in that child.

Out of scope

  • Web identity, OIDC, Google external account/WIF, IMDS/ECS/GCE metadata, profile/config loading, and default credential chains; these remain ProvideCredential capabilities.
  • Presigned requests, POST policies, and other request-bound artifacts; these remain SignRequest capabilities.
  • A cross-cloud scope/permission model, a second grant generic on Granter, a generic output envelope, or automatic insertion into default credential chains.
  • Rewriting an existing fixed-flow provider solely to use Granter when no explicit issuance API is needed.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestrustPull requests that update Rust code

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions