2017-07-03 44 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-*/*" 
     ] 
    } 
    ] 
}