以下是使用AWS Amplify和Lambda函数调用保护S3文件的代码示例解决方法:
npm install -g @aws-amplify/cli
amplify configure
amplify init
amplify add function
在提示中选择“Serverless function(使用AWS Lambda)”,然后为函数提供一个名称。
index.js的文件。在此文件中,您可以编写您的Lambda函数的代码。在此示例中,我们将使用Node.js编写代码:const AWS = require('aws-sdk');
const s3 = new AWS.S3();
exports.handler = async (event) => {
const bucketName = 'your-s3-bucket-name'; // 替换为您的S3存储桶名称
const fileName = 'your-file-name'; // 替换为您要访问的文件名称
// 创建S3对象并获取文件内容
const params = {
Bucket: bucketName,
Key: fileName
};
try {
const data = await s3.getObject(params).promise();
console.log('File contents:', data.Body.toString());
return {
statusCode: 200,
body: 'File contents: ' + data.Body.toString()
};
} catch (error) {
console.error('Error:', error);
return {
statusCode: 500,
body: 'Error: ' + error
};
}
};
amplifybackend\function\function-name-cloudformation-template.json的文件。在此文件中,您可以定义Lambda函数的资源和访问权限。确保为函数添加以下内容:"Resources": {
"FunctionNameLambdaExecutionRole": {
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
}
}
],
"Version": "2012-10-17"
},
"ManagedPolicyArns": [
"arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
"arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess" // 允许Lambda函数读取S3文件的权限
]
},
"Type": "AWS::IAM::Role"
},
"FunctionNameLambdaFunction": {
"Properties": {
"Code": {
"S3Bucket": "your-s3-bucket-name", // 替换为您的S3存储桶名称
"S3Key": "amplify/backend/function/function-name/build/function-name.zip" // 替换为Lambda函数的路径
},
"Environment": {
"Variables": {}
},
"FunctionName": "function-name", // 替换为您的Lambda函数名称
"Handler": "index.handler",
"MemorySize": 128,
"Role": {
"Fn::GetAtt": [
"FunctionNameLambdaExecutionRole",
"Arn"
]
},
"Runtime": "nodejs14.x",
"Timeout": 10
},
"Type": "AWS::Lambda::Function"
}
}
amplify push
amplify add api
在提示中选择“REST”和“Amazon Cognito User Pool”。
amplifybackend\api\apiname\cloudformation-template.json的文件。在此文件中,找到AWS::Serverless::Function资源并添加以下内容:"Events": {
"GetEvent": {
"Type": "Api",