[AWS Error] CodeDeploy 자동 배포 후 에러(Access Denied) 처리 (2)

주형(Jureamer)·2022년 6월 6일
1

개요


전 글과 같이 "Port 3000 is already in use" 에러를 처리하고나서 서버가 정상적으로 작동하자마자 파일을 읽어들이는 부분에서 "Access Denied" 에러가 발생했다.
원인을 확인 해 보니 appspec.yml에서 별도로 권한 설정(permission)을 해줄 수 있는데 처리를 안한 게 문제였다.


파일 권한 오류(Access Denied) 처리


원인은 자동배포를 통해 생성되거나 업데이트 된 파일이 root권한으로 올라간 것이었다.
그래서 아래와 같이 해결 해주었다.

1. 일단 서버를 정상화 시키기 위해 폴더 권한을 root가 아닌 기존에 사용하던 계정으로 재부여 해줬다.

sudo chown -R "계정명":"그룹명" /home/ubuntu/

위와 같이 파일 소유권한을 변경 해준 뒤 1차적인 문제는 해결되었다. 하지만 앞으로 배포될 파일은 여전히 root로 올라갈 것이다. 이 부분을 변경해서 원하는 계정으로 올라가도록 해야한다.

2. Appspec.yml permission 옵션 적용

appspec.yml은 자동 배포 수명주기에 따른 각각의 배포를 관리하는 데 사용되는 정보를 관리하는 파일이다.

그 중 permission을 통해 권한 정보를 줄 수 있다.
permission 구조는 아래와 같다.

permissions:
  - object: object-specification
    pattern: pattern-specification
    except: exception-specification
    owner: owner-account-name
    group: group-name
    mode: mode-specification
    acls: 
      - acls-specification 
    context:
      user: user-specification
      type: type-specification
      range: range-specification
    type:
      - object-type

각 명령에 대한 자세한 설명들은 AWS 공식 페이지를 통해 확인할 수 있다.

나는 이 중 필수 항목인 objectowner, group 항목을 추가로 작성 해주었다.

그래서 완성된 appspec.yml은 아래와 같다.

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu

### 추가된 부분
permissions:
  - object: /home/ubuntu
    owner: "계정명"
    group: "그룹명"

hooks:
  ApplicationStop:
    - location: scripts/stop.sh
      runas: root
  AfterInstall:
    - location: scripts/initialize.sh
      runas: root
  ApplicationStart:
    - location: scripts/start.sh
      runas: root

이후 자동배포 시 object에 설정된 디렉토리 내 파일들은 모두 permission에 적용된 계정과 그룹의 권한으로 지정된다.

이로써 access denied 오류를 해결할 수 있었다.


참고


profile
작게라도 꾸준히 성장하는게 목표입니다.

0개의 댓글