Недействительный ключ Fernet, когда снова запускается существующий, но еще не использованный контейнер воздушного потока - PullRequest
1 голос
/ 31 октября 2019

У меня есть докеризованная служба воздушных потоков с FERNET_KEY в качестве переменной среды, экспортированная с использованием файла .env (который также включает в себя другие переменные среды, кроме FERNET_KEY).

Когда я собираю и запускаюВ док-контейнере служба воздушного потока работает, как и ожидалось, и затем я перехожу к соединениям и настраиваю свои соединения AWS в интерфейсе воздушного потока, как указано здесь https://airflow.apache.org/howto/connection/aws.html. Все идет нормально. Теперь я намеренно остановил док-контейнер, а затем снова запустил контейнер и перешел к интерфейсу «Поток воздуха» -> «Подключения», чтобы посмотреть, все ли еще есть настройки подключения AWS (которые я настроил перед остановкой контейнера).

Новот что происходит. когда я вижу настройки aws_default в интерфейсе воздушного потока, я вижу ошибку, как показано ниже:

Ooops.

                      ____/ (  (    )   )  \___
                     /( (  (  )   _    ))  )   )\
                   ((     (   )(    )  )   (   )  )
                 ((/  ( _(   )   (   _) ) (  () )  )
                ( (  ( (_)   ((    (   )  .((_ ) .  )_
               ( (  )    (      (  )    )   ) . ) (   )
              (  (   (  (   ) (  _  ( _) ).  ) . ) ) ( )
              ( (  (   ) (  )   (  ))     ) _)(   )  )  )
             ( (  ( \ ) (    (_  ( ) ( )  )   ) )  )) ( )
              (  (   (  (   (_ ( ) ( _    )  ) (  )  )   )
             ( (  ( (  (  )     (_  )  ) )  _)   ) _( ( )
              ((  (   )(    (     _    )   _) _(_ (  (_ )
               (_((__(_(__(( ( ( |  ) ) ) )_))__))_)___)
               ((__)        \\||lll|l||///          \_))
                        (   /(/ (  )  ) )\   )
                      (    ( ( ( | | ) ) )\   )
                       (   /(| / ( )) ) ) )) )
                     (     ( ((((_(|)_)))))     )
                      (      ||\(|(|)|/||     )
                    (        |(||(||)||||        )
                      (     //|/l|||)|\\ \     )
                    (/ / //  /|//||||\\  \ \  \ _)
-------------------------------------------------------------------------------
Node: 64e7a509837f
-------------------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python3.7/site-packages/flask_admin/base.py", line 69, in inner
    return self._run_view(f, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask_admin/base.py", line 368, in _run_view
    return fn(self, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask_admin/model/base.py", line 2125, in edit_view
    form = self.edit_form(obj=model)
  File "/usr/local/lib/python3.7/site-packages/flask_admin/model/base.py", line 1340, in edit_form
    return self._edit_form_class(get_form_data(), obj=obj)
  File "/usr/local/lib/python3.7/site-packages/wtforms/form.py", line 212, in __call__
    return type.__call__(cls, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask_admin/form/__init__.py", line 16, in __init__
    super(BaseForm, self).__init__(formdata=formdata, obj=obj, prefix=prefix, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/wtforms/form.py", line 278, in __init__
    self.process(formdata, obj, data=data, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/wtforms/form.py", line 127, in process
    if obj is not None and hasattr(obj, name):
  File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 353, in __get__
    retval = self.descriptor.__get__(instance, owner)
  File "/usr/local/lib/python3.7/site-packages/airflow/models/connection.py", line 155, in get_password
    return fernet.decrypt(bytes(self._password, 'utf-8')).decode()
  File "/usr/local/lib/python3.7/site-packages/cryptography/fernet.py", line 171, in decrypt
    raise InvalidToken
cryptography.fernet.InvalidToken

Возможно, мне не хватает некоторого понятия о ключах Fernet. Нужно ли генерировать новый ключ fernet каждый раз, когда запускается мой докер-контейнер? Если так, как я должен генерировать на лету, когда строит докер? Файл FERNET_KEY, который я вставил в файл .env, фактически создается на моем локальном компьютере и копируется в файл .env (FERNET_KEY = 4EPOSLXXXXXXXXXXXIERu =), который используется докером

1 Ответ

1 голос
/ 31 октября 2019

Вам не нужно генерировать новый ключ на лету. Возможно, вы что-то упустили, пытались ли вы подключиться к вашему докеру и распечатать FERNET_KEY из терминала, чтобы проверить, действительно ли он не был загружен?

$ docker exec -it <CONTAINER ID> bash
(now, inside the container) # echo ${FERNET_KEY}

Если он не совпадает с вашим файлом envздесь что-то не так. Используете ли вы docker-compose среду? Если это так, вам также нужно следующее для docker-compose.yml:

environment:
    - FERNET_KEY=${FERNET_KEY}
...