Amazon s3 Amazon S3:从IP授权匿名访问(通过bucket策略)

Amazon s3 Amazon S3:从IP授权匿名访问(通过bucket策略),amazon-s3,amazon-ec2,Amazon S3,Amazon Ec2,我有一个AmazonS3 bucket,希望它可以用于特定机器上的脚本,而不需要部署登录凭据。所以我的计划是只允许从那台机器的IP进行匿名访问。我对Amazon云和bucket策略还不太熟悉。我将以下策略添加到我的bucket中: { "Version": "2008-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect

我有一个AmazonS3 bucket,希望它可以用于特定机器上的脚本,而不需要部署登录凭据。所以我的计划是只允许从那台机器的IP进行匿名访问。我对Amazon云和bucket策略还不太熟悉。我将以下策略添加到我的bucket中:

{
    "Version": "2008-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::name_of_my_bucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "my_ip_1/24",
                        "my_ip_2/24"
                    ]
                }
            }
        }
    ]
}
但匿名访问仍然不起作用。为了进行测试,我在S3管理控制台中授予了对“所有人”的访问权。这很好,但显然不是我想做的有没有任何提示我做错了什么以及如何让它工作

我的用例是使用EC2和S3进行一些数据处理,所以通过IP进行访问控制比摆弄用户帐户要简单得多。如果有更简单的解决方案,我愿意听取建议

但匿名访问仍然不起作用

什么操作仍然不起作用,您是否碰巧尝试列出桶中的对象

通常情况下,用例隐含地涉及API调用,除了策略已经明确针对的
资源
之外,API调用还处理不同的资源类型。具体来说,您需要了解(例如),(例如)和(例如)之间的区别

特别是,您的策略的
资源
规范当前只处理bucket中的对象(
arn:aws:s3:::name\u of_my\u bucket/*
),这意味着您不能在bucket中列出对象(在case中,您应该能够放置/获取/删除对象)-为了允许通过ListBucket列出bucket中的对象,您需要相应地修改您的策略,如下所示:

{
“版本”:“2008-10-17”,
“Id”:“S3PolicyId1”,
“声明”:[
{
//…您在此处对对象的现有语句。。。
},
{
“Sid”:“IPAllow”,
“效果”:“允许”,
“委托人”:{
“AWS”:“*”
},
“操作”:“s3:ListBucket”,
“资源”:“arn:aws:s3:::我的桶的名称”,
“条件”:{
“IP地址”:{
“aws:SourceIp”:[
“我的ip 1/24”,
“我的ip 2/24”
]
}
}
}
]
}

您正好找到了问题所在。资源名称只是一个前缀吗?所以假设我有bucket'com.mydomain.xxx'和'com.mydomain.yyy'。是否有可能通过“arn:aws:s3:::com.mydomain.*”向两个存储桶(包括内容)授予对所有操作的访问权限?通过arn的资源规范的确切语法和含义因服务而异,请参见示例。-对于s3,您确实可以对对象使用前缀(或者更确切地说是a),但是,必须暂时完整指定bucket,并且不能包含通配符,例如,请参见AWS团队对的响应。