【问题标题】:Why is uploading a file to s3 via the C# AWS SDK giving a permission denied error?为什么通过 C# AWS SDK 将文件上传到 s3 会出现权限被拒绝错误?
【发布时间】:2016-08-22 17:24:38
【问题描述】:

我正在尝试使我们的应用程序能够将文件上传到特定的 S3 存储桶。这个想法是锁定它,这样如果该应用程序的访问权限和密钥被泄露,恶意用户除了上传新文件之外无法做任何事情。

为了做到这一点,我创建了一个新的 IAM 策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::app-dev-raw-uploads"
            ]
        }
    ]
}

接下来我保存了策略并进入策略模拟器,并针对arn:aws:s3:::app-dev-raw-uploads s3 存储桶测试了 S3 PutObject 操作,模拟器给了我一个允许/成功的结果。

然后我创建了一个新的 IAM 用户并将该策略附加到该用户并保存。然后,我为该用户生成了一个访问密钥和秘密密钥,并将其插入我的应用程序。然后我的应用程序尝试使用以下代码进行上传:

    private static async Task PerformUpload(IIngestControllerSettings settings, string destinationPath, string sourcePath, CancellationToken cancellationToken)
    {
        var credentials = new BasicAWSCredentials(settings.AwsAccessKey, settings.AwsSecretKey);
        var region = RegionEndpoint.GetBySystemName(settings.AwsRegionName);
        var client = new AmazonS3Client(credentials, region);
        var fileTransferUtility = new TransferUtility(client);

        await fileTransferUtility.UploadAsync(sourcePath, settings.ArchivalStorageServiceContainerName, destinationPath, cancellationToken);
    }

当我使用我的(临时)个人 AWS 密钥时,此代码运行良好,但在此用户的访问/秘密密钥下我得到:

Amazon.S3.AmazonS3Exception: Access Denied ---> Amazon.Runtime.Internal.HttpErrorResponseException: 远程服务器返回错误:(403) Forbidden。 ---> System.Net.WebException:远程服务器返回错误:(403) Forbidden。

知道我做错了什么吗?

编辑: 由于我能够使用这些密钥凭证通过 AWS CLI 上传文件,因此 AWS SDK TransferUtility 类似乎需要比 PutObject 更多的权限才能上传文件,但我找不到任何关于这些文件的参考。

【问题讨论】:

  • 您是否尝试使用新的用户凭证并从 AWS CLI 而不是 SDK 执行将对象放入 s3 存储桶并检查用户是否能够将新对象添加到 s3 存储桶?
  • 使用 AWS CLI 工具,我可以通过 aws cp c:\temp\test.ts s3://app-dev-raw-uploads/ 成功上传带有此密钥的文件

标签: c# amazon-web-services amazon-s3


【解决方案1】:

AWS SDK 的TransferUtility 似乎还需要GetObject 权限才能成功上传文件。工作政策似乎是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::app-dev-raw-uploads",
                "arn:aws:s3:::app-dev-raw-uploads/*"
            ]
        }
    ]
}

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2015-08-06
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多