S3需要哪些权限,以便让AWS MediaConverter能够访问并写入文件?

3
我们正在使用AWS MediaConverter将视频转换为mp4格式。但是MediaConverter在作业中出现了以下错误:
Unable to write to output file [s3://{path_to_file}]: [Failed to write data: Access Denied]

显然,MediaConverter没有写入bucket的权限,但我不知道如何授予它们权限。
我们对S3有以下策略:
{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{CloudFront-origin}"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{S3-bucket}/*"
        },
        {
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::{role-for-our-API}",
                    "arn:aws:iam::{MediaConverter-role}"
                ]
            },
            "Action": "*",
            "Resource": "arn:aws:s3:::{S3-bucket}/*"
        }
    ]
}

我们的ACL仅授予桶所有者写入和列表权限。以前,每个人都可以列出和写入对象,媒体转换器也可以工作,但是我们发现不能接受每个人都有列出和写入权限。

每个点的公共访问都已关闭。

我们用于API的IAM用户和用于MediaConverter的角色都具有S3(AmazonS3FullAccess)的所有权限。

非常感谢任何帮助,谢谢。


你找到解决方法了吗? - Meo Beo
5个回答

2
我希望您确保在Mediaconvert作业设置中将 AccessControl 设置为 BUCKET_OWNER_FULL_CONTROL。听起来这个设置没有在作业设置中被设置,因为存储桶要求对象使用Bucket owner full control ACL进行设置。
设置可以在所有输出组设置下的目标设置中找到。
"DestinationSettings": {
              "S3Settings": {
              "AccessControl": {
              "CannedAcl": "BUCKET_OWNER_FULL_CONTROL"
            }
          }

问候
迈克尔


嗨,Michael,感谢您的回复。我们之前已经使用了PUBLIC_READ,但是我还是尝试了一下这个方法,但并没有帮助。 - julia adamchuk

0

我曾经遇到同样的问题。我使用默认的 MediaConvert 角色进行修改,但是它没有我所需要的权限。

后来,我为 MediaConvert 创建了一个新的角色。

将其命名为 MediaConvertRole

策略

注意:点击 "附加策略" 按钮,这些都是亚马逊提供的预先制定的策略,您不必自己从头开始创建。

  1. AmazonS3FullAccess

此策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": "*"
        }
    ]
}
  1. AmazonAPIGatewayInvokeFullAccess

该策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke",
                "execute-api:ManageConnections"
            ],
            "Resource": "arn:aws:execute-api:*:*:*"
        }
    ]
}

在创建MediaConvert作业时,请确保选择正确的角色:

mediaconvert role select


0

@uliaadamchuk 试着创建一个新的角色(例如:media-converter),并将角色 ARN 添加到作业设置中:

步骤1:进入 IAM 角色 > 创建角色 > 查找 MediaConverter 并附加 AmazonS3FullAccessAmazonAPIGatewayInvokeFullAccess(可选)策略,或使用下面的 JSON 版本:

MediaConverter TwoPoliciesAttach createRole

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

AmazonS3FullAccess

步骤2:在媒体转换器作业设置中>设置>添加IAM角色>添加角色ARN:例如- "arn:aws:iam::741xxxxxx:role/media-converter"

步骤3:创建作业并检查是否正常工作!


嘿,Adarsh,我们已经为MediaConverter角色拥有AmazonS3FullAccess策略,所以我只添加了AmazonAPIGatewayInvokeFullAccess,但这并没有起作用。 - julia adamchuk
@juliaadamchuk 很抱歉听到这个消息,但您确定在作业设置中使用了正确的角色 ARN 吗?也许您提供的那个没有访问 s3 的权限。 - adarsh kavtiyal
是的,我已经仔细检查过了。 - julia adamchuk
与@juliaadamchuk相同的问题 - Umar Sid

0

我遇到了同样的错误,即使我的S3权限正确,导致这个问题的原因与MichaelTam提到的一样,CannedAcl与桶权限不匹配。我使用的存储桶没有公共访问权限,但作业设置中指定了我的CannedAcl具有公共访问权限。

我认为存储桶和作业的其他设置也可能存在不匹配并导致此错误的组合。在一个拥有文件所有者对象写入者身份的被公共访问阻止的存储桶上,将BUCKET_OWNER_FULL_CONTROL设置为我解决了这个问题。


0

我认为配置应该如下所示。请注意"Action"和"Resource"中的更改,您遗漏了顶级存储桶。

{
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::{role-for-our-API}",
                    "arn:aws:iam::{MediaConverter-role}"
                ]
            },
            "Action": "s3:*",
            "Resource": ["arn:aws:s3:::{S3-bucket}","arn:aws:s3:::{S3-bucket}/*" ]
}

嗨,谢谢您的回复,但是它没有帮助,MediaConverter显示相同的错误。 - julia adamchuk
嗨,@juliaadamchuk。让我审核一下,很快就会回复你。 - Arek Chojak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接