Skip to main content
The Kubernetes ServiceAccount provides an identity for processes running in pods. For cloud provider integrations (GCP, AWS, Azure), annotations on the ServiceAccount enable Workload Identity or IRSA to grant cloud permissions without static credentials.
serviceAccount.name
string
default:""
Name of the Kubernetes ServiceAccount to create or use.Default Behavior: When empty, defaults to {release-name}-sa when rbac.create: true.Purpose: Provides an identity for web, worker, buildkit, and job pods.Example:
The default ServiceAccount name is automatically generated based on the Helm release name. Most deployments don’t need to override this.
serviceAccount.annotations
object
default:"{}"
Annotations to add to the ServiceAccount.Purpose: Enable cloud provider Workload Identity or IRSA bindings to grant cloud permissions without static credentials.Common Use Cases:
  • GCP Workload Identity - Bind Kubernetes ServiceAccount to Google Service Account
  • AWS IRSA - Bind Kubernetes ServiceAccount to IAM Role
  • Azure Workload Identity - Bind Kubernetes ServiceAccount to Azure Managed Identity
  • Custom Metadata - Add arbitrary metadata for organizational tracking
Example - GCP Workload Identity:
Example - AWS IRSA:
Example - Azure Workload Identity:
Example - Multiple Annotations:

Cloud Provider Workload Identity

GCP Workload Identity

Workload Identity allows Kubernetes pods to authenticate as a Google Service Account without needing static credentials (JSON keys). Prerequisites:
  1. GKE cluster has Workload Identity enabled
  2. Google Service Account (GSA) created with required IAM roles
  3. IAM binding created between Kubernetes ServiceAccount and GSA
Configuration:
IAM Binding Command:
Complete Example:
See Also: GCP Integration Guide for complete Workload Identity setup.

AWS IRSA (IAM Roles for Service Accounts)

IRSA allows Kubernetes pods to assume an IAM role without needing static access keys. Prerequisites:
  1. EKS cluster has IRSA enabled (OIDC provider configured)
  2. IAM role created with required policies
  3. Trust relationship configured between IAM role and Kubernetes ServiceAccount
Configuration:
IAM Trust Relationship Example:
Complete Example:
See Also: AWS Integration Guide for complete IRSA setup.

Azure Workload Identity

Azure Workload Identity allows Kubernetes pods to authenticate as an Azure Managed Identity. Prerequisites:
  1. AKS cluster has Workload Identity enabled
  2. Azure Managed Identity created with required permissions
  3. Federated identity credential configured
Configuration:
Complete Example:

RBAC Integration

rbac.create
boolean
default:"true"
Create RBAC resources (ServiceAccount, Role, RoleBinding) automatically.When true:
  • Chart creates ServiceAccount
  • Chart creates Role with required permissions
  • Chart creates RoleBinding linking ServiceAccount to Role
When false:
  • ServiceAccount must already exist
  • Permissions must be manually configured
  • Specify existing ServiceAccount name via serviceAccount.name
Example - Use Existing ServiceAccount:
rbac.namespaceIsolation
boolean
default:"false"
Enable ClusterRole and ClusterRoleBinding for namespace isolation.When true:
  • Chart creates ClusterRole with permissions to manage resources across namespaces
  • Chart creates ClusterRoleBinding to grant ServiceAccount cluster-wide access
  • Required when k8s_namespace_isolation feature flag is enabled
When false:
  • Platform operates within release namespace and configured crew namespace only
  • No cluster-wide permissions granted
Purpose: Allows CrewAI Platform to dynamically create and manage per-organization namespaces (e.g., crewai-crews-org-1, crewai-crews-org-2) for workload isolation when the k8s_namespace_isolation feature flag is enabled.Permissions Granted (when enabled):
  • Namespace management: create, get, list, watch
  • Resource management across namespaces: secrets, configmaps, services, pods, PVCs, deployments, statefulsets, jobs, ingresses
  • Pod operations: exec, logs
Example - Enable Namespace Isolation:
Enabling namespace isolation grants cluster-wide permissions to the CrewAI Platform ServiceAccount. Ensure your organization’s security policies allow ClusterRole creation before enabling this feature.
This setting is only relevant when rbac.create: true. If using an existing ServiceAccount (rbac.create: false), you must manually configure the required ClusterRole and ClusterRoleBinding permissions for namespace isolation to work.

Complete Examples

Azure with Workload Identity

Using Existing ServiceAccount

When using an existing ServiceAccount (rbac.create: false), ensure it has the required permissions for CrewAI Platform operations. See the chart’s Role template for the full list of required permissions.

Troubleshooting

Workload Identity Not Working

Symptoms: Pods show could not retrieve default credentials or 403 Forbidden when accessing cloud services. Debug Steps:
Common Causes:
  1. Annotation missing or incorrect
  2. IAM binding not configured (cloud provider side)
  3. Workload Identity not enabled on cluster
  4. Namespace or ServiceAccount name mismatch in IAM binding

Pods Can’t Access Cloud Resources

Symptoms: Application logs show Access Denied, Unauthorized, or InvalidCredentials. Verify IAM Permissions: GCP:
AWS:
Azure:

GCP Workload Identity Setup: See GCP Integration Guide for complete Workload Identity configuration including IAM bindings and permissions. AWS IRSA Setup: See AWS Integration Guide for complete IRSA configuration including trust relationships and IAM policies. RBAC Configuration: See Global Configuration - RBAC for Role and RoleBinding creation settings. Cloud SQL Proxy: See Cloud SQL Auth Proxy for using Workload Identity with Cloud SQL.