首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >授予EC2实例对S3桶的访问权限

授予EC2实例对S3桶的访问权限
EN

Stack Overflow用户
提问于 2016-05-10 09:37:08
回答 5查看 5.3K关注 0票数 2

我希望授予我的ec2实例对s3桶的访问权。

在这个ec2实例上,启动一个带有我的应用程序的容器。现在,我没有获得s3桶的许可。

这是我的水桶政策

代码语言:javascript
复制
{
"Version": "2012-10-17",
"Id": "Policy1462808223348",
"Statement": [
    {
        "Sid": "Stmt1462808220978",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::714656454815:role/ecsInstanceRole"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::bucket-name/*",
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "private-ip/32"
            }
        }
    }
]
}

但在我给水桶每个人访问它的许可之前,它是行不通的。

我试图在s3桶中从ec2实例中压缩文件,但这也不起作用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-05-11 04:42:50

没有将"EC2“实例访问AWS服务器的直接方法,但您可以尝试以下方法。

  1. 在AWS中创建一个新用户,并下载凭据文件。
  2. 此用户将表示您的EC2服务器。
  3. 向用户提供S3桶的权限。
  4. 接下来,将凭据文件放置在以下位置: EC2 - Windows实例: 把凭证文件放在任何你想要的地方。(例如C:/全权证书) b.创建一个环境变量AWS_CREDENTIAL_PROFILES_FILE,并将值作为放置凭据文件的路径(例如C:/凭据) EC2 - Linux实例 a.从windows实例中执行步骤 b.在应用服务器的根文件夹(例如/usr/ .aws /tomcat6 6)中创建一个文件夹。 c.在环境变量和.aws文件夹sudo ln -s $AWS_CREDENTIAL_PROFILES_FILE /usr/share/tomcat6/.aws/credentials之间创建一个符号链接。
  5. 现在您的凭据文件已经放置好了,您可以使用Java代码访问桶。 注释__:为此需要AWS库
代码语言:javascript
复制
    AWSCredentials credentials = null;
            try {
                credentials = new ProfileCredentialsProvider().getCredentials();
            } catch (Exception e) {
                LOG.error("Unable to load credentials " + e);
                failureMsg = "Cannot connect to file server.";
                throw new AmazonClientException(
                        "Cannot load the credentials from the credential profiles file. " +
                        "Please make sure that your credentials file is at the correct " +
                        "location (environment variable : AWS_CREDENTIAL_PROFILES_FILE), and is in valid format.",
                        e);
            }

            AmazonS3 s3 = new AmazonS3Client(credentials);
            Region usWest2 = Region.getRegion(Regions.US_WEST_2);
            s3.setRegion(usWest2);
    ObjectListing objectListing = s3.listObjects(new ListObjectsRequest().withBucketName(bucketName).withPrefix(prefix));

其中bucketName =你的桶名

和前缀=存储桶中的文件夹结构,其中包含文件

希望这能有所帮助。另外,如果您不使用Java,也可以在其他编程语言中查看AWS。

票数 1
EN

Stack Overflow用户

发布于 2019-03-06 21:45:40

至少现在,2019年,有一种更简单、更简洁的方法(凭据不必存储在实例中,而是可以自动查询它们):

  1. 为您的实例创建一个IAM角色并分配它
  2. 创建策略以授予对s3桶的访问权限
  3. 将策略分配给实例的IAM角色
  4. 上传/下载对象,例如通过s3 - cp的 (如aws s3 cp <S3Uri> <LocalPath> )

@2:允许对S3桶中的对象进行读写访问的JSON策略示例如下:

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::bucket-name"]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": ["arn:aws:s3:::bucket-name/*"]
        }
    ]
}

您必须调整允许的操作,并替换“桶名”。

票数 5
EN

Stack Overflow用户

发布于 2016-05-10 10:34:35

我发现了..。

它只适用于来自ec2实例的公共IP。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37134603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档