问题:运行以下AWS Lambda代码时,我的访问被拒绝:
require 'json'
require "aws-sdk-s3"
def lambda_handler(event:, context:)
client = Aws::S3::Client.new(region: 'us-east-2')
record = event["Records"][0]
key = record.dig *%w(s3 object key)
client.copy_object({
bucket: "bucket-name",
copy_source: "#{key}",
key: "#{key}",
})
end
错误:
"errorType": "Function<Aws::S3::Errors::AccessDenied>",
我的IAM角色:
AmazonS3FullAccess
:AWS托管策略
AWSLambdaBasicExecutionRole-e41b74ba-3cef-4470-8f1c-3f900591016c
:托管策略
AWSConfigRulesExecutionRole
这不是很好吗?
lambda的目的是将上载到存储桶的文件复制到另一个存储桶。
答案 0 :(得分:0)
由于代码在AWS Lambda中运行,因此您的IAM角色权限对代码执行没有影响。相反,在这种情况下,Lambda执行角色需要具有S3权限。
您需要创建具有所需权限的新角色,并将Lambda执行角色更新为新创建的角色。
答案 1 :(得分:0)
require 'json'
require "aws-sdk-s3"
def lambda_handler(event:, context:)
client = Aws::S3::Client.new(region: 'us-east-2')
record = event["Records"][0]
key = record.dig *%w(s3 object key)
client.copy_object({
bucket: "bucket-name",
copy_source: "#{key}",
key: "#{key}",
})
end
需要为:
require 'json'
require "aws-sdk-s3"
def lambda_handler(event:, context:)
client = Aws::S3::Client.new(region: 'us-east-2')
record = event["Records"][0]
key = record.dig *%w(s3 object key)
client.copy_object({
bucket: "bucket-name",
copy_source: "/bucketname/#{key}",
key: "#{key}",
})
end
必须指定源,这是存储区名称/文件名
答案 2 :(得分:0)
copy_object()
命令要求:
您的代码仅引用一个存储桶名称,并且使用相同的密钥。
文档显示:
resp = client.copy_object({
bucket: "destinationbucket",
copy_source: "/sourcebucket/HappyFace.jpg",
key: "HappyFaceCopyjpg",
})
您会注意到copy_source
包含源存储桶名称。