为 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 控制台中创建执行角色
-
在 IAM 控制台中,打开“Roles (角色)”页面
。 -
选择 Create role (创建角色)。
-
在 Common use cases(常用使用案例)下,请选择 Lambda。
-
请选择 Next: Permissions(下一步: 权限)。
-
在附加权限策略中,请选择 Amazon 托管策略 AmazonS3ObjectLambdaExecutionRolePolicy
。 -
请选择 Next: Tags(下一步: 标签)。
-
请选择下一步:审核。
-
对于 Role name (角色名称),输入
s3-object-lambda-role。 -
选择 Create role (创建角色)。
-
应用新创建的
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:TlsVersion 或 s3-object-lambda:AuthType。Amazon S3 评估所有其他上下文键,例如
s3:prefix。