2017-07-24 170 views
0

我对使用AWS策略生成器创建的S3存储桶具有以下策略,以允许使用特定角色运行的lambda访问存储桶中的文件。然而,当我执行LAMBDA,我得到403权限被拒绝:S3策略允许Lambda

"errorMessage": "Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: <requestId>)", 
    "errorType": "com.amazonaws.services.s3.model.AmazonS3Exception", 

在S3斗政策:

{ 
"Version": "2012-10-17", 
"Id": "Policy<number>", 
"Statement": [ 
    { 
     "Sid": "Stmt<number>", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::<account>:role/<roleName>" 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::<bucketName>/*" 
    } 
] 
} 

什么是错的政策? Lamba正在使用策略中配置的角色运行。

+0

我将从首先修改此策略开始,为所有权限提供所有权限..基本上删除Principal和bucketname ..这将告诉您,如果问题出现在您的s3策略或lambda中。 – Deepak

+0

为什么不将S3存储桶权限添加到分配给Lambda函数的IAM角色,而不是试图通过存储桶策略执行此操作? –

+0

你在做什么来自Lambda的水桶?有些操作需要资源在最后排除'/ *',其他操作需要包含''Resource':[“arn:aws:s3 ::: ”,“arn:aws:s3 ::: /*“]' –

回答

1

分配给AWS Lambda函数的角色应为已创建AWS Lambda角色(在IAM控制台中创建角色时选择)。

角色没有本金,因为权限被分配给任何服务(在本例中为Lambda函数)正在使用该角色。

此外,你应该在桶本身(例如,列出内容),并在桶(如到GetObject的)的内容分配权限。

这将是这样的:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "AllowS3Access", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:*" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::my-bucket", 
       "arn:aws:s3:::my-bucket/*" 
      ] 
     } 
    ] 
} 
+0

感谢您的回复。我在桶上设置的策略是正确的。缺少的是卷本身需要通过IAM连接AmazonS3FullAccess策略。 – FiguringThisOut

0

循环,因为我虽然我可以使它工作后,其过程是:

  1. 创建S3桶。
  2. 创建IAM策略(桶名称需要)
  3. 创建IAM角色(IAM政策需要)
  4. 创建拉姆达功能(需要IAM角色)
  5. 创建S3存储策略(lambda函数名需要)

IAM策略:

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "Stmt*******", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:PutObject", 
      "s3:PutObjectAcl", 
      "s3:PutObjectTagging", 
      "s3:PutObjectVersionAcl", 
      "s3:PutObjectVersionTagging" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::<bucket-name>" 
     ] 
    } 
] 
} 

,我使用的S3存储桶这一政策

{ 
"Id": "Policy************", 
"Version": "2012-10-17", 
"Statement": [ 
{ 
    "Sid": "Stmt********", 
    "Action": [ 
    "s3:PutObject", 
    "s3:PutObjectAcl", 
    "s3:PutObjectTagging", 
    "s3:PutObjectVersionAcl", 
    "s3:PutObjectVersionTagging" 
    ], 
    "Effect": "Allow", 
    "Resource": "arn:aws:s3:::<bucket-name>/*", 
    "Principal": { 
    "AWS": [ 
     "arn:aws:iam::*********:role/<lambda-function-name>" 
      ] 
      } 
     } 
    ] 
}