簡體   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