难以定义有效的AWS角色

时间:2017-07-03 03:03:25

标签: amazon-web-services amazon-s3 aws-lambda

我正在尝试构建一个AWS Lambda函数,用于下载并将一些数据写入S3存储桶。我遇到的问题是对S3本身的写入操作会引发PermissionDenied错误。

这反过来暗示我没有正确地写这个角色。但是,我不确定我做错了什么。

我有五个存储桶,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" 
]
    }   
] }

有人可以发现我的错误吗?

2 个答案:

答案 0 :(得分: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之类的操作,您需要/* 1}}(它也可以是“文件夹”前缀,如<Bucket>/home/*

以下是test广告资源的sample policy。请注意/*

的用法
{
  "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/*"]
    }
  ]
}

答案 1 :(得分: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-*/*"
      ]
    }
  ]
}