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.
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).