Configuring IAM policies for Object Lambda access points - Amazon Simple Storage Service

Configuring IAM policies for Object Lambda access points

S3 access points support AWS Identity and Access Management (IAM) resource policies that allow you to control the use of the access point by resource, user, or other conditions.

In the case of a single AWS account, the following four resources must have permissions granted to work with Object Lambda access points:

  • The IAM user or role

  • The bucket and associated standard access point

  • The Object Lambda access point

  • The AWS Lambda function

These examples assume that you have the following resources:

  • An Amazon S3 bucket with following Amazon Resource Name (ARN):

    arn:aws:s3:::DOC-EXAMPLE-BUCKET1

    The S3 bucket policy example below delegates access control for a bucket to the bucket's access points. This allows full access to all access points owned by the bucket owner's account. Thus, all access to this bucket is controlled by the policies attached to its access points. Users can read from the bucket only through the S3 Access Point, allowing you to invoke operations only via access points. For more information, see Delegating access control to access points.

    Example bucket policy delegating access control to access points

    { "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS":"account-ARN"}, "Action" : "*", "Resource" : [ "DOC-EXAMPLE-BUCKET1", "DOC-EXAMPLE-BUCKET1/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" } } }] }
  • An Amazon S3 standard access point on this bucket with the following ARN:

    arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point

  • An Object Lambda access point with the following ARN:

    arn:aws:s3-object-lambda:us-east-1:111122223333:accesspoint/my-object-lambda-ap

  • An AWS Lambda function with the following ARN:

    arn:aws:lambda:us-east-1:111122223333:function/MyObjectLambdaFunction

Note

If using a Lambda function from your account you must include the function version in your policy statement. For example, arn:aws:lambda:us-east-1:111122223333:function/MyObjectLambdaFunction:$LATEST

The following IAM policy grants a user permission to the Lambda function, standard access point and the S3 Object Lambda access point.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLambdaInvocation", "Action": [ "lambda:InvokeFunction" ], "Effect": "Allow", "Resource": "arn:aws:lambda:us-east-1:111122223333:function/MyObjectLambdaFunction:$LATEST", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": [ "s3-object-lambda.amazonaws.com" ] } } }, { "Sid": "AllowStandardAccessPointAccess", "Action": [ "s3: Get*", "s3: List*" ], "Effect": "Allow", "Resource": "arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/*", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": [ "s3-object-lambda.amazonaws.com" ] } } }, { "Sid": "AllowObjectLambdaAccess", "Action": [ "s3-object-lambda:Get*", "s3-object-lambda:List*" ], "Effect": "Allow", "Resource": "arn:aws:s3-object-lambda:us-east-1:111122223333:accesspoint/my-object-lambda-ap" } ] }

Lambda execution role

Your Lambda function needs permission to send data to S3 Object Lambda when requests are made to an Object Lambda access point. This is provided by enabling the s3-object-lambda:WriteGetObjectResponse permission on your Lambda function's execution role. You can create a new execution role or update an existing one.

To create an execution role in the IAM console

  1. Open the Roles page in the IAM console.

  2. Choose Create role.

  3. Under Common use cases, choose Lambda.

  4. Choose Next: Permissions.

  5. Under Attach permissions policies, choose the AWS managed policy AmazonS3ObjectLambdaExecutionRolePolicy.

  6. Choose Next: Tags.

  7. Choose Next: Review.

  8. For Role name, enter s3-object-lambda-role.

  9. Choose Create role.

  10. Apply the newly created s3-object-lambda-role as your Lambda function's execution role.

For detailed instructions, see Creating a role for an AWS service (console) in the IAM User Guide.

To update your Lambda function's execution role

Add the following statement to the execution role that is used by the Lambda function.

{ { "Sid": "AllowObjectLambdaAccess", "Action": ["s3-object-lambda:WriteGetObjectResponse"], "Effect": "Allow", "Resource": "*" }

For more information about execution roles see, Lambda execution role in the AWS Lambda Developer Guide.

Using context keys with Object Lambda access points

With S3 Object Lambda, GET requests will automatically invoke Lambda functions and all other requests will be forwarded to S3. S3 Object Lambda will evaluate context keys such as s3-object-lambda:TlsVersion or s3-object-lambda:AuthType related to the connection or signing of the request. All other context keys, such as s3:prefix, are evaluated by S3.