ROSAKarpenterControllerPolicy

Last Modified

Jul 27, 2026

July 27, 2026 at 05:03 PM UTC

Version

v1

Total Versions

1

Created

Jul 27, 2026

Actions

40

Risk

Medium

The same capabilities in a scoped form, resource policy writes, reads across all data, or full access to a whole service. Read from this policy document alone: trust policies, boundaries and SCPs in your account still decide what actually succeeds. How this is assessed

  • Medium

    Can launch resources that run as a more privileged role

    Grants the actions of 1 documented escalation path, but only on named resources or under a condition. Review that scope before trusting it.

    • ec2-001iam:PassRole + ec2:RunInstancesscoped
      • iam:PassRole: condition iam:PassedToService, on arn:aws:iam::*:role/*-ROSA-Worker-Role

    Use with caution: Check which roles, users or policies fall inside the scope shown above. Within it the escalation works as documented, so keep privileged principals out of it.

Policy Document

View on GitHub
{
  "PolicyVersion": {
    "Document": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ReadPermissions",
          "Effect": "Allow",
          "Action": [
            "ec2:DescribeAvailabilityZones",
            "ec2:DescribeCapacityReservations",
            "ec2:DescribeImages",
            "ec2:DescribeInstances",
            "ec2:DescribeInstanceTypeOfferings",
            "ec2:DescribeInstanceTypes",
            "ec2:DescribeLaunchTemplates",
            "ec2:DescribeSecurityGroups",
            "ec2:DescribeSnapshots",
            "ec2:DescribeSpotPriceHistory",
            "ec2:DescribeSubnets",
            "ec2:DescribeVpcs"
          ],
          "Resource": "*"
        },
        {
          "Sid": "PricingReadActions",
          "Effect": "Allow",
          "Action": [
            "pricing:GetProducts"
          ],
          "Resource": "*"
        },
        {
          "Sid": "DescribeKMSKeysForEBSVolumeEncryption",
          "Effect": "Allow",
          "Action": "kms:DescribeKey",
          "Resource": "arn:aws:kms:*:*:key/*",
          "Condition": {
            "StringEquals": {
              "aws:ResourceTag/red-hat": "true"
            },
            "StringLike": {
              "kms:ViaService": "ec2.*.amazonaws.com"
            }
          }
        },
        {
          "Sid": "CryptoOpsForEBSVolumeEncryption",
          "Effect": "Allow",
          "Action": [
            "kms:Decrypt",
            "kms:ReEncryptFrom",
            "kms:ReEncryptTo",
            "kms:GenerateDataKeyWithoutPlaintext"
          ],
          "Resource": "arn:aws:kms:*:*:key/*",
          "Condition": {
            "StringEquals": {
              "aws:ResourceTag/red-hat": "true"
            },
            "StringLike": {
              "kms:ViaService": "ec2.*.amazonaws.com"
            },
            "ForAllValues:StringEquals": {
              "kms:EncryptionContextKeys": [
                "aws:ebs:id"
              ]
            }
          }
        },
        {
          "Sid": "CreateGrantForEBSVolumeEncryption",
          "Effect": "Allow",
          "Action": "kms:CreateGrant",
          "Resource": "arn:aws:kms:*:*:key/*",
          "Condition": {
            "Bool": {
              "kms:GrantIsForAWSResource": true
            },
            "StringLike": {
              "kms:ViaService": "ec2.*.amazonaws.com"
            },
            "StringEquals": {
              "kms:GrantConstraintType": "EncryptionContextSubset"
            },
            "ForAllValues:StringEquals": {
              "kms:GrantOperations": [
                "Decrypt",
                "GenerateDataKeyWithoutPlaintext",
                "ReEncryptFrom",
                "ReEncryptTo"
              ],
              "kms:EncryptionContextKeys": [
                "aws:ebs:id"
              ]
            }
          }
        },
        {
          "Sid": "CreateEC2Resources",
          "Effect": "Allow",
          "Action": [
            "ec2:RunInstances",
            "ec2:CreateFleet"
          ],
          "Resource": [
            "arn:aws:ec2:*:*:security-group/*",
            "arn:aws:ec2:*:*:subnet/*",
            "arn:aws:ec2:*:*:capacity-reservation/*"
          ]
        },
        {
          "Sid": "CreateEC2ResourcesWithApprovedAMIs",
          "Effect": "Allow",
          "Action": [
            "ec2:RunInstances",
            "ec2:CreateFleet"
          ],
          "Resource": "arn:aws:ec2:*::image/*",
          "Condition": {
            "StringEquals": {
              "ec2:Owner": [
                "531415883065",
                "251351625822",
                "210686502322"
              ]
            }
          }
        },
        {
          "Sid": "CreateEC2ResourcesWithTags",
          "Effect": "Allow",
          "Action": [
            "ec2:RunInstances",
            "ec2:CreateFleet",
            "ec2:CreateLaunchTemplate"
          ],
          "Resource": [
            "arn:aws:ec2:*:*:fleet/*",
            "arn:aws:ec2:*:*:instance/*",
            "arn:aws:ec2:*:*:volume/*",
            "arn:aws:ec2:*:*:network-interface/*",
            "arn:aws:ec2:*:*:launch-template/*",
            "arn:aws:ec2:*:*:spot-instances-request/*"
          ],
          "Condition": {
            "StringEquals": {
              "aws:RequestTag/red-hat-managed": "true"
            }
          }
        },
        {
          "Sid": "CreateEC2ResourcesLaunchTemplate",
          "Effect": "Allow",
          "Action": [
            "ec2:RunInstances",
            "ec2:CreateFleet"
          ],
          "Resource": "arn:aws:ec2:*:*:launch-template/*",
          "Condition": {
            "StringEquals": {
              "aws:ResourceTag/red-hat-managed": "true"
            }
          }
        },
        {
          "Sid": "CreateTagsOnResources",
          "Effect": "Allow",
          "Action": [
            "ec2:CreateTags"
          ],
          "Resource": [
            "arn:aws:ec2:*:*:fleet/*",
            "arn:aws:ec2:*:*:instance/*",
            "arn:aws:ec2:*:*:volume/*",
            "arn:aws:ec2:*:*:network-interface/*",
            "arn:aws:ec2:*:*:launch-template/*",
            "arn:aws:ec2:*:*:spot-instances-request/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:CreateAction": [
                "RunInstances",
                "CreateFleet",
                "CreateLaunchTemplate"
              ],
              "aws:RequestTag/red-hat-managed": "true"
            }
          }
        },
        {
          "Sid": "ManageTagsOnManagedResources",
          "Effect": "Allow",
          "Action": [
            "ec2:CreateTags"
          ],
          "Resource": "arn:aws:ec2:*:*:instance/*",
          "Condition": {
            "StringEquals": {
              "aws:ResourceTag/red-hat-managed": "true"
            }
          }
        },
        {
          "Sid": "TerminateManagedResources",
          "Effect": "Allow",
          "Action": [
            "ec2:TerminateInstances",
            "ec2:DeleteLaunchTemplate"
          ],
          "Resource": [
            "arn:aws:ec2:*:*:instance/*",
            "arn:aws:ec2:*:*:launch-template/*"
          ],
          "Condition": {
            "StringEquals": {
              "aws:ResourceTag/red-hat-managed": "true"
            }
          }
        },
        {
          "Sid": "PassInstanceRole",
          "Effect": "Allow",
          "Action": [
            "iam:PassRole"
          ],
          "Resource": "arn:aws:iam::*:role/*-ROSA-Worker-Role",
          "Condition": {
            "StringEquals": {
              "iam:PassedToService": [
                "ec2.amazonaws.com"
              ]
            }
          }
        },
        {
          "Sid": "ManageInstanceProfiles",
          "Effect": "Allow",
          "Action": [
            "iam:AddRoleToInstanceProfile",
            "iam:RemoveRoleFromInstanceProfile",
            "iam:DeleteInstanceProfile"
          ],
          "Resource": [
            "arn:aws:iam::*:instance-profile/rosa-service-managed-*"
          ]
        },
        {
          "Sid": "CreateInstanceProfiles",
          "Effect": "Allow",
          "Action": [
            "iam:CreateInstanceProfile",
            "iam:TagInstanceProfile"
          ],
          "Resource": [
            "arn:aws:iam::*:instance-profile/rosa-service-managed-*"
          ],
          "Condition": {
            "StringEquals": {
              "aws:RequestTag/red-hat-managed": "true"
            }
          }
        },
        {
          "Sid": "ReadInstanceProfiles",
          "Effect": "Allow",
          "Action": [
            "iam:GetInstanceProfile",
            "iam:ListInstanceProfiles"
          ],
          "Resource": "*"
        }
      ]
    },
    "VersionId": "v1",
    "IsDefaultVersion": true,
    "CreateDate": "2026-07-27T16:42:18+00:00"
  }
}

Version History (1 recorded)

Raw history
v1new policy

33 actions added

479b6e1