Deprecated

Removed from AWS on 2021-04-02 - Active for 3 years, 5 months

AWSLambdaFullAccess

Last Modified

Sep 16, 2019

September 16, 2019 at 03:19 PM UTC

Version

v8

Total Versions

6

Created

Nov 27, 2017

Actions

52

Risk

High

An unrestricted escalation path, identity administration, secret reads or the power to switch off security monitoring. Read from this policy document alone: trust policies, boundaries and SCPs in your account still decide what actually succeeds. How this is assessed

  • High

    Can change identities and their permissions

    Grants 1 permissions management action on IAM, IAM Identity Center or Organizations, on any resource with no condition.

    iam:passrole

    Use with caution: Grant it only to identity administrators, and protect your admin roles and SCPs with a permissions boundary or an SCP of their own.

  • High

    Can launch resources that run as a more privileged role

    Grants every action of 3 documented escalation paths on any resource with no condition.

    • lambda-001iam:PassRole + lambda:CreateFunction + lambda:InvokeFunctionunrestricted
    • lambda-002iam:PassRole + lambda:CreateFunction + lambda:CreateEventSourceMappingunrestricted
    • lambda-006iam:PassRole + lambda:CreateFunction + lambda:AddPermissionunrestricted

    Use with caution: Make sure no highly privileged role trusts the service involved, and restrict iam:PassRole in your own policies or boundary to named roles with iam:PassedToService.

  • High

    Can take over existing resources that run as another role

    Grants every action of 3 documented escalation paths on any resource with no condition.

    • lambda-003lambda:UpdateFunctionCodeunrestricted
    • lambda-004lambda:UpdateFunctionCode + lambda:InvokeFunctionunrestricted
    • lambda-005lambda:UpdateFunctionCode + lambda:AddPermissionunrestricted

    Use with caution: List the roles attached to the functions, instances, pipelines or notebooks it can modify: the holder effectively has them too.

  • Medium

    Can switch off security monitoring

    Can delete CloudWatch log groups, which is how an intruder hides.

    logs:DeleteLogGroup (via logs:*)

    Use with caution: Deny these actions with an SCP for everyone outside a break-glass role, so no single policy can blind you.

  • Medium

    Can read secrets

    Reads Lambda environment variables, where credentials often live, on any resource with no condition.

    lambda:GetFunctionConfiguration (via lambda:*)

    Use with caution: Where the holder needs only some secrets, write your own policy scoped to their ARNs or tags, and limit decryption in the KMS key policies.

  • Medium

    Can rewrite resource policies and sharing

    Grants 47 permissions management actions across 7 services (cloudwatch, dynamodb, events, iot, lambda, logs, ...) on any resource, enough to share resources outside the account.

    cloudwatch:assumeaccessprofilecloudwatch:createaccessgrantcloudwatch:createaccessprofilecloudwatch:createdomainaccessgrantfororganizationcloudwatch:deleteaccessgrantcloudwatch:deleteaccessprofilecloudwatch:deletedomainaccessgrantfororganizationcloudwatch:updateaccessprofiledynamodb:deleteresourcepolicydynamodb:putresourcepolicyevents:deleteresourcepolicyevents:putpermissionand 35 more

    Use with caution: Turn on IAM Access Analyzer external access findings, and keep account-level guards like S3 Block Public Access enabled.

  • Medium

    Can read data in every bucket or table

    Reads any object in any S3 bucket; any DynamoDB table. Read-only is not the same as harmless when the data is the asset.

    s3:GetObject (via s3:*)dynamodb:Scan (via dynamodb:*)dynamodb:GetItem (via dynamodb:*)

    Use with caution: Read access to data is still access to data. For people who only need to see configuration, ViewOnlyAccess carries none of these signals.

  • Medium

    Full access to 6 services on every resource

    Uses cloudwatch:*, dynamodb:*, events:*, lambda:*, logs:*, s3:* with Resource "*" and no condition, so every action AWS adds to those services later is granted too.

    cloudwatch:*dynamodb:*events:*lambda:*logs:*s3:*

    Use with caution: The grant grows every time the service does. For long-lived access, prefer a policy that lists the actions you actually need.

Policy Document

View on GitHub
{
  "PolicyVersion": {
    "Document": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "cloudformation:DescribeChangeSet",
            "cloudformation:DescribeStackResources",
            "cloudformation:DescribeStacks",
            "cloudformation:GetTemplate",
            "cloudformation:ListStackResources",
            "cloudwatch:*",
            "cognito-identity:ListIdentityPools",
            "cognito-sync:GetCognitoEvents",
            "cognito-sync:SetCognitoEvents",
            "dynamodb:*",
            "ec2:DescribeSecurityGroups",
            "ec2:DescribeSubnets",
            "ec2:DescribeVpcs",
            "events:*",
            "iam:GetPolicy",
            "iam:GetPolicyVersion",
            "iam:GetRole",
            "iam:GetRolePolicy",
            "iam:ListAttachedRolePolicies",
            "iam:ListRolePolicies",
            "iam:ListRoles",
            "iam:PassRole",
            "iot:AttachPrincipalPolicy",
            "iot:AttachThingPrincipal",
            "iot:CreateKeysAndCertificate",
            "iot:CreatePolicy",
            "iot:CreateThing",
            "iot:CreateTopicRule",
            "iot:DescribeEndpoint",
            "iot:GetTopicRule",
            "iot:ListPolicies",
            "iot:ListThings",
            "iot:ListTopicRules",
            "iot:ReplaceTopicRule",
            "kinesis:DescribeStream",
            "kinesis:ListStreams",
            "kinesis:PutRecord",
            "kms:ListAliases",
            "lambda:*",
            "logs:*",
            "s3:*",
            "sns:ListSubscriptions",
            "sns:ListSubscriptionsByTopic",
            "sns:ListTopics",
            "sns:Publish",
            "sns:Subscribe",
            "sns:Unsubscribe",
            "sqs:ListQueues",
            "sqs:SendMessage",
            "tag:GetResources",
            "xray:PutTelemetryRecords",
            "xray:PutTraceSegments"
          ],
          "Resource": "*"
        }
      ]
    },
    "VersionId": "v8",
    "IsDefaultVersion": true,
    "CreateDate": "2017-11-27T23:22:38Z"
  }
}

Version History (6 recorded)

Raw history

Update detected

No recorded action delta - this version predates the change index. View the raw diff.

Sep 16, 2019

49aa1d0

Update detected

No recorded action delta - this version predates the change index. View the raw diff.

Sep 16, 2019

71619cf

Update detected

No recorded action delta - this version predates the change index. View the raw diff.

Sep 16, 2019

8279033

`2019-08-29`

No recorded action delta - this version predates the change index. View the raw diff.

Aug 29, 2019

5016d52

I updated my CLI and it looks like it reordered everything and changed the white-space, so everything looks changed, but is not

No recorded action delta - this version predates the change index. View the raw diff.

Jul 12, 2019

9d2dff1

First commit

No recorded action delta - this version predates the change index. View the raw diff.

Feb 10, 2019

ad4c2e8