S3 Files의 POSIX 권한
S3 Files의 POSIX 권한 (POSIX permissions in S3 Files)
POSIX 파일 시스템은 모든 파일에 소유권과 권한이 필요해요. Amazon S3는 데이터를 IAM 정책과 버킷 정책으로 액세스가 제어되는 객체로 저장하며, 기본적으로 파일 소유권이나 권한 속성을 저장하지 않아요. S3 Files는 소유자, 그룹, 파일 권한을 포함한 POSIX 메타데이터를 각 S3 객체의 사용자 정의 메타데이터로 저장해 이 차이를 연결해줘요. S3 Files를 통해 파일을 만들거나 수정하면 서비스가 모든 권한 메타데이터를 자동으로 기록해요. 파일 시스템 외부에서, 예를 들어 Amazon S3 콘솔, AWS CLI 또는 AWS SDK를 통해 객체가 S3 버킷에 기록되면 해당 객체에는 POSIX 메타데이터가 없어요. S3 Files는 이러한 객체에 기본값으로 root:root 소유권과 644 권한을 할당하며, 이는 비루트 사용자가 파일을 읽을 수 있지만 쓸 수는 없게 해줘요. 이 기본값이 액세스 요구 사항을 충족하면 추가 작업이 필요하지 않아요. 애플리케이션이 필요로 하면 해당 객체의 기본 권한을 재정의할 수 있어요. 이 튜토리얼에서는 사용자 지정 권한 적용 과정을 안내해요.
출처: 문서
본문
POSIX 권한과 직접 S3 액세스
S3 Files는 두 개의 독립적인 경로에 액세스 제어를 적용해요. POSIX 사용자 및 그룹 권한은 파일 시스템 마운트에 액세스하는 운영 체제 사용자와 프로세스를 규정하고, IAM 및 버킷 정책은 Amazon S3 API를 규정해요.
POSIX 권한은 Amazon S3 API를 통해 직접 이루어지는 액세스를 제한하지 않아요. 버킷에 대해 s3:GetObject 권한이 있는 모든 보안 주체는 객체에 저장된 POSIX 권한과 관계없이 객체 내용을 직접 읽을 수 있어요. IAM 및 버킷 정책을 직접 S3 액세스에 대한 제어로 간주하고 최소 권한 원칙에 따라 부여하세요.
S3 Files가 POSIX 메타데이터를 저장하는 방식
S3 Files는 각 객체의 사용자 정의 메타데이터로 POSIX 정보를 저장해요. 다음 메타데이터 키가 소유권과 권한을 제어해요.
| 메타데이터 키 | 설명 | 예시 값 |
|---|---|---|
x-amz-meta-file-owner |
POSIX 사용자 ID(UID) | 1000 |
x-amz-meta-file-group |
POSIX 그룹 ID(GID) | 1000 |
x-amz-meta-file-permissions |
파일 유형 및 권한 비트(8진수) | 0100644 |
객체에 POSIX 메타데이터가 없으면 S3 Files는 다음 기본값을 적용해요.
- 파일:
root:root소유권 및0644권한(-rw-r--r--) - 디렉터리:
root:root소유권 및0755권한(drwxr-xr-x)
이 기본값 아래에서 모든 사용자는 파일을 읽고 디렉터리를 탐색할 수 있지만 소유자(root)만 쓸 수 있어요. 파일은 기본적으로 실행 가능하지 않아요.
기존 객체에 POSIX 메타데이터 설정
다음 절차를 사용해 버킷에 이미 존재하는 객체에 POSIX 소유권과 권한을 적용하세요.
1단계: 대상 사용자의 UID와 GID 확인
이 예시에서 대상 사용자는 UID 1000인 ec2-user예요.
$ id ec2-user
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user)
2단계: copy-object로 객체 메타데이터 업데이트
aws s3api copy-object 명령은 업데이트된 메타데이터로 객체를 제자리에 복사해요. BUCKET_NAME과 OBJECT_KEY를 본인의 값으로 바꾸세요.
--metadata-directive REPLACE 옵션은 객체의 모든 사용자 정의 메타데이터를 교체해요. REPLACE가 콘텐츠 유형을 기본값(binary/octet-stream)으로 재설정하므로 객체의 콘텐츠 유형을 보존하려면 --content-type을 포함하세요. 다른 메타데이터 필드를 사용하는 경우 --metadata 파라미터에 포함하세요.
aws s3api copy-object \
--bucket BUCKET_NAME \
--key OBJECT_KEY \
--copy-source BUCKET_NAME/OBJECT_KEY \
--metadata-directive REPLACE \
--content-type CONTENT_TYPE \
--metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'
3단계: 메타데이터가 적용되었는지 확인
다음 명령을 실행해 메타데이터를 확인하세요.
aws s3api head-object --bucket BUCKET_NAME --key OBJECT_KEY
응답에는 POSIX 메타데이터가 포함돼요.
{
"AcceptRanges": "bytes",
"LastModified": "Mon, 18 May 2026 14:43:00 GMT",
"ContentLength": 7214,
"ETag": "\"abc123...\"",
"ContentType": "image/png",
"Metadata": {
"file-owner": "1000",
"file-group": "1000",
"file-permissions": "0100644"
}
}
4단계: S3 파일 시스템에서 권한 확인
$ ls -ltr /mnt/s3files/
-rw-r--r--. 1 ec2-user ec2-user 7214 May 18 14:43 s3.png
이제 파일의 소유자는 ec2-user이며 액세스에 더 이상 root가 필요하지 않아요.
새 업로드에 POSIX 메타데이터 설정
객체를 버킷에 업로드할 때 POSIX 메타데이터를 포함할 수 있어요.
aws s3 cp 사용
aws s3 cp localfile.txt s3://BUCKET_NAME/localfile.txt \
--metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'
aws s3api put-object 사용
aws s3api put-object \
--bucket BUCKET_NAME \
--key localfile.txt \
--body localfile.txt \
--metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'
업로드된 객체의 메타데이터 확인
aws s3api head-object --bucket BUCKET_NAME --key localfile.txt
권한 값 참조
다음 표는 일반적인 POSIX 권한 값과 사용 사례를 나열해요.
| 8진수 값 | 파일 모드 | 사용 사례 |
|---|---|---|
0100644 |
-rw-r--r-- |
표준 파일: 소유자 읽기/쓰기, 다른 사용자 읽기 전용 |
0100664 |
-rw-rw-r-- |
공유 파일: 소유자 및 그룹 읽기/쓰기, 다른 사용자 읽기 전용 |
0100755 |
-rwxr-xr-x |
실행 파일: 소유자 전체 액세스, 다른 사용자 읽기 및 실행 |
0100666 |
-rw-rw-rw- |
전 세계 쓰기 가능 파일: 모든 사용자 읽기 및 쓰기 |
0040755 |
drwxr-xr-x |
표준 디렉터리: 소유자 전체 액세스, 다른 사용자 읽기 및 탐색 |
모범 사례
가능하면 S3 파일 시스템을 통해 파일을 업로드하세요. S3 Files는 파일의 소유권과 권한을 객체 메타데이터로 자동 저장하므로 추가 단계가 필요하지 않아요. S3 버킷에 직접 업로드할 때는 업로드 명령에 POSIX 메타데이터를 포함해 올바른 소유권과 권한이 처음부터 설정되도록 하세요.