Automation/IaC

[Packer] AMI 생성시 sudo 권한문제 해결하기

[앙금빵] 2024. 12. 1.

이슈사항

Packer를 통해 Golden Image를 생성하는 과정에서 root 권한이 요구되어지는 작업들이 존재한다. 일반적으로 AWS 신규 EC2 인스턴스에 대해 ec2-user로 처음 접근하게 되어지며 그냥 작업하는 경우 권한 이슈를 겪게 된다. 이에 대하여  해결방법을 알아보자.

 

해결

Packer 공식홈페이지에서 아래와 같은 대안을 제공한다.

sudo -S sh -c '{{ .Vars }} {{ .Path }}

https://developer.hashicorp.com/packer/docs/provisioners/shell

 

명령어에 대한 로직을 이해해보자.

 

  • {{ .Vars }}:
    • 이 변수는 환경 변수 설정을 포함한다.
    • Packer의 environment_vars 옵션을 통해 설정된 환경 변수를 포함하며, 스크립트 실행 전에 이러한 변수들을 참고한다.
    • environment_vars 옵션이 없는경우, {{ .Vars }}는 빈 문자열로 대체된다.
    • 예를 들어, environment_vars = ["VAR1=value1", "VAR2=value2"]로 설정하면, {{ .Vars }}는 export VAR1='value1' VAR2='value2';로 확장되어진다.
  • {{ .Path }}:
    • 이 변수는 실행할 스크립트 파일의 경로를 나타낸다.
    • Packer는 inline 스크립트나 scripts 옵션을 통해 제공된 스크립트를 대상 머신의 임시 디렉토리에 저장한다.
    • {{ .Path }}는 이 임시 스크립트 파일의 절대 경로를 가리킨다. 여기서 사용자는 {{ .Path }}를 직접 정의하지 않으며, Packer가 자동으로 이 경로를 설정한다.

 

ec2-user 경우 기본적으로 root 접근 권한이 제공되어지기에 아래 해결법으로 해결을 진행하였다.

build {
  name    = "Create AMI"
  sources = ["source.amazon-ebs.sample"]

  provisioner "shell" {
    execute_command = "sudo -S sh -c '{{ .Vars }} {{ .Path }}'"
    inline = [
      "mkdir -p /jonghyun", # '/'디렉토리에 파일 및 폴더를 생성하는 것은 root 권한 필요
    ]
  }
}

 

'Automation > IaC' 카테고리의 다른 글

[Terraform] terraform state에 대해 알아보자  (0) 2024.11.17

댓글