Electron-Updater和AWS S3存储桶策略-错误:HttpError:403 Forbidden

时间:2020-07-27 16:42:27

标签: amazon-web-services amazon-s3 electron electron-updater

我正在创建一个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访问日志(我从未使用过它们),但是在我创建的存储这些日志的存储桶中没有保存任何内容。我不知道是什么问题。

1 个答案:

答案 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"
            ]
          }
        }
      }
    ]
  }