Skip to main content
IAM Policy Map

SystemAdministrator

High privilegeAdminJob functionActiveReviewedShow on mapCompare

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.

Control-plane actions by service
ServiceGrantedAccess levels and limitsGranted by
Certificate Manager18 of 426 List, 10 Read, 2 Write; 0 restricted, 0 conditionalacm:Describe*, acm:Get*, acm:List*, acm:Request*, acm:Resend*
EC2 Auto ScalingAll 68 actions (see the EC2 Auto Scaling page)22 List, 1 Read, 2 Tagging, 43 Write; 0 restricted, 0 conditionalautoscaling:*
CloudTrail7 of 665 Read, 2 Write; 0 restricted, 0 conditionalcloudtrail:DescribeTrails, cloudtrail:GetTrailStatus, cloudtrail:ListPublicKeys, cloudtrail:ListTags, cloudtrail:LookupEvents, cloudtrail:StartLogging, cloudtrail:StopLogging
CloudWatchAll 160 actions (see the CloudWatch page)24 List, 8 Permissions management, 46 Read, 2 Tagging, 80 Write; 0 restricted, 0 conditionalcloudwatch:*
CodeCommit56 of 918 List, 28 Read, 20 Write; 0 restricted, 0 conditionalcodecommit:BatchGetRepositories, codecommit:CreateBranch, codecommit:CreateRepository, codecommit:Get*, codecommit:GitPull, codecommit:GitPush, codecommit:List*, codecommit:Put*, codecommit:Test*, codecommit:Update*
CodeDeployAll 48 actions (see the CodeDeploy page)17 List, 8 Read, 4 Tagging, 19 Write; 0 restricted, 0 conditionalcodedeploy:*
CodePipelineAll 44 actions (see the CodePipeline page)3 List, 12 Read, 2 Tagging, 27 Write; 0 restricted, 0 conditionalcodepipeline:*
ConfigAll 102 actions (see the Config page)18 List, 40 Read, 2 Tagging, 42 Write; 0 restricted, 0 conditionalconfig:*
Directory ServiceAll 91 actions (see the Directory Service page)4 List, 1 Permissions management, 25 Read, 2 Tagging, 59 Write; 0 restricted, 0 conditionalds:*
EC2456 of 834195 List, 5 Permissions management, 6 Read, 2 Tagging, 248 Write; 0 restricted, 0 conditionalec2: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
ELBAll 77 actions (see the ELB page)2 List, 1 Permissions management, 22 Read, 2 Tagging, 50 Write; 0 restricted, 0 conditionalelasticloadbalancing:*
EventBridgeAll 71 actions (see the EventBridge page)15 List, 4 Permissions management, 12 Read, 2 Tagging, 38 Write; 0 restricted, 0 conditionalevents:*
IAM59 of 19025 List, 27 Read, 7 Write; 1 restricted, 0 conditionaliam: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
Kinesis1 of 421 List; 0 restricted, 0 conditionalkinesis:ListStreams
KMS21 of 587 List, 7 Read, 7 Write; 0 restricted, 0 conditionalkms:CreateAlias, kms:CreateKey, kms:DeleteAlias, kms:Describe*, kms:Encrypt, kms:GenerateRandom, kms:Get*, kms:List*, kms:ReEncrypt*
Lambda99 of 12125 List, 1 Permissions management, 31 Read, 42 Write; 0 restricted, 0 conditionallambda:Create*, lambda:Delete*, lambda:Get*, lambda:List*, lambda:PublishVersion, lambda:Update*
CloudWatch LogsAll 133 actions (see the CloudWatch Logs page)33 List, 2 Permissions management, 26 Read, 4 Tagging, 68 Write; 0 restricted, 0 conditionallogs:*
RDS50 of 17347 List, 3 Read; 0 restricted, 0 conditionalrds:Describe*, rds:ListTagsForResource
IAM Roles Anywhere11 of 305 List, 4 Read, 2 Write; 0 restricted, 0 conditionalrolesanywhere:GetCrl, rolesanywhere:GetProfile, rolesanywhere:GetSubject, rolesanywhere:GetTrustAnchor, rolesanywhere:ListCrls, rolesanywhere:ListProfiles, rolesanywhere:ListSubjects, rolesanywhere:ListTagsForResource, rolesanywhere:ListTrustAnchors, rolesanywhere:PutNotificationSettings, rolesanywhere:ResetNotificationSettings
Route 53All 71 actions (see the Route 53 page)22 List, 16 Read, 1 Tagging, 32 Write; 0 restricted, 0 conditionalroute53:*
Route 53 DomainsAll 36 actions (see the Route 53 Domains page)3 List, 9 Read, 2 Tagging, 22 Write; 0 restricted, 0 conditionalroute53domains:*
S3All 155 actions (see the S3 page)15 List, 24 Permissions management, 58 Read, 8 Tagging, 50 Write; 0 restricted, 0 conditionals3:*
SESAll 231 actions (see the SES page)31 List, 8 Permissions management, 61 Read, 2 Tagging, 129 Write; 0 restricted, 0 conditionalses:*
SNSAll 40 actions (see the SNS page)7 List, 3 Permissions management, 10 Read, 2 Tagging, 18 Write; 0 restricted, 0 conditionalsns:*
SQSAll 20 actions (see the SQS page)3 Permissions management, 7 Read, 2 Tagging, 8 Write; 0 restricted, 0 conditionalsqs:*
Trusted AdvisorAll 42 actions (see the Trusted Advisor page)7 List, 22 Read, 13 Write; 0 restricted, 0 conditionaltrustedadvisor:*

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.

Data-plane actions by service
ServiceGrantedAccess levels and limitsGranted by
CloudWatchAll 5 actions (see the CloudWatch page)1 List, 3 Read, 1 Write; 0 restricted, 0 conditionalcloudwatch:*
EventBridgeAll 3 actions (see the EventBridge page)3 Write; 0 restricted, 0 conditionalevents:*
Kinesis1 of 51 Write; 0 restricted, 0 conditionalkinesis:PutRecord
Lambda4 of 141 Read, 3 Write; 0 restricted, 0 conditionallambda:Create*, lambda:Get*, lambda:InvokeFunction
S3All 25 actions (see the S3 page)3 List, 3 Permissions management, 8 Read, 4 Tagging, 7 Write; 0 restricted, 0 conditionals3:*
SESAll 2 actions (see the SES page)2 Write; 0 restricted, 0 conditionalses:*
SNSAll 1 actions (see the SNS page)1 Write; 0 restricted, 0 conditionalsns:*

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.

Same service

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

Download 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/SystemAdministrator

CloudFormation

Resources:
  ExampleRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument: {}  # replace with your trust policy
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/job-function/SystemAdministrator

Terraform

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