SystemAdministrator
Summary
A job function policy that grants full access permissions necessary for resources required for application and development operations.
Permissions imported from the AWS Managed Policy Reference Guide; other sections reviewed against the listed AWS sources.
Identity
- ARN
arn:aws:iam::aws:policy/job-function/SystemAdministrator- Default version
- v12
- Created
- Last edited
- Services
- acm, autoscaling, cloudtrail, cloudwatch, codecommit, codedeploy, codepipeline, config, ds, ec2, elasticloadbalancing, events, iam, kinesis, kms, lambda, logs, rds, rolesanywhere, route53, route53domains, s3, ses, sns, sqs, trustedadvisor
Control-plane actions (2167)
By access level: 542 List, 60 Permissions management, 496 Read, 41 Tagging, 1028 Write.
| Service | Granted | Access levels and limits | Granted by |
|---|---|---|---|
| Certificate Manager | 18 of 42 | 6 List, 10 Read, 2 Write; 0 restricted, 0 conditional | acm:Describe*, acm:Get*, acm:List*, acm:Request*, acm:Resend* |
| EC2 Auto Scaling | All 68 actions (see the EC2 Auto Scaling page) | 22 List, 1 Read, 2 Tagging, 43 Write; 0 restricted, 0 conditional | autoscaling:* |
| CloudTrail | 7 of 66 | 5 Read, 2 Write; 0 restricted, 0 conditional | cloudtrail:DescribeTrails, cloudtrail:GetTrailStatus, cloudtrail:ListPublicKeys, cloudtrail:ListTags, cloudtrail:LookupEvents, cloudtrail:StartLogging, cloudtrail:StopLogging |
| CloudWatch | All 160 actions (see the CloudWatch page) | 24 List, 8 Permissions management, 46 Read, 2 Tagging, 80 Write; 0 restricted, 0 conditional | cloudwatch:* |
| CodeCommit | 56 of 91 | 8 List, 28 Read, 20 Write; 0 restricted, 0 conditional | codecommit:BatchGetRepositories, codecommit:CreateBranch, codecommit:CreateRepository, codecommit:Get*, codecommit:GitPull, codecommit:GitPush, codecommit:List*, codecommit:Put*, codecommit:Test*, codecommit:Update* |
| CodeDeploy | All 48 actions (see the CodeDeploy page) | 17 List, 8 Read, 4 Tagging, 19 Write; 0 restricted, 0 conditional | codedeploy:* |
| CodePipeline | All 44 actions (see the CodePipeline page) | 3 List, 12 Read, 2 Tagging, 27 Write; 0 restricted, 0 conditional | codepipeline:* |
| Config | All 102 actions (see the Config page) | 18 List, 40 Read, 2 Tagging, 42 Write; 0 restricted, 0 conditional | config:* |
| Directory Service | All 91 actions (see the Directory Service page) | 4 List, 1 Permissions management, 25 Read, 2 Tagging, 59 Write; 0 restricted, 0 conditional | ds:* |
| EC2 | 456 of 834 | 195 List, 5 Permissions management, 6 Read, 2 Tagging, 248 Write; 0 restricted, 0 conditional | ec2:AcceptVpcPeeringConnection, ec2:Allocate*, ec2:AssignPrivateIpAddresses*, ec2:Associate*, ec2:AttachClassicLinkVpc, ec2:AttachInternetGateway, ec2:AttachNetworkInterface, ec2:AttachVolume, ec2:AttachVpnGateway, ec2:AuthorizeSecurityGroupEgress, ec2:AuthorizeSecurityGroupIngress, ec2:Bundle* and 101 more |
| ELB | All 77 actions (see the ELB page) | 2 List, 1 Permissions management, 22 Read, 2 Tagging, 50 Write; 0 restricted, 0 conditional | elasticloadbalancing:* |
| EventBridge | All 71 actions (see the EventBridge page) | 15 List, 4 Permissions management, 12 Read, 2 Tagging, 38 Write; 0 restricted, 0 conditional | events:* |
| IAM | 59 of 190 | 25 List, 27 Read, 7 Write; 1 restricted, 0 conditional | iam:GetAccessKeyLastUsed, iam:GetAccount*, iam:GetContextKeys*, iam:GetCredentialReport, iam:GetGroup*, iam:GetInstanceProfile, iam:GetLoginProfile, iam:GetOpenIDConnectProvider, iam:GetPolicy*, iam:GetRole, iam:GetRole*, iam:GetSAMLProvider and 29 more |
| Kinesis | 1 of 42 | 1 List; 0 restricted, 0 conditional | kinesis:ListStreams |
| KMS | 21 of 58 | 7 List, 7 Read, 7 Write; 0 restricted, 0 conditional | kms:CreateAlias, kms:CreateKey, kms:DeleteAlias, kms:Describe*, kms:Encrypt, kms:GenerateRandom, kms:Get*, kms:List*, kms:ReEncrypt* |
| Lambda | 99 of 121 | 25 List, 1 Permissions management, 31 Read, 42 Write; 0 restricted, 0 conditional | lambda:Create*, lambda:Delete*, lambda:Get*, lambda:List*, lambda:PublishVersion, lambda:Update* |
| CloudWatch Logs | All 133 actions (see the CloudWatch Logs page) | 33 List, 2 Permissions management, 26 Read, 4 Tagging, 68 Write; 0 restricted, 0 conditional | logs:* |
| RDS | 50 of 173 | 47 List, 3 Read; 0 restricted, 0 conditional | rds:Describe*, rds:ListTagsForResource |
| IAM Roles Anywhere | 11 of 30 | 5 List, 4 Read, 2 Write; 0 restricted, 0 conditional | rolesanywhere:GetCrl, rolesanywhere:GetProfile, rolesanywhere:GetSubject, rolesanywhere:GetTrustAnchor, rolesanywhere:ListCrls, rolesanywhere:ListProfiles, rolesanywhere:ListSubjects, rolesanywhere:ListTagsForResource, rolesanywhere:ListTrustAnchors, rolesanywhere:PutNotificationSettings, rolesanywhere:ResetNotificationSettings |
| Route 53 | All 71 actions (see the Route 53 page) | 22 List, 16 Read, 1 Tagging, 32 Write; 0 restricted, 0 conditional | route53:* |
| Route 53 Domains | All 36 actions (see the Route 53 Domains page) | 3 List, 9 Read, 2 Tagging, 22 Write; 0 restricted, 0 conditional | route53domains:* |
| S3 | All 155 actions (see the S3 page) | 15 List, 24 Permissions management, 58 Read, 8 Tagging, 50 Write; 0 restricted, 0 conditional | s3:* |
| SES | All 231 actions (see the SES page) | 31 List, 8 Permissions management, 61 Read, 2 Tagging, 129 Write; 0 restricted, 0 conditional | ses:* |
| SNS | All 40 actions (see the SNS page) | 7 List, 3 Permissions management, 10 Read, 2 Tagging, 18 Write; 0 restricted, 0 conditional | sns:* |
| SQS | All 20 actions (see the SQS page) | 3 Permissions management, 7 Read, 2 Tagging, 8 Write; 0 restricted, 0 conditional | sqs:* |
| Trusted Advisor | All 42 actions (see the Trusted Advisor page) | 7 List, 22 Read, 13 Write; 0 restricted, 0 conditional | trustedadvisor:* |
The full action list is in actions.json.
Data-plane actions (41)
By access level: 4 List, 3 Permissions management, 12 Read, 4 Tagging, 18 Write.
| Service | Granted | Access levels and limits | Granted by |
|---|---|---|---|
| CloudWatch | All 5 actions (see the CloudWatch page) | 1 List, 3 Read, 1 Write; 0 restricted, 0 conditional | cloudwatch:* |
| EventBridge | All 3 actions (see the EventBridge page) | 3 Write; 0 restricted, 0 conditional | events:* |
| Kinesis | 1 of 5 | 1 Write; 0 restricted, 0 conditional | kinesis:PutRecord |
| Lambda | 4 of 14 | 1 Read, 3 Write; 0 restricted, 0 conditional | lambda:Create*, lambda:Get*, lambda:InvokeFunction |
| S3 | All 25 actions (see the S3 page) | 3 List, 3 Permissions management, 8 Read, 4 Tagging, 7 Write; 0 restricted, 0 conditional | s3:* |
| SES | All 2 actions (see the SES page) | 2 Write; 0 restricted, 0 conditional | ses:* |
| SNS | All 1 actions (see the SNS page) | 1 Write; 0 restricted, 0 conditional | sns:* |
The full action list is in actions.json.
Excluded and conditional actions
No patterns are excluded by NotAction or Deny statements.
Resource scope and attachment
Resource scope across granted actions: mixed.
Can be attached: Yes, to users, groups and roles.
Why this tier
- Grants at least 80% of the write and permissions-management actions of: autoscaling (43 of 43), cloudwatch (89 of 89), codedeploy (19 of 19), codepipeline (27 of 27), config (42 of 42), ds (60 of 60), elasticloadbalancing (51 of 51), events (45 of 45), logs (70 of 70), and 7 more.
- Grants data-plane write actions on a data store on all resources without conditions.
- Grants iam:PassRole, but only for scoped roles or under conditions (for example iam:PassedToService).
- 18 granted write or permissions-management actions have no data-plane classification from AWS, so the data-plane rule cannot assess them.
Guidance
Practical scope
AWS says the policy grants permissions to create and maintain resources across a large variety of AWS services, including AWS CloudTrail, Amazon CloudWatch, AWS CodeCommit, AWS CodeDeploy, AWS Config, AWS Directory Service, Amazon EC2, AWS Identity and Access Management, AWS Key Management Service, AWS Lambda, Amazon RDS, Route 53, Amazon S3, Amazon SES, Amazon SQS, AWS Trusted Advisor and Amazon VPC. The document allows autoscaling:*, cloudwatch:*, codedeploy:*, codepipeline:*, config:*, ds:*, elasticloadbalancing:*, events:*, logs:*, route53:*, route53domains:*, ses:*, sns:*, sqs:* and s3:* in full, on Resource "*". It allows iam:ListRoles and iam:GetRole* actions on Resource "*". Only iam:PassRole is limited, to roles named rds-monitoring-role, ec2-sysadmin-*, ecr-sysadmin-* and lambda-sysadmin-*.
Use cases
- The System administrator job function: a user who sets up and maintains resources for development operations.
- Passing a role to a service through the named service roles: ecr-sysadmin-* for apps on EC2 instances in an Amazon ECS cluster, rds-monitoring-role to monitor databases, ec2-sysadmin-* for apps running on EC2 instances, and lambda-sysadmin-* to let Lambda read DynamoDB streams and write to CloudWatch Logs.
Prerequisites
- If your users need the optional service roles, you must create a role that follows the naming convention in the policy and grant permissions to that role.
Best practices
- AWS managed policies don't grant least privilege permissions. The IAM User Guide suggests using IAM Access Analyzer to see which permissions principals actually use, then writing a custom policy or generating one with only the required permissions.
- The job function policies include filters that limit the names of valid roles that can be passed, which helps avoid granting unnecessary permissions.
Security considerations
- Most statements apply to Resource "*" and include create, modify and delete actions, for example ec2:RunInstances, ec2:TerminateInstances, ec2:DeleteSecurityGroup, cloudtrail:StopLogging, kms:CreateKey and lambda:Delete*, as well as full access to Amazon S3 (s3:*).
- The policy grants iam:PassRole, which allows a user to pass a role to an AWS service. In this policy it is limited to roles named rds-monitoring-role, ec2-sysadmin-*, ecr-sysadmin-* and lambda-sysadmin-*.
- You cannot change the permissions in an AWS managed policy. If AWS updates the policy, the update affects every user, group and role it is attached to.
Assignment guidance
You can attach this policy to your users, groups and roles. The reference page also links to guidance on creating a permission set using AWS managed policies in IAM Identity Center. AWS says you can attach job function policies to any IAM identity. It fits where one user needs to set up and maintain development operations resources across many services.
Related policies
Same service
- AdministratorAccess-AWSElasticBeanstalk
- AIDevOpsReleaseManagementVPCPolicy
- AmazonAppStreamServiceAccess
- AmazonBioDiscoveryServiceLinkedRolePolicy
- AmazonCognitoIdpEmailServiceRolePolicy
- AmazonDataZoneEnvironmentRolePermissionsBoundary
- AmazonDataZoneProjectDeploymentPermissionsBoundary
- AmazonDataZoneProjectRolePermissionsBoundary
Same domain
Frequently asked questions
- When should I attach SystemAdministrator?
- Attach it to a user who sets up and maintains resources for development operations. It is the System administrator job function, which AWS designed to align with a common job function in the IT industry.
- What does SystemAdministrator grant?
- It grants permissions to create and maintain resources across services including AWS CloudTrail, Amazon CloudWatch, AWS CodeCommit, AWS CodeDeploy, AWS Config, AWS Directory Service, Amazon EC2, IAM, AWS KMS, AWS Lambda, Amazon RDS, Route 53, Amazon S3, Amazon SES, Amazon SQS, AWS Trusted Advisor and Amazon VPC. It allows s3:*, sns:*, sqs:* and logs:* in full.
- What are the security risks of SystemAdministrator?
- Most statements apply to all resources and include create, modify and delete actions, such as ec2:TerminateInstances and cloudtrail:StopLogging. It allows iam:PassRole, limited to roles named rds-monitoring-role, ec2-sysadmin-*, ecr-sysadmin-* and lambda-sysadmin-*. AWS managed policies don't grant least privilege permissions, and you must consider the security risk of granting principals more permissions than they need. AWS updates to the policy affect every identity it is attached to.
Policy JSON
{
"Statement": [
{
"Action": [
"acm:Describe*",
"acm:Get*",
"acm:List*",
"acm:Request*",
"acm:Resend*",
"autoscaling:*",
"cloudtrail:DescribeTrails",
"cloudtrail:GetTrailStatus",
"cloudtrail:ListPublicKeys",
"cloudtrail:ListTags",
"cloudtrail:LookupEvents",
"cloudtrail:StartLogging",
"cloudtrail:StopLogging",
"cloudwatch:*",
"codecommit:BatchGetRepositories",
"codecommit:CreateBranch",
"codecommit:CreateRepository",
"codecommit:Get*",
"codecommit:GitPull",
"codecommit:GitPush",
"codecommit:List*",
"codecommit:Put*",
"codecommit:Test*",
"codecommit:Update*",
"codedeploy:*",
"codepipeline:*",
"config:*",
"ds:*",
"ec2:Allocate*",
"ec2:AssignPrivateIpAddresses*",
"ec2:Associate*",
"ec2:Allocate*",
"ec2:AttachInternetGateway",
"ec2:AttachNetworkInterface",
"ec2:AttachVpnGateway",
"ec2:Bundle*",
"ec2:Cancel*",
"ec2:Copy*",
"ec2:CreateCustomerGateway",
"ec2:CreateDhcpOptions",
"ec2:CreateFlowLogs",
"ec2:CreateImage",
"ec2:CreateInstanceExportTask",
"ec2:CreateInternetGateway",
"ec2:CreateKeyPair",
"ec2:CreateLaunchTemplate",
"ec2:CreateLaunchTemplateVersion",
"ec2:CreateNatGateway",
"ec2:CreateNetworkInterface",
"ec2:CreatePlacementGroup",
"ec2:CreateReservedInstancesListing",
"ec2:CreateRoute",
"ec2:CreateRouteTable",
"ec2:CreateSecurityGroup",
"ec2:CreateSnapshot",
"ec2:CreateSpotDatafeedSubscription",
"ec2:CreateSubnet",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:CreateVpc",
"ec2:CreateVpcEndpoint",
"ec2:CreateVpnConnection",
"ec2:CreateVpnConnectionRoute",
"ec2:CreateVpnGateway",
"ec2:DeleteFlowLogs",
"ec2:DeleteKeyPair",
"ec2:DeleteLaunchTemplate",
"ec2:DeleteLaunchTemplateVersions",
"ec2:DeleteNatGateway",
"ec2:DeleteNetworkInterface",
"ec2:DeletePlacementGroup",
"ec2:DeleteSnapshot",
"ec2:DeleteSpotDatafeedSubscription",
"ec2:DeleteSubnet",
"ec2:DeleteTags",
"ec2:DeleteVpc",
"ec2:DeleteVpcEndpoints",
"ec2:DeleteVpnConnection",
"ec2:DeleteVpnConnectionRoute",
"ec2:DeleteVpnGateway",
"ec2:DeregisterImage",
"ec2:Describe*",
"ec2:DetachInternetGateway",
"ec2:DetachNetworkInterface",
"ec2:DetachVpnGateway",
"ec2:DisableVgwRoutePropagation",
"ec2:DisableVpcClassicLinkDnsSupport",
"ec2:DisassociateAddress",
"ec2:DisassociateRouteTable",
"ec2:EnableVgwRoutePropagation",
"ec2:EnableVolumeIO",
"ec2:EnableVpcClassicLinkDnsSupport",
"ec2:GetConsoleOutput",
"ec2:GetHostReservationPurchasePreview",
"ec2:GetLaunchTemplateData",
"ec2:GetPasswordData",
"ec2:GetSecurityGroupsForVpc",
"ec2:Import*",
"ec2:Modify*",
"ec2:MonitorInstances",
"ec2:MoveAddressToVpc",
"ec2:Purchase*",
"ec2:RegisterImage",
"ec2:Release*",
"ec2:Replace*",
"ec2:ReportInstanceStatus",
"ec2:Request*",
"ec2:Reset*",
"ec2:RestoreAddressToClassic",
"ec2:RunScheduledInstances",
"ec2:UnassignPrivateIpAddresses",
"ec2:UnmonitorInstances",
"ec2:UpdateSecurityGroupRuleDescriptionsEgress",
"ec2:UpdateSecurityGroupRuleDescriptionsIngress",
"elasticloadbalancing:*",
"events:*",
"iam:GetAccount*",
"iam:GetContextKeys*",
"iam:GetCredentialReport",
"iam:ListAccountAliases",
"iam:ListGroups",
"iam:ListOpenIDConnectProviders",
"iam:ListPolicies",
"iam:ListPoliciesGrantingServiceAccess",
"iam:ListRoles",
"iam:ListSAMLProviders",
"iam:ListServerCertificates",
"iam:Simulate*",
"iam:UpdateServerCertificate",
"iam:UpdateSigningCertificate",
"kinesis:ListStreams",
"kinesis:PutRecord",
"kms:CreateAlias",
"kms:CreateKey",
"kms:DeleteAlias",
"kms:Describe*",
"kms:GenerateRandom",
"kms:Get*",
"kms:List*",
"kms:Encrypt",
"kms:ReEncrypt*",
"lambda:Create*",
"lambda:Delete*",
"lambda:Get*",
"lambda:InvokeFunction",
"lambda:List*",
"lambda:PublishVersion",
"lambda:Update*",
"logs:*",
"rds:Describe*",
"rds:ListTagsForResource",
"rolesanywhere:GetCrl",
"rolesanywhere:GetProfile",
"rolesanywhere:GetSubject",
"rolesanywhere:GetTrustAnchor",
"rolesanywhere:ListCrls",
"rolesanywhere:ListProfiles",
"rolesanywhere:ListSubjects",
"rolesanywhere:ListTagsForResource",
"rolesanywhere:ListTrustAnchors",
"rolesanywhere:PutNotificationSettings",
"rolesanywhere:ResetNotificationSettings",
"route53:*",
"route53domains:*",
"ses:*",
"sns:*",
"sqs:*",
"trustedadvisor:*"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"ec2:AcceptVpcPeeringConnection",
"ec2:AttachClassicLinkVpc",
"ec2:AttachVolume",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateVpcPeeringConnection",
"ec2:DeleteCustomerGateway",
"ec2:DeleteDhcpOptions",
"ec2:DeleteInternetGateway",
"ec2:DeleteNetworkAcl*",
"ec2:DeleteRoute",
"ec2:DeleteRouteTable",
"ec2:DeleteSecurityGroup",
"ec2:DeleteVolume",
"ec2:DeleteVpcPeeringConnection",
"ec2:DetachClassicLinkVpc",
"ec2:DetachVolume",
"ec2:DisableVpcClassicLink",
"ec2:EnableVpcClassicLink",
"ec2:GetConsoleScreenshot",
"ec2:RebootInstances",
"ec2:RejectVpcPeeringConnection",
"ec2:RevokeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress",
"ec2:RunInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances"
],
"Effect": "Allow",
"Resource": [
"*"
]
},
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"*"
]
},
{
"Action": [
"iam:GetAccessKeyLastUsed",
"iam:GetGroup*",
"iam:GetInstanceProfile",
"iam:GetLoginProfile",
"iam:GetOpenIDConnectProvider",
"iam:GetPolicy*",
"iam:GetRole*",
"iam:GetSAMLProvider",
"iam:GetSSHPublicKey",
"iam:GetServerCertificate",
"iam:GetServiceLastAccessed*",
"iam:GetUser*",
"iam:ListAccessKeys",
"iam:ListAttached*",
"iam:ListEntitiesForPolicy",
"iam:ListGroupPolicies",
"iam:ListGroupsForUser",
"iam:ListInstanceProfiles*",
"iam:ListMFADevices",
"iam:ListPolicyVersions",
"iam:ListRolePolicies",
"iam:ListSSHPublicKeys",
"iam:ListSigningCertificates",
"iam:ListUserPolicies",
"iam:Upload*"
],
"Effect": "Allow",
"Resource": [
"*"
]
},
{
"Action": [
"iam:GetRole",
"iam:ListRoles",
"iam:PassRole"
],
"Effect": "Allow",
"Resource": [
"arn:aws:iam::*:role/rds-monitoring-role",
"arn:aws:iam::*:role/ec2-sysadmin-*",
"arn:aws:iam::*:role/ecr-sysadmin-*",
"arn:aws:iam::*:role/lambda-sysadmin-*"
]
}
],
"Version": "2012-10-17"
}
Version history
Current version v12, edited by AWS on 2026-02-12. Version history is recorded from 2026-11-11. Earlier versions are in the IAM console under Policy versions.
Attach snippets
AWS CLI
aws iam attach-role-policy --role-name ROLE_NAME --policy-arn arn:aws:iam::aws:policy/job-function/SystemAdministrator
aws iam attach-user-policy --user-name USER_NAME --policy-arn arn:aws:iam::aws:policy/job-function/SystemAdministrator
aws iam attach-group-policy --group-name GROUP_NAME --policy-arn arn:aws:iam::aws:policy/job-function/SystemAdministratorCloudFormation
Resources:
ExampleRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument: {} # replace with your trust policy
ManagedPolicyArns:
- arn:aws:iam::aws:policy/job-function/SystemAdministratorTerraform
resource "aws_iam_role_policy_attachment" "job_function_systemadministrator" {
role = aws_iam_role.example.name
policy_arn = "arn:aws:iam::aws:policy/job-function/SystemAdministrator"
}CDK (TypeScript)
role.addManagedPolicy(
iam.ManagedPolicy.fromAwsManagedPolicyName("job-function/SystemAdministrator"),
);Sources
- SystemAdministrator (AWS Managed Policy Reference Guide) (retrieved ; supports summary, practicalScope, securityConsiderations, assignmentGuidance, faqs)
- AWS managed policies for job functions (IAM User Guide) (retrieved ; supports practicalScope, useCases, prerequisites, bestPractices, securityConsiderations, assignmentGuidance, faqs)
- Managed policies and inline policies (IAM User Guide) (retrieved ; supports securityConsiderations, faqs)