为对象 Lambda 接入点配置 IAM 策略 - Amazon Simple Storage Service

为对象 Lambda 接入点配置 IAM 策略

Amazon S3 接入点支持 AWS Identity and Access Management(IAM)资源策略,您可以使用这些策略按资源、用户或其他条件控制接入点的使用。您可以通过对象 Lambda 接入点上的可选资源策略或支持接入点上的资源策略来控制访问权限。有关分步示例,请参阅 教程:使用 S3 对象 Lambda 转换应用程序的数据教程:使用 S3 对象 Lambda 和 Amazon Comprehend 检测和修订 PII 数据

以下四项资源必须已获得使用对象 Lambda 接入点的权限:

  • IAM 身份,例如用户或角色。有关 IAM 身份和最佳实践的更多信息,请参阅《IAM 用户指南》中的 IAM 身份(用户、用户组和角色)

  • 存储桶及其关联的标准接入点。当您使用对象 Lambda 接入点时,此标准接入点称为支持接入点

  • 对象 Lambda 接入点。

  • AWS Lambda 函数。

重要

在保存策略之前,确保解决来自 AWS Identity and Access Management Access Analyzer 的安全警告、错误、一般警告和建议。IAM Access Analyzer 将根据 IAM 策略语法最佳实践运行策略检查,以验证您的策略。这些检查项生成结果并提供可操作的建议,可帮助您编写可操作且符合安全最佳实践的策略。

要了解有关使用 IAM Access Analyzer 验证策略的更多信息,请参阅《IAM 用户指南》中的 IAM Access Analyzer 策略验证。要查看 IAM Access Analyzer 返回的警告、错误和建议的列表,请参阅 IAM Access Analyzer 策略检查引用

以下策略示例假设您具有以下资源:

  • 具有以下 Amazon 资源名称(ARN)的 Amazon S3 存储桶:

    arn:aws:s3:::amzn-s3-demo-bucket1

  • 此存储桶上具有以下 ARN 的 Amazon S3 standard 接入点:

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

  • 具有以下 ARN 的对象 Lambda 接入点:

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

  • 具有以下 ARN 的 AWS Lambda Lambda 函数:

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

注意

如果使用您的账户中的 Lambda 函数,则必须在策略声明中包含具体的函数版本。在以下示例 ARN 中,版本由 1 表示:

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

Lambda 不支持向版本 $LATEST 中添加 IAM 策略。有关 Lambda 函数版本的更多信息,请参阅《AWS Lambda 开发人员指南》中的 Lambda 函数版本

例 – 将访问控制委派给标准接入点的存储桶策略

下面的 S3 存储桶策略示例将存储桶的访问控制委派给存储桶的标准接入点。此策略允许对存储桶拥有者账户所拥有的所有接入点进行完全访问。因此,对此存储桶的所有访问都由附加到其接入点的策略控制。用户只能通过接入点从存储桶读取,这意味着您只能通过接入点调用操作。有关更多信息,请参阅 将访问控制委派到接入点

{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS":"account-ARN"}, "Action" : "*", "Resource" : [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" } } }] }
例 – 向用户授予使用对象 Lambda 接入点的必需权限的 IAM 策略

以下 IAM 策略授予用户对 Lambda 函数、标准接入点和对象 Lambda 接入点的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLambdaInvocation", "Action": [ "lambda:InvokeFunction" ], "Effect": "Allow", "Resource": "arn:aws:lambda:us-east-1:111122223333:function:MyObjectLambdaFunction:1", "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 执行角色的权限

当向对象 Lambda 接入点发出 GET 请求时,Lambda 函数需要将数据发送到 S3 对象 Lambda 接入点的权限。可通过对 Lambda 函数的执行角色启用 s3-object-lambda:WriteGetObjectResponse 权限来提供此权限。您可以创建新角色,或更新现有角色。

注意

仅当您发出 GET 请求时,函数才需要 s3-object-lambda:WriteGetObjectResponse 权限。

在 IAM 控制台中创建执行角色
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧导航窗格中,选择 Roles(角色)

  3. 选择 Create role(创建角色)

  4. Common use cases(常用使用案例)下,请选择 Lambda

  5. 选择下一步

  6. Add permissions(添加权限)页面上,搜索 AWS 托管式策略 AmazonS3ObjectLambdaExecutionRolePolicy,然后选中策略名称旁边的复选框。

    该策略应包含 s3-object-lambda:WriteGetObjectResponse 操作。

  7. 选择下一步

  8. Name, review, and create(名称、查看和创建)页面上,对于 Role name(角色名称),输入 s3-object-lambda-role

  9. (可选)为该角色添加描述和标签。

  10. 选择 Create role(创建角色)

  11. 应用新创建的 s3-object-lambda-role 作为 Lambda 函数的执行角色。这可以在 Lambda 控制台中创建 Lambda 函数期间或之后完成。

有关执行角色的更多信息,请参阅 AWS Lambda 开发人员指南中的 Lambda 执行角色

将上下文键与对象 Lambda 接入点结合使用

S3 对象 Lambda 将评估与请求的连接或签名相关的上下文键,如 s3-object-lambda:TlsVersions3-object-lambda:AuthType。Amazon S3 评估所有其他上下文键,例如 s3:prefix