개요
2024.03.22 - [AWS] Mountpoint for S3 - S3를 파일 시스템처럼 사용하기에서 AWS S3가 제공하는 Mountpoint for S3 기능을 살펴보았다. 다만 Mountpoint for S3는 mount-s3를 수행한 사용자가 버킷에 대해 작업할 수 있도록 기본적인 권한을 설정한다. 때문에 이전 글에서 EC2에 root 사용자로 버킷을 마운트 했을 때, 일반 사용자는 버킷에 접근할 수가 없었다.
이번 글에서는 Mountpoint for S3 사용 시 고려해볼 수 있는 권한, mount path 지정 등의 구성 설정에 대해 적어둔다.
파일/디렉터리 권한 설정
Mountpoint for S3는 기본적으로 mount-s3 명령을 수행한 사용자가 마운트 한 버킷의 파일을 읽고 쓸 수 있도록 허용한다. 만약 다른 사용자가 버킷에 대한 작업을 수행할 수 있도록 허용하고 싶을 때는 다음과 같은 옵션을 함께 사용하여 마운트해야 한다.
옵션 | 설명 |
--allow-other | root를 포함한 다른 사용자의 접근 허용. --allow-root와 함께 사용할 수 없다. |
--allow-root | root 사용자의 접근 허용. --allow-other와 함께 사용할 수 없다. |
--uid | 디렉터리 소유자 지정. 기본값은 mount-s3를 수행한 사용자 |
--gid | 디렉터리 그룹 지정. 기본값은 mount-s3를 수행한 사용자의 그룹 |
--dir-mode | 디렉터리 권한. 기본값은 755 |
--file-mode | 파일 권한. 기본값은 644 |
따라서 root 권한을 가진 서버 관리자가 요청에 의해 mount-s3를 사용하는 경우, 다음과 같은 옵션을 지정하여 권한을 제어하면 되지 않을까 싶다.
mount-s3 <BUCKET_NAME> /path/mount/point \
--allow-other \
--uid <UID> --gid <GID> \
--dir-mode 775 --file-mode 664
# 예시
mount-s3 test-bucket /mnt/test-bucket \
--allow-other \
--uid 1000 --gid 1000 \
--dir-mode 775 --file-mode 664
이제 일반 사용자로 마운트 경로에 접근해도 버킷 내 내용이 잘 확인된다.
파일 편집/삭제 허용
Mountpoint for S3는 기본적으로 기존 객체를 편집하거나 삭제하는 작업은 허용하지 않는다. 새 객체를 생성하는 것만 허용한다. 따라서 기존 객체에 대한 작업이 필요한 경우에는, --allow-overwrite, --allow-delete 옵션을 추가한다.
옵션 | 설명 |
--allow-overwrite | 기존 파일 편집을 허용한다. vi를 이용한 파일 편집 등에는 적합하지 않다. |
--allow-delete | 기존 파일 삭제를 허용한다. |
mount-s3 <BUCKET_NAME> /path/mount/point \
--allow-overwrite --allow-delete
# 예시
mount-s3 test-bucket /mnt/test-bucket \
--allow-overwrite --allow-delete
다만 기존 파일에 대해 작업하는 vi, mv 명령 사용에는 적합하지 않고, 동작하지 않을 수 있다. cp나 rm 명령어를 사용에 보다 적합하다. vi, mv 명령이 필요한 경우에는 s3fs를 사용한 마운트 방식이 좀 더 적합하다고 한다.
mount path 지정
Mountpoint for S3를 통한 작업을 버킷 전체가 아니라 특정 prefix에 대해서만 허용해야 하는 경우가 있을 수 있다. 이런 경우에는 mount 시 --prefix 옵션으로 접근할 S3 prefix를 지정할 수 있다.
mount-s3 <BUCKET_NAME> /path/mount/point --prefix <MOUNT_PATH>
# 예시
mount-s3 test-bucket /mnt/test-bucket-pq --prefix parquet/
부팅 시 자동 마운트
일반적으로 파일 시스템은 /etc/fstab 등에 등록하여 부팅 시에도 마운트를 유지할 수 있도록 한다. 하지만 Mountpoint for S3는 시스템 부팅 시 자동 마운트를 지원하지 않는다. 대안으로 systemd에 부팅 서비스를 등록하여 마운트하는 방법을 사용할 수 있다. 아래는 예시 파일이다.
[Unit]
Description=Mountpoint for Amazon S3 mount
Wants=network.target
AssertPathIsDirectory=/home/ec2-user/s3-bucket-mount
[Service]
Type=forking
User=ec2-user
Group=ec2-user
ExecStart=/usr/bin/mount-s3 DOC-EXAMPLE-BUCKET /home/ec2-user/s3-bucket-mount
ExecStop=/usr/bin/fusermount -u /home/ec2-user/s3-bucket-mount
[Install]
WantedBy=remote-fs.target
참고 문서
https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md