AWS

[AWS] EB(Elastic Beanstalk)에서 Log 파일 작성 시 퍼미션 오류 날때

먹세 2021. 3. 3. 11:54

 

 

문제

1. Elastic Beanstalk 사용 중

2. 라라벨 사용 중 로그파일 작성 시

3. config/logging.php 파일에서 로그파일 작성 위치 설정 시

'daily' => [
      'driver' => 'daily',
      'path' => storage_path('logs/'.php_sapi_name().'_ranking_prod.log'), // storage/logs 에 생성 (퍼미션문제 발생) 
      'path' => 'logs/ranking_prod.log', // public/logs 에 생성 (퍼미션문제 없음)
      'level' => 'debug',
      'days' => 31,
],

위 설정상 문제는 storage 폴더 접근 권한이 문제이다.

vi /etc/group 으로 확인해보면, AWS 기본계정 ec2-user 는 apache 그룹에 포함 되어 있다.

/public/logs 에 파일을 생성할때는 퍼미션 문제가 발생하지 않는다.

/storage/logs 에 파일을 생성할때는 퍼미션 문제가 발생한다.

그렇다면, 권한이 다르다는 얘기. 실제 퍼미션을 살펴보자

 

/public/logs 폴더는 apache(소유자) apache(그룹) 으로 구성되어있다.

/public/logs 안에 로그파일들도 apache(소유자) apache(그룹) 으로 구성되어있다.

 

/storage/logs 폴더는 ec2-user(소유자) apache(그룹) 으로 구성되어있다.

/storage/logs 안에 로그들을 보면 apache(소유자) apache(그룹) 으로 되어있다.

 

위 권한을 살펴볼때, AWS서버의 기본 소유자는 ec2-user 이고, 로그를 쓰고 서버에 파일을 생성할때는 apache권한으로 쓰게 되는 것을 알수있다.

그렇다면, ec2-user의 권한을 가진 logs 폴더에 apache 권한으로 접근이 가능하도록 apache 그룹을 생성해주면 된다.

 

AWS 내에서 권한작업은 IAM(Identity and Access Management) 에서 할 수 있다.

IAM 대시보드 -> 그룹 -> 새로운 그룹 생성 -> apache 그룹을 생성 -> 자신의 계정을 선택해서 apache 그룹에 넣어준다.

이렇게 해주면 자신의 계정이 apache 그룹 권한이 생겼다.

이후에 다시 EB에서 테스트해보면 정상적으로 파일 생성 권한을 사용할 수 있을 것이다.

 

 

그리고, 로드밸런싱 사용중인 경우 로그파일의 이름이 겹치면 안돼서 php_sapi_name() 를 사용해서 로그명을 기기별로 나눠줘야 된다는 얘기도 있는데, 테스트결과 php_sapi_name() 로 굳이 나눠주지 않아도 된다. 

'path' => storage_path('logs/'.php_sapi_name().'_ranking_prod.log')

'path' => storage_path('logs/'.php_sapi_name().'_laravel_prod.log'),

 

반응형