2017-08-19 173 views
0

我目前的S3存儲桶策略全局啓用s3:getObjects3:putObject,我試圖通過指定存儲桶策略來限制它。允許Lambda函數將對象專門放入S3存儲桶

雖然s3:getObject是安全的,但我想限制只能訪問s3:putObject到特定的AWS Lambda函數。

該功能通過對CloudFront的HTTP請求進行匿名觸發,因此不涉及AWS用戶。

如何通過Lambda的ARN標識符限制訪問?

目前的政策:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "PublicReadGetObject", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:getObject", 
      "Resource": "arn:aws:s3:::{bucket_name}/*" 
     }, 
     { 
      "Sid": "LambdaPutObject", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:putObject", 
      "Resource": "arn:aws:s3:::{bucket_name}/*" 
     } 
    ] 
} 

回答

0

其實,這是所需的全部是創建拉姆達訪問策略。有預定義的,如lambda_basic_execution

角色配置可以在AWS控制檯發現裏面:

Lambda > Functions > {name} > Roles IAM > Roles

這裏是幫了我一個特定的配置:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "logs:CreateLogGroup", 
       "logs:CreateLogStream", 
       "logs:PutLogEvents" 
      ], 
      "Resource": "arn:aws:logs:*:*:*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": "s3:PutObject", 
      "Resource": "arn:aws:s3:::{bucket_name}/*" 
     } 
    ] 
} 
+0

如果我正確地讀出你原來的問題,您無法僅通過爲您的Lambda函數創建IAM角色來限制寫入該S3存儲桶的人員/內容。所做的只是限制Lambda函數的功能。如果您希望Lambda函數以及只有Lambda函數能夠寫入該存儲桶,那麼您需要更多(例如,在VPC中啓動Lambda並修改S3存儲桶策略以限制對該VPC的訪問)。 – jarmod

+0

從桶策略中刪除'「Action」:「s3:putObject」,'Statement I後,我無法匿名寫入存儲區(僅在以所有者身份登錄時)。在Lambda的IAM策略中添加'「Action」:「s3:PutObject」,允許它寫入存儲桶。這就是我最初想要的,爲什麼我需要更多? –

+0

聽起來不錯。你應該接受你的答案。 – jarmod