2017-07-03 40 views
1

我正在嘗試構建一個AWS Lambda函數,用於將一些數據下載並寫入S3存儲桶。我遇到的問題是S3中的寫操作本身會產生一個PermissionDenied錯誤。定義AWS工作的難度

這反過來意味着我沒有正確書寫角色。但是,我不確定我做錯了什麼。

我有五個桶,所有的一些變化mta-gtfs-N。我已將以下角色分配到Lambda函數:

{ "Version": "2012-10-17", "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "logs:CreateLogGroup", 
     "logs:CreateLogStream", 
     "logs:PutLogEvents", 
     "s3:*" 
     ], 
     "Resource": [ 
"arn:aws:s3:::mta-gtfs-1", 
"arn:aws:s3:::mta-gtfs-21", 
"arn:aws:s3:::mta-gtfs-11", 
"arn:aws:s3:::mta-gtfs-16", 
"arn:aws:s3:::mta-gtfs-2" 
] 
    } 
] } 

任何人都可以發現我的錯誤嗎?

回答

3

您需要在資源字符串的末尾添加一個/*以允許訪問存儲區內的操作。例如:arn:aws:s3:::mta-gtfs-1/*

所以你Resource陣列應該是

"Resource": [ 
    "arn:aws:s3:::mta-gtfs-1/*", 
    "arn:aws:s3:::mta-gtfs-21/*", 
    "arn:aws:s3:::mta-gtfs-11/*", 
    "arn:aws:s3:::mta-gtfs-16/*", 
    "arn:aws:s3:::mta-gtfs-2/*" 
] 

你的上述資源部分政策將允許操作,比如GetPut對象。如果要進行桶級別操作(如S3:ListBucket),則需要省略/*並按照當前使用的方式使用資源名稱,但對於像S3:*Object這樣的操作,您需要/*(它也可以是「文件夾」前綴,如<Bucket>/home/*

這裏是一個sample policytest桶。需要注意的/*

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": ["s3:ListBucket"], 
     "Resource": ["arn:aws:s3:::test"] 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:PutObject", 
     "s3:GetObject", 
     "s3:DeleteObject" 
     ], 
     "Resource": ["arn:aws:s3:::test/*"] 
    } 
    ] 
} 
+0

接受這個答案,因爲當哈立德的回答工作,這一個解釋爲什麼* *它的工作原理。 –

1

你的政策的使用應重新寫爲:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "logs:CreateLogGroup", 
     "logs:CreateLogStream", 
     "logs:PutLogEvents" 
     ], 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:ListBucket" 
     ], 
     "Resource": [ 
     "arn:aws:s3:::mta-gtfs-*" 
     ] 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:GetObject", 
     "s3:PutObject", 
     "s3:DeleteObject", 
     "s3:AbortMultipartUpload", 
     "s3:ListMultipartUploadParts", 
     "s3:ListBucketMultipartUploads" 
     ], 
     "Resource": [ 
     "arn:aws:s3:::mta-gtfs-*/*" 
     ] 
    } 
    ] 
}