Providers and Identities Reference
Detailed configuration reference for all authentication providers and identity types supported by Atmos Auth.
Provider Configuration
AWS IAM Identity Center (SSO)
auth:providers:<name>:kind: aws/iam-identity-center # Requiredregion: us-east-1 # Required: AWS region for Identity Center instancestart_url: https://company.awsapps.com/start # Required: SSO start URLauto_provision_identities: true # Optional: auto-discover accounts/permission sets (default: false)session:duration: 4h # Optional: credential lifetimeconsole:session_duration: 12h # Optional: web console session (max 12h for AWS)spec:endpoint_url: http://localhost:4566 # Optional: AWS-compatible base endpoint for Floci/LocalStackfiles:base_path: ~/.config/atmos/aws/ # Optional: custom credential file storage path
Auto-provisioning IAM permissions required:
sso:ListAccounts-- Enumerates all accessible AWS accounts.sso:ListAccountRoles-- Lists available permission sets per account.
Without these permissions, auto-provisioning fails gracefully and falls back to manually configured identities.
AWS SAML
auth:providers:<name>:kind: aws/saml # Requiredregion: us-east-1 # Required: AWS regionurl: https://company.okta.com/app/amazon_aws/abc123/sso/saml # Required: SAML SSO URLdriver: Browser # Optional: Browser (default, needs Playwright), GoogleApps, Okta, ADFS
The aws/saml provider requires the next identity in the chain to be aws/assume-role, as the SAML
flow requires selecting a role to assume.
GitHub Actions OIDC
auth:providers:<name>:kind: github/oidc # Requiredregion: us-east-1 # Required: AWS region for STS endpointspec:audience: sts.us-east-1.amazonaws.com # Optional: defaults to STS endpoint for region
GitHub Actions workflow must have id-token: write permission and should select the CI profile with
ATMOS_PROFILE. The cloud IAM trust policy must constrain GitHub OIDC sub claims to the intended
repository plus branch or GitHub environment, such as repo:ORG/REPO:ref:refs/heads/main or
repo:ORG/REPO:environment:prod.
GCP Application Default Credentials
auth:providers:<name>:kind: gcp/adc # Requiredproject_id: my-gcp-project # Optional: override gcloud config defaultregion: us-central1 # Optional: default regionscopes: # Optional: OAuth scopes- https://www.googleapis.com/auth/cloud-platform
Requires existing ADC. Run gcloud auth application-default login first.
GCP Workload Identity Federation
auth:providers:<name>:kind: gcp/workload-identity-federation # Requiredproject_id: my-gcp-project # Optional: GCP project IDproject_number: "123456789012" # Required: GCP project number (numeric)workload_identity_pool_id: github-pool # Required: WIF pool IDworkload_identity_provider_id: github-provider # Required: WIF provider IDservice_account_email: ci-sa@my-project.iam.gserviceaccount.com # Optional: SA to impersonatescopes: # Optional: OAuth scopes- https://www.googleapis.com/auth/cloud-platformtoken_source: # Auto-detected in GitHub Actionstype: url # url, file, or environmenturl: https://my-oidc-provider.example.com/tokenrequest_token: <bearer-token> # For type: urlaudience: //iam.googleapis.com/projects/...allowed_hosts:- my-oidc-provider.example.comenvironment_variable: OIDC_TOKEN # For type: environmentfile_path: /path/to/token # For type: file
GitHub Actions auto-detection:
- Sets
token_source.typetourl. - Uses
ACTIONS_ID_TOKEN_REQUEST_URLas the token endpoint. - Uses
ACTIONS_ID_TOKEN_REQUEST_TOKENas the bearer token. - Constructs
audiencefromproject_number,workload_identity_pool_id, andworkload_identity_provider_id. - Validates token URL against known GitHub Actions OIDC hosts.
Identity Configuration
AWS Permission Set
auth:identities:<name>:kind: aws/permission-set # Requireddefault: true # Optional: use when no identity specifiedvia:provider: <provider-name> # Required: SSO provider referenceprincipal:name: AdminAccess # Required: permission set nameaccount:name: development # Account name (resolved via SSO ListAccounts)id: "123456789012" # OR account ID directly (no lookup needed)session:duration: 4h # Optional: override provider session duration
AWS Assume Role
auth:identities:<name>:kind: aws/assume-role # Requireddefault: false # Optionalvia:identity: <identity-name> # Chain from another identity# ORprovider: <provider-name> # Direct from provider (mutually exclusive)principal:assume_role: arn:aws:iam::999999999999:role/RoleName # Required: role ARNsession_name: atmos-session # Optional: for CloudTrail auditing
AWS Assume Root
auth:identities:<name>:kind: aws/assume-root # Requiredvia:identity: <identity-name> # Required: must chain from an existing identityprincipal:target_principal: "123456789012" # Required: 12-digit member account IDtask_policy_arn: arn:aws:iam::aws:policy/root-task/<PolicyName> # Requiredduration: 15m # Optional: max 15 minutes for AssumeRoot
Supported task policies:
arn:aws:iam::aws:policy/root-task/IAMAuditRootUserCredentialsarn:aws:iam::aws:policy/root-task/IAMCreateRootUserPasswordarn:aws:iam::aws:policy/root-task/IAMDeleteRootUserCredentialsarn:aws:iam::aws:policy/root-task/S3UnlockBucketPolicyarn:aws:iam::aws:policy/root-task/SQSUnlockQueuePolicy
Requires AWS Organizations with centralized root access enabled.
AWS User (Break-glass)
auth:identities:<name>:kind: aws/user # Requiredcredentials:access_key_id: !env AWS_ACCESS_KEY_ID # Use !env for env var referencessecret_access_key: !env AWS_SECRET_ACCESS_KEY # Use !env for env var referencesregion: us-east-1 # AWS regionmfa_arn: arn:aws:iam::123456789012:mfa/user # Optional: prompts for TOTPspec:endpoint_url: http://localhost:4566 # Optional: AWS-compatible base endpoint for Floci/LocalStacksession:duration: 1h # Optional: 15m-12h (no MFA) or 15m-36h (with MFA)
Store credentials securely with atmos auth user configure --identity=<name> instead of in config files.
AWS Ambient
Uses credentials the environment already provides, resolved through the AWS SDK default credential chain: environment variables, shared config files, IRSA web identity tokens, EC2 instance metadata, and ECS task roles. Atmos does not clear credential environment variables or disable IMDS for this kind.
auth:identities:<name>:kind: aws/ambient # Requiredprincipal:region: us-east-1 # Optional
Because it returns real AWS credentials, aws/assume-role identities can chain from it with
via.identity. Use the generic ambient kind to leave the whole environment untouched.
AWS Credential Process
Runs an external helper that follows the AWS credential_process protocol and uses the credentials it
prints. Use it when an Okta CLI, aws-sso-cli, aws-vault, Granted, or corporate SAML tool already vends
credentials.
auth:identities:<name>:kind: aws/credential-process # Requiredcredentials:credential_process: corp-credential-helper --account=prod # Required: command to runregion: us-east-1 # Optional: default regionspec:endpoint_url: http://localhost:4566 # Optional: AWS-compatible endpoint for emulators
Behavior:
- The identity is standalone.
via,session,principal,access_key_id,secret_access_key, andmfa_arnare rejected. Useaws/userfor IAM user keys. - Credentials are used as returned. Atmos makes no STS call and does not prompt for MFA.
- The command runs through the platform shell, like the AWS SDK for Go (
sh -c, or%COMSPEC% /S /C "<command>"on Windows), with stdin and stderr passed through, so the helper can prompt for MFA when Atmos runs interactively. The AWS CLI does not use a shell. - Credentials are cached in Atmos-managed AWS files and reused while at least 15 minutes remain
before
Expiration. Credentials without anExpirationmake Atmos run the helper every time. - The helper must finish within 1 minute (not configurable). A helper that waits for a browser login can time out.
- Output is never stored in the keyring.
atmos auth logoutremoves stale keyring entries. atmos auth consoleworks only when the helper returns aSessionToken.
Chain a role from the helper's session:
auth:identities:prod-admin:kind: aws/assume-rolevia:identity: <helper-identity-name>principal:assume_role: arn:aws:iam::111111111111:role/Admin
Choose aws/user for IAM user keys, aws/ambient for credentials already in the environment, and
aws/credential-process for a command that prints credentials. Helper examples, error meanings, and
the reverse direction (atmos aws credential-process for ~/.aws/config profiles) are in
aws-credential-process.md.
Azure Subscription
auth:identities:<name>:kind: azure/subscription # Requiredvia:provider: <azure-provider-name> # Required: Azure provider referenceprincipal:subscription_id: "12345678-1234-1234-1234-123456789012" # Requiredlocation: eastus # Optional: default Azure regionresource_group: my-rg # Optional: default resource group
Sets environment variables: AZURE_SUBSCRIPTION_ID, ARM_SUBSCRIPTION_ID, AZURE_LOCATION,
ARM_LOCATION, etc.
GCP Service Account
auth:identities:<name>:kind: gcp/service-account # Requireddefault: true # Optionalvia:provider: <gcp-provider-name> # Required: gcp/adc or gcp/workload-identity-federationprincipal:service_account_email: tf@my-project.iam.gserviceaccount.com # Requiredproject_id: my-project # Optional: extracted from email if not setscopes: # Optional: defaults to cloud-platform- https://www.googleapis.com/auth/cloud-platformlifetime: 3600s # Optional: default 1h, max 12hdelegates: # Optional: multi-hop impersonation chain- sa1@project.iam.gserviceaccount.com
Requires the base identity to have roles/iam.serviceAccountTokenCreator on the target service account.
GCP Project
auth:identities:<name>:kind: gcp/project # Requiredvia:provider: <gcp-provider-name> # Optionalprincipal:project_id: production-project # Required: GCP project IDregion: us-central1 # Optional: default regionzone: us-central1-a # Optional: default zone
Sets environment variables: GOOGLE_CLOUD_PROJECT, CLOUDSDK_CORE_PROJECT, GOOGLE_CLOUD_REGION,
CLOUDSDK_COMPUTE_REGION, GOOGLE_CLOUD_ZONE, CLOUDSDK_COMPUTE_ZONE.
Identity Chaining Patterns
SSO to Cross-Account Role
The most common pattern: authenticate via SSO, then assume a role in another account.
auth:providers:company-sso:kind: aws/iam-identity-centerregion: us-east-1start_url: https://company.awsapps.com/startidentities:base-admin:kind: aws/permission-setvia:provider: company-ssoprincipal:name: AdminAccessaccount:name: core-identityprod-admin:kind: aws/assume-rolevia:identity: base-adminprincipal:assume_role: arn:aws:iam::999999999999:role/ProductionAdmin
Multi-Hop Role Chain
Chain through multiple roles for progressive access control.
auth:identities:base:kind: aws/permission-setvia:provider: company-ssoprincipal:name: AdminAccessaccount:name: core-identitycross-account:kind: aws/assume-rolevia:identity: baseprincipal:assume_role: arn:aws:iam::111111111111:role/CrossAccountRolerestricted:kind: aws/assume-rolevia:identity: cross-accountprincipal:assume_role: arn:aws:iam::111111111111:role/RestrictedRole
SAML to Assume Role
SAML provider always requires an aws/assume-role as the next identity.
auth:providers:okta:kind: aws/samlregion: us-east-1url: https://company.okta.com/app/amazon_aws/abc123/sso/samlidentities:admin:kind: aws/assume-rolevia:provider: oktaprincipal:assume_role: arn:aws:iam::123456789012:role/AdminRole
GitHub OIDC for CI/CD
Authenticate GitHub Actions runners without static credentials.
auth:providers:github-oidc:kind: github/oidcregion: us-east-1identities:deploy:kind: aws/assume-roledefault: truevia:provider: github-oidcprincipal:assume_role: arn:aws:iam::123456789012:role/GitHubActionsRole
In GitHub Actions, do not add a routine atmos auth login step for OIDC jobs. Atmos resolves
credentials when the command runs.
GCP WIF with Service Account Impersonation
Federate from GitHub Actions OIDC into GCP, then impersonate a service account.
auth:providers:gcp-wif:kind: gcp/workload-identity-federationproject_number: "123456789012"workload_identity_pool_id: github-poolworkload_identity_provider_id: github-provideridentities:terraform:kind: gcp/service-accountdefault: truevia:provider: gcp-wifprincipal:service_account_email: terraform@my-project.iam.gserviceaccount.com
Chain Rules
- Chains can be arbitrarily deep:
provider -> identity -> identity -> ... -> identity. via.providerandvia.identityare mutually exclusive on any given identity.aws/useridentities do not require aviafield (they have inline credentials).- Circular dependencies are detected at validation time and rejected with an error.
- Only one identity should be marked
default: true. Multiple defaults trigger interactive selection.
Session Configuration
Session durations can be configured at the provider level and overridden at the identity level.
| Identity Kind | Duration Range | Notes |
|---|---|---|
| AWS Permission Set | Provider default | Controlled by SSO admin |
| AWS Assume Role | 15m-12h | Standard STS limits |
| AWS Assume Root | Max 15m | AWS-enforced hard limit |
| AWS User (no MFA) | 15m-12h | Standard STS limits |
| AWS User (with MFA) | 15m-36h | Extended with MFA |
| GCP Service Account | Up to 12h | Default 1h |
Component-Level Overrides
Override authentication at the component level in stack configuration. Component auth is deep-merged with global auth. Component identities override global identities with the same name.
components:terraform:myapp:auth:identities:custom-role:kind: aws/assume-rolevia:provider: company-ssoprincipal:assume_role: arn:aws:iam::123456789012:role/MyAppRole
Profiles for Multi-Environment Auth
Use Atmos profiles to swap provider implementations while keeping the same provider name. Identity
configurations reference a consistent provider name that behaves differently per profile. For profile
directory layout, activation, and merge behavior, see atmos-profiles.
profiles/developer/auth.yaml # SSO with standard sessionsci/auth.yaml # GitHub OIDC for pipelinesplatform/auth.yaml # SSO with extended sessions
Activate with --profile flag or ATMOS_PROFILE environment variable:
atmos --profile developer auth loginATMOS_PROFILE=ci atmos terraform apply myapp -s prod
ECR Integration Configuration
auth:integrations:<name>:kind: aws/ecr # Requiredvia:identity: <identity-name> # Required: identity providing AWS credentialsspec:auto_provision: true # Optional: auto-trigger on identity login (default: true)registry:account_id: "123456789012" # Required: AWS account ID for ECR registryregion: us-east-2 # Required: AWS region for ECR registry
ECR tokens expire after approximately 12 hours (AWS-enforced). Credentials are written to
~/.docker/config.json. Integration failures during atmos auth login are non-blocking.
Atmos Pro GitHub STS
Use atmos/pro plus github/sts when CI needs private GitHub access for remote imports,
component source:, vendoring, Terraform modules, or managed Git operations.
auth:providers:atmos-pro:kind: atmos/prospec:workspace_id: !env ATMOS_PRO_WORKSPACE_IDidentities:atmos-pro:kind: atmos/provia:provider: atmos-prointegrations:github-sts:kind: github/stsvia:provider: atmos-prospec:auto_provision: truerepos: [acme/modules]policy_name: defaultgit_config_mode: envrevoke_on_exit: truetoken_env: ATMOS_PRO_GITHUB_TOKEN
In GitHub Actions, grant permissions.id-token: write. In CI, Atmos can lazily provision
github/sts before the first private remote read; an explicit atmos auth login is not required
for normal remote import/source/vendor reads when auto_provision is enabled.
Keyring Configuration
System Keyring (Default)
auth:keyring:type: system
Uses OS-native secure storage: macOS Keychain, Linux Secret Service (GNOME Keyring, KDE Wallet), Windows Credential Manager.
File Keyring
auth:keyring:type: filespec:path: ~/.atmos/keyring # Optional: custom path (default: XDG data directory)password_env: ATMOS_KEYRING_PASSWORD # Optional: env var for password
AES-256 encrypted. Password resolution: env var, then interactive prompt, then error.
Memory Keyring
auth:keyring:type: memory
No persistence. Credentials lost on exit. Best for testing only.
Logging Configuration
auth:logs:level: Info # Debug, Info, Warn, Errorfile: /var/log/atmos-auth.log # Optional: path to log file
Auth logs are separate from main Atmos logs. Debug level includes provider initialization, token refresh, credential resolution steps, and API call details (without secrets).