2017-08-19 127 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