我对Amazon AWS平台相当陌生。
我的实现场景是这样的,我需要一个具有公共读取权限的S3存储桶来存储用户的个人资料图片和其他网站的静态图像,如徽标和背景。应用程序的用户可以上传个人资料图片。
当我尝试访问这个S3存储桶时,我得到了403禁止的错误。
通过阅读一些博客,我做到了以下几点,但不确定我到底错在哪里。
步骤1:为具有公共读取访问权限的区域US-EAST-2(与EC2实例相同的区域)创建一个名为“test.domain.com”的S3 bucked。
步骤2:创建具有以下配置的策略
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListObject"
],
"Resource": [
"arn:aws:s3:::test.domain.com/*"
]
}
步骤3:为Amazon EC2创建一个新角色,并附上上面创建的策略。
步骤4:将新创建的角色附加到EC2实例
步骤5:使用VS2015附带的预定义模板创建一个MVC应用程序,通过nuget package manager安装Amazon AWSSDK,并编写以下代码以查看是否一切正常。
//getting instanceprofilecredentials
var profile = new InstanceProfileAWSCredentials();
//creating s3 client with credentials and region
var s3= new AmazonS3Client(profile, Amazon.RegionEndpoint.USEast2);
//creating a new request and assigning bucket name
var request = new ListObjectsRequest();
request.BucketName = "test.domain.com";
//sending the request
var response = s3.ListObjects(request);
//counting no of existing objects
int totalObjects=response.S3Objects.Count;
//display as controllers action result
return Content(totalObjects)
步骤6:使用VS2015的web deploy部署应用程序。
对您的任何帮助都将不胜感激。非常感谢。
添加以下策略规则以允许基于角色的访问已解决此问题
{
"Sid": "AllowPassRole",
"Effect": "Allow",
"Action": [
"iam:PassRole",
"iam:ListInstanceProfiles"
],
"Resource": "*"
}
我认为您需要将Principal
元素添加到bucket策略中。我在下面代码中添加的行将允许每个人访问。
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListObject"
],
"Resource": [
"arn:aws:s3:::test.domain.com/*"
]
}
使用Java AWS SDK,我创建了一个lambda函数来从s3 bucket读取csv文件。我已经将bucket公之于众,可以从任何浏览器轻松访问它和文件。为了测试它,我使用lambda控制台上的test按钮。我正在使用hello world测试配置输入模板。 它失败的原因是: 错误消息:指定的桶无效。(服务:Amazon S3;状态代码:400;错误代码:InvalidBucketName;
我正在开发一个web应用程序,作为与Google云存储(GCS)的接口。 我正在使用后端服务来检索我存储在GCS上的文件列表及其使用JSON API的URL,并将其返回到我的Web应用程序。然而,我真的无法通过这些URL加载文件,总是返回403禁止。 我不确定GCS身份验证在幕后是如何工作的,也不确定是否可以直接授予对网络应用程序的访问权限。我不确定如何通过超文本传输协议请求附加应用程序鉴别信息。
我正在尝试使用脚本从部署在谷歌云中的Hadoop集群访问谷歌存储桶。如果bucket访问是只读的,则会失败。 我在做什么: > 使用 在主机上: 看看GCS Java源代码,Google Cloud Storage Connector for Hadoop似乎需要空的“目录”对象,如果bucket是可写的,它可以自己创建这些对象;否则它就失败了。设置导致“检索对象时出错”错误。 是否可以以某种方式
我一直在我的项目中使用基于azure定时器的功能。自从我开始使用该功能以来,我收到了与Azure存储帐户禁止访问相关的错误403。 我尝试在函数的配置中添加AzureWebJobs存储密钥我尝试添加azure存储帐户的允许ip范围的出站ip我尝试检查允许azure托管服务进入存储帐户的选项。 然而,我的函数应用程序中的特定计时器函数仍然存在错误。其他功能运行正常。 尽管如此,如果我允许存储帐户防火