为 Object Lambda 访问点配置 IAM policy - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

为 Object Lambda 访问点配置 IAM policy

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

对于单个 Amazon Web Services 账户,以下四项资源必须具有使用 Object Lambda 访问点的权限:

  • IAM 用户或角色

  • 存储桶和关联的标准访问点

  • Object Lambda 访问点

  • Amazon Lambda 函数

确保解决来自 Amazon Identity and Access Management Access Analyzer 的安全警告、错误、一般警告和建议,然后再保存策略。IAM Access Analyzer 将根据 IAM policy grammar(策略语法)和 best practices(最佳实践)运行策略检查,以验证您的策略。这些检查项生成结果并提供可操作的建议,可帮助您编写可操作且符合安全最佳实践的策略。要了解有关使用 IAM Access Analyzer 验证策略的更多信息,请参阅 IAM 用户指南中的 IAM Access Analyzer 策略验证。要查看 IAM Access Analyzer 返回的警告、错误和建议的列表,请参阅 IAM Access Analyzer 策略检查引用

这些示例假设您具有以下资源:

  • Amazon S3 存储桶具有以下 Amazon Resource Name (ARN):

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

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

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

    { "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS":"account-ARN"}, "Action" : "*", "Resource" : [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" } } }] }
  • 此存储桶上具有以下 ARN 的 Amazon S3 standard 访问点:

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

  • 具有以下 ARN 的 Object Lambda 访问点:

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

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

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

注意

如果使用您的账户中的 Lambda 函数,则必须在策略声明中包含函数版本。例如,arn:aws:lambda:us-east-1:111122223333:function:MyObjectLambdaFunction:$LATEST

以下 IAM policy 授予用户对 Lambda 函数、标准访问点和S3 对象 Lambda 访问点的权限。

{ "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 执行角色

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

在 IAM 控制台中创建执行角色

  1. 在 IAM 控制台中,打开“Roles (角色)”页面

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

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

  4. 请选择 Next: Permissions(下一步: 权限)。

  5. 附加权限策略中,请选择 Amazon 托管策略 AmazonS3ObjectLambdaExecutionRolePolicy

  6. 请选择 Next: Tags(下一步: 标签)。

  7. 请选择下一步:审核

  8. 对于 Role name (角色名称),输入 s3-object-lambda-role

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

  10. 应用新创建的 s3-object-lambda-role 作为 Lambda 函数的执行角色。

有关详细说明,请参阅 IAM 用户指南中的为 Amazon 服务(控制台)创建一个角色

更新 Lambda 函数的执行角色

将以下语句添加到 Lambda 函数使用的执行角色中。

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

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

将上下文键与 Object Lambda 访问点结合使用

借助 S3 对象 Lambda,GET 请求将自动调用 Lambda 函数,且所有其他请求将转发到 Amazon S3。S3 Object Lambda 将评估与请求的连接或签名相关的上下文键,如 s3-object-lambda:TlsVersions3-object-lambda:AuthType。Amazon S3 评估所有其他上下文键,例如 s3:prefix