我正在创建一个Electron.js应用程序,并且正在使用S3托管我的应用程序的新版本。我不能让S3存储桶向公众开放,而只需要将其限制在将使用该应用程序的公司中的用户即可。因此,我决定通过公司的IP地址限制对存储桶的访问。但是,当Electron-updater检查更新时,出现错误:HttpError:403 Forbidden。这是我正在使用的存储桶策略:
def get_all_id_list():
id_list =[]
for file_name in glob.glob("*.csv"):
file = open(file_name, 'r')
for id in file:
id_list.append(file.readline()[:-1])
return id_list
def get_IN_AU_tweet_ids(api, id_list):
i = 1
id_list_in = []
id_list_au = []
id_list_length = len(id_list)
try:
for i in range((id_list_length // 100) + 1):
ids = id_list[i * 100 : min((i + 1) * 100, id_list_length)]
for tweet in api.statuses_lookup(ids):
if hasattr(tweet.place, 'country_code'):
country_code = tweet.place.country_code
if country_code == 'IN':
id_list_in.append(tweet.id_str)
elif country_code == 'AU':
id_list_au.append(tweet.id_str)
except tweepy.TweepError:
print ('Something went wrong, quitting...')
return id_list_in, id_list_au
def create_new_dataset(id_list_in, id_list_au):
IN_DATASET_FILENAME = 'IN-Dataset.csv'
AU_DATASET_FILENAME = 'AU-Dataset.csv'
if(os.path.exists(IN_DATASET_FILENAME)):
os.remove(IN_DATASET_FILENAME)
if(os.path.exists(AU_DATASET_FILENAME)):
os.remove(AU_DATASET_FILENAME)
with open(IN_DATASET_FILENAME, 'w') as file:
for id in id_list_in:
file.write(id + '\n')
with open(AU_DATASET_FILENAME, 'w') as file:
for id in id_list_au:
file.write(id + '\n')
if __name__ == "__main__":
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit = True, wait_on_rate_limit_notify = True)
if not api.verify_credentials():
print("API Not Verified...!")
exit(0)
id_list = get_all_id_list()
id_list_in, id_list_au = get_IN_AU_tweet_ids(api, id_list)
create_new_dataset(id_list_in, id_list_au)
当Electron-Updater检查是否有新更新时,出现错误:HttpError:403 Forbidden。不应这样,因为请求来自公司的IP。我想知道是否可能出于某种原因该请求来自其他IP。我尝试使用S3访问日志(我从未使用过它们),但是在我创建的存储这些日志的存储桶中没有保存任何内容。我不知道是什么问题。
答案 0 :(得分:1)
如果我理解该问题,则希望只允许特定IP。
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::BUCKETNAME",
"arn:aws:s3:::BUCKETNAME/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"CIDR",
"CIDR"
]
}
}
}
]
}