{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::prd-goofys-test/*",
"arn:aws:s3:::prd-goofys-test"
]
}
]
}
# 업데이트 및 필요한 패키지 설치
$ yum -y update
$ yum install -y golang fuse
# goofys 설치 (2020년 4월 이후 릴리즈 없음)
$ wget https://github.com/kahing/goofys/releases/download/v0.24.0/goofys -P /usr/local/bin/
# 권한 변경
$ chmod 755 /usr/local/bin/goofys
# 디렉토리 이동 및 생성
$ cd /
$ mkdir /goofys
# 인스턴스 프로파일 확인
$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/
goofys-test (연결된 Role 확인)
# 인스턴스 메타데이터 서비스(IMDS) 확인
# 아무 값이 뜨지 않거나 아래와 같은 경우는 캡처에 보이는 작업을 진행
$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>401 - Unauthorized</title>
</head>
<body>
<h1>401 - Unauthorized</h1>
</body>
</html>
위와 같은 에러가 뜰 경우 아래 캡처와 같은 설정이 필요
# 디버그 로그
$ goofys --debug_fuse --debug_s3 -f prd-goofys-test /goofys
2024/07/08 01:17:56.410065 s3.DEBUG HEAD https://s3.amazonaws.com/prd-goofys-test = 301 [ap-northeast-2]
2024/07/08 01:17:56.410388 s3.INFO Switching from region 'us-east-1' to 'ap-northeast-2'
2024/07/08 01:17:56.412841 s3.DEBUG DEBUG: Sign Request s3/HeadObject failed, not retrying, error NoCredentialProviders: no valid providers in chain. Deprecated.
For verbose messaging see aws.Config.CredentialsChainVerboseErrors
2024/07/08 01:17:56.413067 s3.ERROR code=NoCredentialProviders msg=no valid providers in chain. Deprecated.
For verbose messaging see aws.Config.CredentialsChainVerboseErrors, err=<nil>
2024/07/08 01:17:56.413163 main.ERROR Unable to access 'prd-goofys-test': NoCredentialProviders: no valid providers in chain. Deprecated.
For verbose messaging see aws.Config.CredentialsChainVerboseErrors
2024/07/08 01:17:56.413229 main.FATAL Mounting file system: Mount: initialization failed
해당 인스턴스에는 지정된 버킷의 권한이 있지만, Credential 에러가 발생한다.
그렇기에 인스턴스의 메타데이터 옵션을 변경을 해야 Role 을 통한 Mount 가 가능하다.
EC2 > 인스턴스 설정 > 인스턴스 메타데이터 옵션 수정 > Optional > 저장
# CLI 로 활성화 방법
$ aws ec2 modify-instance-metadata-options --instance-id <InstanceID> --http-endpoint enabled --http-tokens optional
# /etc/fstab
# 재부팅 시 자동 마운트를 위하여 fstab 에 위와 같이 추가
/usr/local/bin/goofys#prd-goofys-test /goofys fuse _netdev,allow_other,--uid=0,--gid=0,--file-mode=0777,--dir-mode=0777,--use-content-type 0 0
# Mount 작업
$ mount -av
/ : ignored
/boot/efi : already mounted
/goofys : successfully mounted
# Mount 확인
$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 475M 0 475M 0% /dev/shm
tmpfs tmpfs 190M 432K 190M 1% /run
/dev/xvda1 xfs 15G 2.1G 13G 14% /
tmpfs tmpfs 475M 0 475M 0% /tmp
/dev/xvda128 vfat 10M 1.3M 8.7M 13% /boot/efi
tmpfs tmpfs 95M 0 95M 0% /run/user/0
prd-goofys-test fuse 1.0P 0 1.0P 0% /goofys
# 기존 데이터 확인
$ cd /goofys/test
$ ll
total 215
-rwxrwxrwx. 1 root root 219964 Jul 5 00:47 %96IHUb.jpg
# 데이터 복사 확인
$ touch abc.txt
$ cp abc.txt /goofys/test/
$ ll
total 216
-rwxrwxrwx. 1 root root 219964 Jul 5 00:47 %96IHUb.jpg
-rwxrwxrwx. 1 root root 86 Jul 5 05:31 abc.txt
S3 콘솔에서 Mount 된 경로에 객체 확인