繁体   English   中英

AWS S3 存储桶访问文件权限

[英]AWS S3 Bucket Access file permission

我不是 AWS 专家,所以我需要一些帮助来配置对 S3 存储桶音频文件的访问策略。 快速解释:我正在尝试调用 lambda function 并从具有私有访问权限的 S3 存储桶访问音频文件。 我的 lambda function(相同的 aws 帐户)应该能够通过其 URI 访问 mp3 文件。

详细信息:我正在 .NET 中开发一项 Alexa 技能,该技能托管在 AWS Lambda 上。该技能需要播放将从 S3 存储桶中检索的音频。 我能够播放音频的唯一方法是让每个人都可以访问 mp3 文件(允许公共访问),但我只想限制我的 lambda function(相同的 aws 帐户)的访问。 换句话说:我不希望任何人都可以访问这些文件,只有我的 lambda function。每当我配置访问策略时,alexa 技能不再访问该文件并返回:“无法建立连接提供的音频文件 URI"

我试过:

  1. 在 IAM 管理控制台上创建角色
  2. 创建内联策略并附加所有 S3 列表和任何资源的读取权限
  3. 将创建的角色设置为我的 lambda function 执行角色

但它不起作用。

任何人都知道如何正确配置它?

参考: lambda-execution-role-s3-bucket

您应该创建一个 IAM 角色并将该 IAM 角色与 AWS Lambda function 相关联。

IAM 角色应具有以下权限:

  • AWSLambdaBasicExecutionRole托管策略,它允许 Lambda function 将日志记录发送到 CloudWatch Logs(请参阅Lambda 执行角色 - AWS Lambda
  • 允许 Lambda function 访问 Amazon S3 存储桶的策略,类似于:
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"s3:ListBucket",
         "Resource":"arn:aws:s3:::BUCKET-NAME"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:DeleteObject"
         ],
         "Resource":"arn:aws:s3:::BUCKET-NAME/*"
      }
   ]
}

此策略授予 Lambda function 列出存储桶内容以及从存储桶上传/下载/删除对象的权限。

如果只是想让Lambda function读取bucket中的文件,可以缩减为:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"s3:GetObject"
         "Resource":"arn:aws:s3:::BUCKET-NAME/*"
      }
   ]
}

@Anon Coward 的建议很管用!

您是在尝试读取 Lambda 中的音频文件,还是将链接传递给 Alexa 以使其在设备上播放? 如果您要传递一个链接,您可能需要传递一个预签名的 URL 以便设备可以访问数据。 – Anon Coward 11 月 24 日 5:47

我没有意识到,当我通过 REST API 向 Alexa 提供 URI 时,我自己的 function 不会解析它。因此,Alexa 无法访问任何文件。 谢谢大家!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM