support@porter.run.
How Porter gains access to your AWS account
Porter uses AWS IAM role assumption to operate in your account. No long-lived customer credentials are stored by Porter; access is obtained through the AWS Security Token Service (STS)AssumeRole API, authenticated by a role in your account that trusts Porter’s management infrastructure.
One-time bootstrap
When you first connect an AWS account to Porter:Launch CloudFormation
Porter opens the AWS CloudFormation console in a new tab, pre-populated with the template URL and required parameters.
Review and create the stack
You review the template, acknowledge that it creates IAM resources, and click Create Stack. This is a standard CloudFormation console interaction — you control the execution.
PorterRole and lives entirely in your account. You retain full control over it — you can inspect, modify, or delete it at any time via the AWS Console, CLI, or IaC tooling.
Ongoing access
For day-to-day operations, Porter’s infrastructure assumes into your account through a two-step chain:AssumeRole calls are logged in your AWS CloudTrail and attributed to Porter’s role.
Roles Porter provisions in your account
The table below lists every IAM role Porter creates in your account. Assumable from outside indicates whether the role can be assumed by a principal outside your AWS account (i.e. Porter’s management role). Roles trusted only by AWS service principals or in-cluster pod identities cannot be directly assumed from outside your account.| Role | Created by | Assumable from outside | Purpose |
|---|---|---|---|
porter-access-manager | CloudFormation (initial bootstrap) | Yes (Porter’s CAPIManagement) | Grants Porter the ability to provision and update the rest of the IAM roles and policies in your account. Used for IAM operations only. |
porter-manager | Provisioned by Porter after bootstrap | Yes (Porter’s CAPIManagement, gated by a per-project ExternalId) | Primary operational role. Used by Porter’s control plane to manage EKS clusters, networking, storage, container registries, observability, and datastores. |
porter-infra-manager | Provisioned by Porter after bootstrap | Yes (Porter’s CAPIManagement) | Used by AWS Controllers for Kubernetes (ACK) to reconcile Kubernetes resource definitions to AWS state. Handles CloudWatch, CloudTrail, EventBridge, KMS, S3, SNS, and other EC2/VPC infrastructure. |
porter-controlplane-manager | Provisioned by Porter after bootstrap | No (trusted by eks.amazonaws.com only) | Assumed by the AWS EKS service to operate the EKS managed control plane on your cluster. |
porter-node-manager | Provisioned by Porter after bootstrap | No (trusted by ec2.amazonaws.com only) | Instance profile role for EKS worker nodes. Used by kubelet and in-cluster controllers (cluster-autoscaler, aws-load-balancer-controller) running on nodes. |
porter-karpenter | Provisioned by Porter after bootstrap | No (Pod Identity, pods.eks.amazonaws.com, scoped to your account) | Assumed by the Karpenter controller pod to provision and manage EC2 nodes for your cluster. |
porter-telemetry-manager | Provisioned by Porter after bootstrap | No (Pod Identity) | Assumed by Porter’s OpenTelemetry collector pod to push cluster metrics to Amazon Managed Prometheus and Porter-managed S3 buckets. |
porter-agent-compliance-manager | Provisioned by Porter after bootstrap | No (Pod Identity) | Assumed by the porter-agent pod to manage CloudWatch alarms and publish SOC2 compliance notifications. |
porter-eso-secrets-manager | Provisioned by Porter after creation of environment groups | No (Pod Identity) | Assumed by the External Secrets Operator pod to retrieve environment-group secrets from AWS Secrets Manager. Scoped to the /porter/env-groups/* path. |
porter-s3-<hash> | Provisioned dynamically per bucket | No (Pod Identity) | One role per Porter-provisioned S3 bucket (logs buckets, release buckets, etc.). Each is scoped to objects in its specific bucket only, and can only be assumed by pods in your cluster. |
Roles assumable from outside your account
Three roles —porter-access-manager, porter-manager, and porter-infra-manager — can be assumed from Porter’s management infrastructure outside your account.
porter-access-managertrust allowssts:AssumeRolefrom Porter’sCAPIManagementrole. No ExternalId is used on this trust — the ACK IAM controller that assumes it does not support thests:ExternalIdparameter. This is a known constraint we are actively working to address with alternative attestation mechanisms.porter-managertrust requires a per-project ExternalId. The ExternalId is generated per Porter project and is treated as a sensitive identifier.porter-infra-managertrust has the same no-ExternalId constraint asporter-access-managerfor the same ACK compatibility reason.
ec2.amazonaws.com, eks.amazonaws.com, pods.eks.amazonaws.com, vpc-flow-logs.amazonaws.com) to assume the role for specific AWS-initiated operations.
Permission inventory
Detailed permissions for each Porter-provisioned role. Click any role to expand its statements.porter-access-manager
For creating, updating, and deleting the other Porter-provisioned roles and their attached policies.
Assumable by Porter’s CAPIManagement role, and by EC2, EKS, and EKS Pod Identity service principals.
This is the most security-critical role. To remove Porter’s IAM management permissions, you can delete the CloudFormation stack that sets it up. In your AWS Console, navigate to CloudFormation → PorterRole stack → Delete.
View permissions
View permissions
| Statement | Resource path | Actions | Condition |
|---|---|---|---|
IAMController | * | iam:AttachRolePolicyiam:CreatePolicyiam:CreatePolicyVersioniam:CreateRoleiam:DeletePolicyiam:DeletePolicyVersioniam:DeleteRoleiam:DeleteRolePolicyiam:DetachRolePolicyiam:GetPolicyiam:GetPolicyVersioniam:GetRoleiam:GetRolePolicyiam:ListAttachedRolePoliciesiam:ListPolicyTagsiam:ListPolicyVersionsiam:ListRolePoliciesiam:ListRoleTagsiam:PutRolePermissionsBoundaryiam:PutRolePolicyiam:TagPolicyiam:TagRoleiam:UntagPolicyiam:UntagRoleiam:UpdateAssumeRolePolicyiam:UpdateRole | — |
porter-manager
For managing EKS clusters, networking, storage, container registries, and datastores via the Porter control plane.
Assumable by Porter’s CAPIManagement role with a per-project ExternalId required, and by EC2 and EKS service principals.
View permissions
View permissions
| Statement | Resource path | Actions | Condition |
|---|---|---|---|
EksClusterManagement | * | ecr:CompleteLayerUploadecr:CreateRepositoryecr:InitiateLayerUploadecr:PutImageecr:TagResourceecr:UploadLayerParteks:AssociateEncryptionConfigeks:CreateAddoneks:CreateClustereks:CreateNodegroupeks:DeleteAddoneks:DeleteClustereks:DeleteNodegroupeks:DescribeAddoneks:DescribeClustereks:DescribeNodegroupeks:DescribeUpdateeks:ListAddonseks:ListFargateProfileseks:ListNodegroupseks:ListUpdateseks:TagResourceeks:UntagResourceeks:UpdateAddoneks:UpdateClusterConfigeks:UpdateClusterVersioneks:UpdateNodegroupConfigeks:UpdateNodegroupVersioniam:AddClientIDToOpenIDConnectProvideriam:CreateOpenIDConnectProvideriam:CreateServiceLinkedRoleiam:DeleteOpenIDConnectProvideriam:DeleteRoleiam:DetachRolePolicyiam:GetOpenIDConnectProvideriam:GetRoleiam:GetRolePolicyiam:ListAttachedRolePoliciesiam:ListOpenIDConnectProvidersiam:PassRoleiam:TagOpenIDConnectProvideriam:UpdateOpenIDConnectProviderThumbprintsecretsmanager:CreateSecretsecretsmanager:DeleteSecretsecretsmanager:TagResourceservicequotas:GetServiceQuotaservicequotas:ListRequestedServiceQuotaChangeHistoryByQuotaservicequotas:ListServiceQuotasservicequotas:RequestServiceQuotaIncrease | — |
CloudFormation | * | cloudformation:CreateStackcloudformation:DescribeStackscloudformation:UpdateStack | — |
IamPorterAssumeRolePolicy | arn:aws:iam::*:role/porter* | iam:UpdateAssumeRolePolicy | — |
KmsAliasAndKey | arn:aws:kms:*:*:alias/*arn:aws:kms:*:*:key/* | kms:CreateAliaskms:CreateGrantkms:EnableKeyRotationkms:PutKeyPolicykms:TagResource | — |
KmsCreateKey | * | kms:CreateKey | — |
SsmGetParameter | * | ssm:GetParameter | — |
Efs | * | elasticfilesystem:CreateFileSystemelasticfilesystem:CreateMountTargetelasticfilesystem:DeleteFileSystemelasticfilesystem:DeleteMountTargetelasticfilesystem:DescribeFileSystemselasticfilesystem:DescribeMountTargetselasticfilesystem:TagResourceelasticfilesystem:UntagResource | — |
Soc2Requirements | * | ecr:GetRegistryScanningConfigurationecr:PutRegistryScanningConfigurationinspector2:Enable | — |
EksClusterOperations | * | account:ListRegionsautoscaling:DescribeScalingActivitieseks:CreatePodIdentityAssociationeks:DeletePodIdentityAssociationeks:DescribeClustereks:DescribeNodegroupeks:DescribePodIdentityAssociationeks:ListClusterseks:ListPodIdentityAssociations | — |
LoadBalancersRead | * | acm:AddTagsToCertificateacm:DescribeCertificateacm:ListCertificatesacm:RequestCertificateelasticloadbalancing:DescribeLoadBalancerselasticloadbalancing:DescribeTags | — |
IamRoles | * | iam:AttachRolePolicyiam:CreateRoleiam:DeleteRoleiam:DeleteRolePolicyiam:DetachRolePolicyiam:GetPolicyiam:GetRoleiam:GetRolePolicyiam:ListAttachedRolePoliciesiam:ListRolePoliciesiam:PutRolePermissionsBoundaryiam:PutRolePolicyiam:TagRole | — |
S3Storage | * | s3:CreateBuckets3:DeleteBuckets3:DeleteObjects3:GetBucketLocations3:GetBucketPolicys3:GetBucketTaggings3:GetObjects3:ListBuckets3:PutBucketPolicys3:PutBucketPublicAccessBlocks3:PutBucketTaggings3:PutBucketVersionings3:PutObject | — |
SsmParameterStore | * | ssm:AddTagsToResourcessm:DeleteParameterssm:GetParameterssm:PutParameter | — |
EnvGroupSecrets | arn:*:secretsmanager:*:*:secret:/porter/env-groups/* | secretsmanager:CreateSecretsecretsmanager:DeleteSecretsecretsmanager:GetSecretValuesecretsmanager:PutSecretValuesecretsmanager:TagResource | — |
Datastores | * | elasticache:AddTagsToResourceelasticache:CreateCacheSubnetGroupelasticache:CreateReplicationGroupelasticache:DeleteCacheSubnetGroupelasticache:DeleteReplicationGroupelasticache:DescribeCacheClusterselasticache:DescribeCacheSubnetGroupselasticache:DescribeReplicationGroupselasticache:ListTagsForResourceelasticache:ModifyCacheSubnetGroupelasticache:ModifyReplicationGrouprds:AddTagsToResourcerds:CreateDBClusterrds:CreateDBInstancerds:CreateDBSubnetGrouprds:DeleteDBClusterrds:DeleteDBInstancerds:DeleteDBSubnetGrouprds:DescribeDBClusterSnapshotsrds:DescribeDBClustersrds:DescribeDBEngineVersionsrds:DescribeDBInstancesrds:DescribeDBSnapshotsrds:DescribeDBSubnetGroupsrds:FailoverDBClusterrds:ListTagsForResourcerds:ModifyDBClusterrds:ModifyDBInstancerds:ModifyDBSubnetGrouprds:RestoreDBClusterToPointInTimerds:RestoreDBInstanceFromDBSnapshot | — |
Telemetry | * | aps:* | aws:ResourceTag/porter.run/managed = true |
TelemetryAdmin | * | aps:ListWorkspaces | — |
ReadOnlyBilling | * | ce:Get*ce:List*freetier:GetAccountPlanStatepricing:* | — |
PorterInstanceProxy | * | ec2:AssociateAddressec2:ImportKeyPair | — |
Sqs | * | sqs:CreateQueuesqs:DeleteQueuesqs:GetQueueAttributessqs:GetQueueUrlsqs:SetQueueAttributessqs:TagQueue | — |
KarpenterInterruptionEventBridge | * | events:DeleteRuleevents:DescribeRuleevents:PutRuleevents:PutTargetsevents:RemoveTargetsevents:TagResource | — |
CloudWatchObservability | * | cloudwatch:DeleteAlarmscloudwatch:DescribeAlarmscloudwatch:GetMetricDatacloudwatch:GetMetricStatisticscloudwatch:PutMetricAlarmcloudwatch:TagResourcelogs:DescribeLogGroups | — |
GuardDuty | * | guardduty:CreateDetectorguardduty:DeleteDetectorguardduty:GetAdministratorAccountguardduty:GetDetectorguardduty:ListDetectorsguardduty:TagResourceguardduty:UpdateDetector | — |
EcrPullImages | * | ecr:BatchCheckLayerAvailabilityecr:BatchGetImageecr:DescribeRepositoriesecr:GetAuthorizationTokenecr:GetDownloadUrlForLayer | — |
KmsClusterEncryption | * | kms:CreateGrantkms:Decryptkms:DescribeKeykms:Encrypt | — |
CloudTrailLookup | * | cloudtrail:LookupEvents | — |
Ec2NetworkingCore | * | autoscaling:DescribeAutoScalingGroupsec2:AllocateAddressec2:AssociateRouteTableec2:AttachInternetGatewayec2:CreateInternetGatewayec2:CreateLaunchTemplateec2:CreateLaunchTemplateVersionec2:CreateNatGatewayec2:CreateNetworkInterfaceec2:CreateRouteec2:CreateRouteTableec2:CreateSecurityGroupec2:CreateSubnetec2:CreateTagsec2:CreateVpcec2:DeleteInternetGatewayec2:DeleteLaunchTemplateec2:DeleteLaunchTemplateVersionsec2:DeleteNatGatewayec2:DeleteRouteTableec2:DeleteSecurityGroupec2:DeleteSubnetec2:DeleteVpcec2:DescribeAccountAttributesec2:DescribeAddressesec2:DescribeAvailabilityZonesec2:DescribeEgressOnlyInternetGatewaysec2:DescribeImagesec2:DescribeInstanceTypesec2:DescribeInstancesec2:DescribeInternetGatewaysec2:DescribeKeyPairsec2:DescribeLaunchTemplateVersionsec2:DescribeLaunchTemplatesec2:DescribeNatGatewaysec2:DescribeRouteTablesec2:DescribeSecurityGroupsec2:DescribeSubnetsec2:DescribeVolumesec2:DescribeVpcAttributeec2:DescribeVpcsec2:DetachInternetGatewayec2:DisassociateRouteTableec2:ModifyLaunchTemplateec2:ModifySubnetAttributeec2:ModifyVpcAttributeec2:ReleaseAddressec2:ReplaceRouteec2:RevokeSecurityGroupIngressec2:RunInstancestag:GetResources | — |
VpcPeering | * | ec2:AcceptVpcPeeringConnectionec2:CreateVpcPeeringConnectionec2:DeleteVpcPeeringConnectionec2:DescribeVpcPeeringConnectionsec2:ModifyVpcPeeringConnectionOptions | — |
VpcEndpoints | * | ec2:CreateVpcEndpointec2:DeleteVpcEndpointsec2:DescribeVpcEndpointServiceConfigurationsec2:DescribeVpcEndpointsec2:ModifyVpcEndpoint | — |
VpcFlowLogs | * | ec2:CreateFlowLogsec2:DescribeFlowLogs | — |
porter-infra-manager
For reconciling CloudWatch, CloudTrail, EventBridge, KMS, SNS, and other EC2/VPC infrastructure via AWS Controllers for Kubernetes (ACK).
Assumable by Porter’s CAPIManagement role (no ExternalId), and by EC2, EKS, EKS Pod Identity, and VPC Flow Logs service principals.
View permissions
View permissions
| Statement | Resource path | Actions | Condition |
|---|---|---|---|
KmsManagement | * | kms:CreateAliaskms:CreateKeykms:DeleteAliaskms:Describe*kms:EnableKeyRotationkms:GenerateRandomkms:Get*kms:List*kms:ScheduleKeyDeletionkms:TagResourcekms:UntagResourcekms:UpdateAlias | — |
IamReadOnly | * | iam:GetRolePolicyiam:GetUseriam:ListGroupsiam:ListRolesiam:ListUsers | — |
CloudTrailS3Buckets | arn:aws:s3:::aws-cloudtrail-logs*arn:aws:s3:::porter-*arn:aws:s3:::porter-*/* | s3:* | — |
S3BucketsRead | * | s3:GetBucketLocations3:GetBucketPolicys3:ListAllMyBuckets | — |
SecurityGroups | * | ec2:AuthorizeSecurityGroupEgressec2:AuthorizeSecurityGroupIngressec2:CreateSecurityGroupec2:DeleteSecurityGroupec2:DeleteTagsec2:DescribeManagedPrefixListsec2:DescribeSecurityGroupRulesec2:DescribeSecurityGroupsec2:RevokeSecurityGroupEgressec2:RevokeSecurityGroupIngress | — |
VpcManagement | * | ec2:AcceptVpcPeeringConnectionec2:AssociateRouteTableec2:CreateFlowLogsec2:CreateRouteec2:CreateRouteTableec2:CreateSubnetec2:CreateTagsec2:CreateVpcec2:CreateVpcEndpointec2:CreateVpcEndpointServiceConfigurationec2:CreateVpcPeeringConnectionec2:DeleteFlowLogsec2:DeleteRouteec2:DeleteRouteTableec2:DeleteSubnetec2:DeleteVpcec2:DeleteVpcEndpointec2:DeleteVpcEndpointServiceConfigurationsec2:DeleteVpcPeeringConnectionec2:DescribeFlowLogsec2:DescribeRouteTablesec2:DescribeSubnetsec2:DescribeVpcAttributeec2:DescribeVpcEndpointServiceConfigurationsec2:DescribeVpcEndpointServicePermissionsec2:DescribeVpcEndpointServicesec2:DescribeVpcEndpointsec2:DescribeVpcPeeringConnectionsec2:DescribeVpcsec2:DisassociateRouteTableec2:ModifySubnetAttributeec2:ModifyVpcAttributeec2:ModifyVpcEndpointec2:ModifyVpcEndpointServiceConfigurationec2:ModifyVpcEndpointServicePermissions | — |
CloudTrail | * | cloudtrail:* | — |
CloudTrailLogGroup | arn:aws:logs:*:*:log-group:aws-cloudtrail-logs* | logs:CreateLogGroup | — |
CloudTrailPassRole | * | iam:PassRole | iam:PassedToService = cloudtrail.amazonaws.com |
S3ReplicationPassRole | * | iam:PassRole | iam:PassedToService = s3.amazonaws.com |
PorterInfraManagerPassRole | arn:aws:iam::<account-id>:role/porter-infra-manager | iam:PassRole | — |
Datastores | * | cloudwatch:DeleteAlarmscloudwatch:DescribeAlarmscloudwatch:GetMetricDatacloudwatch:GetMetricStatisticscloudwatch:ListMetricscloudwatch:PutMetricAlarmec2:CreateTagsec2:CreateVpcEndpointec2:DescribeAccountAttributesec2:DescribeAvailabilityZonesec2:DescribeCoipPoolsec2:DescribeInternetGatewaysec2:DescribeLocalGatewayRouteTablePermissionsec2:DescribeLocalGatewayRouteTableVpcAssociationsec2:DescribeLocalGatewayRouteTablesec2:DescribeLocalGatewaysec2:DescribeSecurityGroupsec2:DescribeVpcsec2:GetCoipPoolUsageelasticache:*kms:DescribeKeykms:ListAliaseskms:ListKeyslogs:DescribeLogGroupslogs:DescribeLogStreamslogs:GetLogEventsrds:*sns:ListSubscriptionssns:ListTopicssns:Publish | — |
NodeGroupManagement | * | ec2:DescribeLaunchTemplates | aws:ResourceTag/porter.run/managed = true |
Telemetry | * | aps:* | aws:ResourceTag/porter.run/managed = true |
DatastoreServiceLinkedRoles | * | iam:CreateServiceLinkedRole | iam:AWSServiceName in [elasticache.amazonaws.com, rds.amazonaws.com, rds.application-autoscaling.amazonaws.com] |
CostExplorer | * | ce:GetCostAndUsage | — |
PorterInstanceProxy | * | ec2:AllocateAddressec2:AssociateAddressec2:AttachInternetGatewayec2:CreateInternetGatewayec2:DescribeAddressesec2:DescribeInstancesec2:DetachInternetGatewayec2:ImportKeyPairec2:RunInstancesec2:TerminateInstances | — |
CloudWatchLogs | * | logs:CreateLogGrouplogs:CreateLogStreamlogs:DeleteLogGrouplogs:DeleteRetentionPolicylogs:DescribeLogGroupslogs:DescribeLogStreamslogs:DescribeSubscriptionFilterslogs:ListTagsForResourcelogs:PutLogEventslogs:PutRetentionPolicylogs:TagResourcelogs:UntagResource | — |
Sns | * | sns:CreateTopicsns:DeleteTopicsns:GetTopicAttributessns:ListTagsForResourcesns:SetTopicAttributessns:Subscribesns:TagResourcesns:Unsubscribe | — |
EventBridgeRules | * | events:DescribeEventBusevents:DescribeRuleevents:ListTagsForResourceevents:ListTargetsByRuleevents:PutRuleevents:TagResource | — |
porter-controlplane-manager
For operating the EKS managed control plane.
Assumable by EKS service principals (not by Porter).
Statements prefixed with AmazonEKSClusterPolicy* are defined by AWS in the AmazonEKSClusterPolicy managed policy.
View permissions
View permissions
| Statement | Resource path | Actions | Condition |
|---|---|---|---|
AmazonEKSClusterPolicy | * | autoscaling:DescribeAutoScalingGroupsautoscaling:UpdateAutoScalingGroupec2:AttachVolumeec2:AuthorizeSecurityGroupIngressec2:CreateRouteec2:CreateSecurityGroupec2:CreateTagsec2:CreateVolumeec2:DeleteRouteec2:DeleteSecurityGroupec2:DeleteVolumeec2:DescribeAccountAttributesec2:DescribeAddressesec2:DescribeAvailabilityZonesec2:DescribeDhcpOptionsec2:DescribeInstancesec2:DescribeInstanceTopologyec2:DescribeInternetGatewaysec2:DescribeNetworkInterfacesec2:DescribeRouteTablesec2:DescribeSecurityGroupsec2:DescribeSubnetsec2:DescribeVolumesec2:DescribeVolumesModificationsec2:DescribeVpcsec2:DetachVolumeec2:ModifyInstanceAttributeec2:ModifyVolumeec2:RevokeSecurityGroupIngresselasticloadbalancing:AddTagselasticloadbalancing:ApplySecurityGroupsToLoadBalancerelasticloadbalancing:AttachLoadBalancerToSubnetselasticloadbalancing:ConfigureHealthCheckelasticloadbalancing:CreateListenerelasticloadbalancing:CreateLoadBalancerelasticloadbalancing:CreateLoadBalancerListenerselasticloadbalancing:CreateLoadBalancerPolicyelasticloadbalancing:CreateTargetGroupelasticloadbalancing:DeleteListenerelasticloadbalancing:DeleteLoadBalancerelasticloadbalancing:DeleteLoadBalancerListenerselasticloadbalancing:DeleteTargetGroupelasticloadbalancing:DeregisterInstancesFromLoadBalancerelasticloadbalancing:DeregisterTargetselasticloadbalancing:DescribeListenerselasticloadbalancing:DescribeLoadBalancerAttributeselasticloadbalancing:DescribeLoadBalancerPolicieselasticloadbalancing:DescribeLoadBalancerselasticloadbalancing:DescribeTargetGroupAttributeselasticloadbalancing:DescribeTargetGroupselasticloadbalancing:DescribeTargetHealthelasticloadbalancing:DetachLoadBalancerFromSubnetselasticloadbalancing:ModifyListenerelasticloadbalancing:ModifyLoadBalancerAttributeselasticloadbalancing:ModifyTargetGroupelasticloadbalancing:ModifyTargetGroupAttributeselasticloadbalancing:RegisterInstancesWithLoadBalancerelasticloadbalancing:RegisterTargetselasticloadbalancing:SetLoadBalancerPoliciesForBackendServerelasticloadbalancing:SetLoadBalancerPoliciesOfListenerkms:DescribeKey | — |
AmazonEKSClusterPolicySLRCreate | * | iam:CreateServiceLinkedRole | iam:AWSServiceName = elasticloadbalancing.amazonaws.com |
AmazonEKSClusterPolicyENIDelete | * | ec2:DeleteNetworkInterface | ec2:ResourceTag/eks:eni:owner = amazon-vpc-cni |
LoadBalancers | * | acm:DescribeCertificateacm:GetCertificateacm:ListCertificatesacm:RequestCertificateec2:DeleteTagselasticloadbalancing:AddListenerCertificateselasticloadbalancing:AddTagselasticloadbalancing:ApplySecurityGroupsToLoadBalancerelasticloadbalancing:ConfigureHealthCheckelasticloadbalancing:CreateLoadBalancerelasticloadbalancing:CreateRuleelasticloadbalancing:DeleteLoadBalancerelasticloadbalancing:DeleteRuleelasticloadbalancing:DeleteTargetGroupelasticloadbalancing:DeregisterInstancesFromLoadBalancerelasticloadbalancing:DescribeListenerAttributeselasticloadbalancing:DescribeListenerCertificateselasticloadbalancing:DescribeLoadBalancerAttributeselasticloadbalancing:DescribeLoadBalancerselasticloadbalancing:DescribeRuleselasticloadbalancing:DescribeTagselasticloadbalancing:DescribeTargetGroupselasticloadbalancing:ModifyLoadBalancerAttributeselasticloadbalancing:ModifyRuleelasticloadbalancing:RegisterInstancesWithLoadBalancerelasticloadbalancing:RemoveListenerCertificateselasticloadbalancing:RemoveTagselasticloadbalancing:SetRulePrioritieselasticloadbalancing:SetSubnetselasticloadbalancing:SetWebACLwafv2:AssociateWebACLwafv2:GetWebACLwafv2:GetWebACLForResourcewafv2:ListResourcesForWebACLwafv2:ListRuleGroupswafv2:ListTagsForResourcewafv2:ListWebACLswafv2:TagResource | — |
ClusterAutoscaling | * | autoscaling:DescribeAutoScalingGroupsautoscaling:DescribeAutoScalingInstancesautoscaling:DescribeLaunchConfigurationsautoscaling:DescribeScalingActivitiesautoscaling:DescribeTagsautoscaling:SetDesiredCapacityautoscaling:TerminateInstanceInAutoScalingGroupec2:DescribeImagesec2:DescribeInstanceTypesec2:DescribeLaunchTemplateVersionsec2:GetInstanceTypesFromInstanceRequirementseks:DescribeNodegroup | — |
porter-node-manager
Instance profile role for EKS worker nodes.
Assumable by the EC2 service principal (not by Porter).
Statements prefixed with Amazon* are defined by AWS in the corresponding AWS-managed policy. Statements prefixed with Ebs* are individual statements from the AWS-managed AmazonEBSCSIDriverPolicy; statement names below are descriptive and not part of the AWS-published policy.
View permissions
View permissions
| Statement | Resource path | Actions | Condition |
|---|---|---|---|
CustomerCloudWatchLogs | * | logs:CreateLogGrouplogs:CreateLogStreamlogs:DescribeLogStreamslogs:PutLogEventslogs:PutRetentionPolicy | — |
CustomerEcrAccess | * | ecr:BatchCheckLayerAvailabilityecr:BatchGetImageecr:DescribeImagesecr:DescribeRegistryecr:DescribeRepositoriesecr:GetAuthorizationTokenecr:GetDownloadUrlForLayerecr:ListImagesecr:ListTagsForResource | — |
CustomerEcrPublicAccess | * | ecr-public:GetAuthorizationTokensts:GetServiceBearerToken | — |
ParameterStoreAccess | * | ssm:GetParameter* | — |
AmazonEKSCNIPolicy | * | ec2:AssignPrivateIpAddressesec2:AttachNetworkInterfaceec2:CreateNetworkInterfaceec2:DeleteNetworkInterfaceec2:DescribeInstancesec2:DescribeInstanceTypesec2:DescribeNetworkInterfacesec2:DescribeSecurityGroupsec2:DescribeSubnetsec2:DescribeTagsec2:DetachNetworkInterfaceec2:ModifyNetworkInterfaceAttributeec2:UnassignPrivateIpAddresses | — |
AmazonEKSCNIPolicyENITag | arn:aws:ec2:*:*:network-interface/* | ec2:CreateTags | — |
AmazonEKSClusterPolicy | * | (same actions as in porter-controlplane-manager’s AmazonEKSClusterPolicy statement) | — |
AmazonEKSClusterPolicySLRCreate | * | iam:CreateServiceLinkedRole | iam:AWSServiceName = elasticloadbalancing.amazonaws.com |
AmazonEKSClusterPolicyENIDelete | * | ec2:DeleteNetworkInterface | ec2:ResourceTag/eks:eni:owner = amazon-vpc-cni |
WorkerNodePermissions | * | ec2:DescribeInstancesec2:DescribeInstanceTypesec2:DescribeRouteTablesec2:DescribeSecurityGroupsec2:DescribeSubnetsec2:DescribeVolumesec2:DescribeVolumesModificationsec2:DescribeVpcseks:DescribeClustereks-auth:AssumeRoleForPodIdentity | — |
AmazonEC2ContainerRegistryReadOnly | * | ecr:BatchCheckLayerAvailabilityecr:BatchGetImageecr:DescribeImagesecr:DescribeImageScanFindingsecr:DescribeRepositoriesecr:GetAuthorizationTokenecr:GetDownloadUrlForLayerecr:GetLifecyclePolicyecr:GetLifecyclePolicyPreviewecr:GetRepositoryPolicyecr:ListImagesecr:ListTagsForResource | — |
EbsDescribe | * | ec2:DescribeAvailabilityZonesec2:DescribeInstancesec2:DescribeInstanceTypesec2:DescribeSnapshotsec2:DescribeTagsec2:DescribeVolumesec2:DescribeVolumeStatusec2:DescribeVolumesModifications | — |
EbsVolumeSnapshotModify | arn:aws:ec2:*:*:volume/* | ec2:CreateSnapshotec2:ModifyVolume | — |
EbsCopyVolumes | arn:aws:ec2:*:*:volume/vol-* | ec2:CopyVolumes | — |
EbsAttachDetach | arn:aws:ec2:*:*:volume/*arn:aws:ec2:*:*:instance/* | ec2:AttachVolumeec2:DetachVolume | — |
EbsCreateVolumeFromSnapshot | arn:aws:ec2:*:*:snapshot/* | ec2:CreateVolumeec2:EnableFastSnapshotRestores | — |
EbsCreateTagsOnCreate | arn:aws:ec2:*:*:volume/*arn:aws:ec2:*:*:snapshot/* | ec2:CreateTags | ec2:CreateAction in [CreateVolume, CreateSnapshot, CopyVolumes] |
EbsDeleteTags | arn:aws:ec2:*:*:volume/*arn:aws:ec2:*:*:snapshot/* | ec2:DeleteTags | — |
EbsCreateVolumeClusterTag | arn:aws:ec2:*:*:volume/* | ec2:CreateVolumeec2:CopyVolumes | aws:RequestTag/ebs.csi.aws.com/cluster like true |
EbsCreateVolumeCsiName | arn:aws:ec2:*:*:volume/* | ec2:CreateVolumeec2:CopyVolumes | aws:RequestTag/CSIVolumeName like * |
EbsDeleteVolumeClusterTag | arn:aws:ec2:*:*:volume/* | ec2:DeleteVolume | ec2:ResourceTag/ebs.csi.aws.com/cluster like true |
EbsDeleteVolumeCsiName | arn:aws:ec2:*:*:volume/* | ec2:DeleteVolume | ec2:ResourceTag/CSIVolumeName like * |
EbsDeleteVolumePvcName | arn:aws:ec2:*:*:volume/* | ec2:DeleteVolume | ec2:ResourceTag/kubernetes.io/created-for/pvc/name like * |
EbsCreateSnapshotCsiName | arn:aws:ec2:*:*:snapshot/* | ec2:CreateSnapshot | aws:RequestTag/CSIVolumeSnapshotName like * |
EbsCreateSnapshotClusterTag | arn:aws:ec2:*:*:snapshot/* | ec2:CreateSnapshot | aws:RequestTag/ebs.csi.aws.com/cluster like true |
EbsDeleteSnapshotCsiName | arn:aws:ec2:*:*:snapshot/* | ec2:DeleteSnapshotec2:LockSnapshot | ec2:ResourceTag/CSIVolumeSnapshotName like * |
EbsDeleteSnapshotClusterTag | arn:aws:ec2:*:*:snapshot/* | ec2:DeleteSnapshotec2:LockSnapshot | ec2:ResourceTag/ebs.csi.aws.com/cluster like true |
AllowDescribe | * | elasticfilesystem:DescribeAccessPointselasticfilesystem:DescribeFileSystemselasticfilesystem:DescribeMountTargetsec2:DescribeAvailabilityZones | — |
AllowCreateAccessPoint | * | elasticfilesystem:CreateAccessPoint | aws:RequestTag/efs.csi.aws.com/cluster is not null; aws:TagKeys = efs.csi.aws.com/cluster |
AllowTagNewAccessPoints | * | elasticfilesystem:TagResource | elasticfilesystem:CreateAction = CreateAccessPoint; aws:RequestTag/efs.csi.aws.com/cluster is not null; aws:TagKeys = efs.csi.aws.com/cluster |
AllowDeleteAccessPoint | * | elasticfilesystem:DeleteAccessPoint | aws:ResourceTag/efs.csi.aws.com/cluster is not null |
LoadBalancers | * | (same as porter-controlplane-manager’s LoadBalancers statement) | — |
ClusterAutoscaling | * | (same as porter-controlplane-manager’s ClusterAutoscaling statement) | — |
porter-karpenter
For provisioning and managing cost-optimized EKS worker nodes.
Assumable by the Karpenter controller pod using EKS Pod Identities.
View permissions
View permissions
| Statement | Resource path | Actions | Condition |
|---|---|---|---|
ScopedEc2InstanceAccess | arn:aws:ec2:*::image/*arn:aws:ec2:*::snapshot/*arn:aws:ec2:*:*:security-group/*arn:aws:ec2:*:*:subnet/* | ec2:CreateFleetec2:RunInstances | — |
ScopedEc2LaunchTemplateAccess | arn:aws:ec2:*:*:launch-template/* | ec2:CreateFleetec2:RunInstances | — |
ScopedEc2InstanceCreate | arn:aws:ec2:*:*:fleet/*arn:aws:ec2:*:*:instance/*arn:aws:ec2:*:*:launch-template/*arn:aws:ec2:*:*:network-interface/*arn:aws:ec2:*:*:spot-instances-request/*arn:aws:ec2:*:*:volume/* | ec2:CreateFleetec2:CreateLaunchTemplateec2:RunInstances | — |
ScopedResourceCreationTagging | (same resources as above) | ec2:CreateTags | ec2:CreateAction in [CreateFleet, CreateLaunchTemplate, RunInstances]; aws:RequestTag/karpenter.sh/nodepool like * |
ScopedResourceTagging | arn:aws:ec2:*:*:instance/* | ec2:CreateTags | — |
ScopedEc2Deletion | arn:aws:ec2:*:*:instance/*arn:aws:ec2:*:*:launch-template/* | ec2:DeleteLaunchTemplateec2:TerminateInstances | — |
RegionalEc2Read | * | ec2:DescribeImagesec2:DescribeInstanceTypeOfferingsec2:DescribeInstanceTypesec2:DescribeInstancesec2:DescribeLaunchTemplatesec2:DescribeSecurityGroupsec2:DescribeSpotPriceHistoryec2:DescribeSubnets | — |
PricingRead | * | pricing:GetProducts | — |
SsmParameterRead | * | ssm:GetParameter | — |
SqsInterruptionQueue | arn:aws:sqs:*:*:* | sqs:CreateQueuesqs:DeleteMessagesqs:DeleteQueuesqs:GetQueueAttributessqs:GetQueueUrlsqs:ReceiveMessagesqs:SetQueueAttributessqs:TagQueue | — |
EventBridgeRules | arn:aws:events:*:*:rule/* | events:DeleteRuleevents:DescribeRuleevents:PutRuleevents:PutTargetsevents:RemoveTargets | — |
PassNodeInstanceRole | arn:aws:iam::<account-id>:role/porter-node-manager | iam:PassRole | iam:PassedToService in [ec2.amazonaws.com, ec2.amazonaws.com.cn] |
InstanceProfileScoped | arn:aws:iam::*:instance-profile/* | iam:AddRoleToInstanceProfileiam:CreateInstanceProfileiam:DeleteInstanceProfileiam:GetInstanceProfileiam:RemoveRoleFromInstanceProfileiam:TagInstanceProfile | — |
InstanceProfileList | * | iam:ListInstanceProfiles | — |
EksClusterDescribe | arn:aws:eks:*:*:cluster/* | eks:DescribeCluster | — |
ServiceLinkedRoleCreate | arn:aws:iam::*:role/aws-service-role/* | iam:CreateServiceLinkedRole | — |
porter-telemetry-manager
For collecting and exporting OTLP metrics.
Assumable by the OpenTelemetry Collector pod using EKS Pod Identities.
View permissions
View permissions
| Statement | Resource path | Actions | Condition |
|---|---|---|---|
PorterMetrics | * | aps:GetLabelsaps:GetMetricMetadataaps:GetSeriesaps:QueryMetricsaps:RemoteWrite | — |
PorterLogs | arn:aws:s3:::porter-*arn:aws:s3:::porter-*/* | s3:AbortMultipartUploads3:CreateBuckets3:DeleteObjects3:GetObjects3:ListBuckets3:ListBucketVersionss3:PutObject | — |
porter-agent-compliance-manager
For managing compliance alarms.
Assumable by the Porter Agent pod using EKS Pod Identities.
View permissions
View permissions
| Statement | Resource path | Actions | Condition |
|---|---|---|---|
CloudWatchAlarms | * | cloudwatch:DeleteAlarmscloudwatch:DescribeAlarmscloudwatch:ListTagsForResourcecloudwatch:PutMetricAlarmcloudwatch:TagResource | — |
SnsPublish | arn:aws:sns:*:*:porter-soc2-notifications-* | sns:Publish | — |
porter-eso-secrets-manager
For managing environment group secrets in Secrets Manager.
Assumable by the External Secrets Operator pod using EKS Pod Identities.
View permissions
View permissions
| Statement | Resource path | Actions | Condition |
|---|---|---|---|
EnvGroupSecrets | arn:*:secretsmanager:*:*:secret:/porter/env-groups/* | secretsmanager:BatchGetSecretValuesecretsmanager:DescribeSecretsecretsmanager:GetSecretValue | — |
ListSecretsCatalog | * | secretsmanager:ListSecrets | — |
porter-s3-*
For creating, updating, and deleting S3 objects for specific buckets.
Assumable by the Loki pod using EKS Pod Identities. One role is provisioned per Porter-managed bucket; scoping to a single bucket is enforced by the per-bucket EKS Pod Identity trust on the role itself.
View permissions
View permissions
| Statement | Resource path | Actions | Condition |
|---|---|---|---|
S3ObjectAccess | arn:aws:s3:::*/* | s3:DeleteObjects3:DeleteObjectVersions3:GetObjects3:GetObjectVersions3:PutObject | — |

