2017-07-24 168 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>" 
      ] 
      } 
     } 
    ] 
}