Безопасное место для записи файлов ключей oauth в laravel

Я развертываю свое приложение laravel в AWS Elastic Beanstalk и сталкиваюсь с проблемой сохранения ключей oauth для паспорта laravel.

Я прошел через это и это. Хотя вариант S3 звучит разумно, я все же хотел более безопасный способ и хотел получить секретный менеджер от AWS.

Поскольку паспорт laravel предоставляет возможность загружать ключи из пользовательской папки, Я решил, что могу использовать AWS PHP SDK для получения секретного ключа, записи его в storage/app/oauth-public.key и storage/app/oauth-private.key и загрузки паспорта оттуда.

Этот подход работает нормально после развертывания в beanstalk, но является ли папка storage/app безопасным местом для создания oauth.*.key файлов? или есть способ лучше / безопаснее?

Ниже приводится моя функция загрузки в Providers/AuthServiceProvider.php.

public function boot()
{
    $this->registerPolicies();
    Passport::routes();
    Passport::tokensExpireIn(now()->addDays(5));

    // load keys from aws secret manager if they don't exist
    if(!file_exists(storage_path().'/app/oauth-public.key') && !file_exists(storage_path().'/app/oauth-private.key')) {
        $keys = json_decode($this->getPassportKeys());
        $public_key = implode("\n", explode('\n', $keys->PASSPORT_PUBLIC_KEY));
        Storage::put('oauth-public.key', $public_key);
        $private_key = implode("\n", explode('\n', $keys->PASSPORT_PRIVATE_KEY));
        Storage::put('oauth-private.key', $private_key);
    }
    Passport::loadKeysFrom(storage_path().'/app');
}

person otaku    schedule 20.01.2021    source источник


Ответы (1)


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

Следовательно, обычно вы храните данные приложения вне своих экземпляров. Для секретов, таких как ваши ключи, подходящими местоположениями могут быть хранилище параметров SSM или Менеджер секретов (СМ).

Вы уже используете SM, что, на мой взгляд, хорошо. Если вы храните их локально в storage/app, эта папка будет удаляться при каждом развертывании новой версии вашего приложения. Поэтому вы должны убедиться, что всегда получаете ключи от SM. Также вы можете подумать, что они хранят файлы в памяти, а не на жестком диске. Это позволит вам получать их быстрее, не читая их из локального хранилища.

person Marcin    schedule 20.01.2021