Amazon Web Services 한국 블로그

Amazon EFS – IAM 권한 부여 및 액세스 지점 기능 출시

애플리케이션을 구축하거나 마이그레이션할 때 종종 여러 컴퓨팅 노드에서 데이터를 공유해야 하곤 합니다. 많은 애플리케이션이 파일 API를 사용합니다. Amazon Elastic File System(EFS)에서는 다른 AWS 서비스 및 온프레미스 리소스에서 액세스할 수 있는 완전관리형 NFS(네트워크 파일 시스템)를 제공하여 AWS에서 이러한 애플리케이션을 손쉽게 사용할 수 있습니다.

EFS는 수요에 따라 중단 없이 0에서 페타바이트까지 확장 가능하며, 용량을 프로비저닝 및 관리할 필요 없이 파일을 추가하고 제거할 때 자동으로 확장 및 축소할 수 있습니다. 이를 사용하면 3개의 가용 영역에서 강력한 파일 시스템 일관성을 유지할 수 있습니다. EFS 성능은 필요한 처리량을 프로비저닝하는 옵션을 통해 저장된 데이터 크기를 조정합니다.

작년 EFS 팀은 EFS IA(Infrequent Access) 스토리지 클래스 도입으로 EFS Standard에 비해 최대 92% 저렴한 스토리지 요금을 제시하며 비용을 최적화하는 데 초점을 맞추었습니다. 특정 일수 동안 액세스하지 않은 파일을 EFS IA로 이동하도록 수명 주기 관리 정책을 설정하면 빠르게 비용을 줄이기 시작할 수 있습니다.

오늘, 액세스 관리, 데이터 세트 공유 및 EFS 파일 시스템 보호를 단순화하는 두 가지 새로운 기능을 소개하고자 합니다.

  • NFS 클라이언트에 대한 IAM 인증 및 권한 부여: 클라이언트를 식별하고 IAM 정책을 사용하여 클라이언트 측 권한을 관리합니다.
  • EFS 액세스 지점: 선택적으로 파일 시스템의 디렉터리에 대한 액세스를 제한하여 운영 체제 사용자 및 그룹의 사용을 제어합니다.

IAM 인증 및 권한 부여 사용
EFS 콘솔에서 EFS 파일 시스템을 생성하거나 업데이트할 때 이제는 파일 시스템 정책을 설정할 수 있습니다. 이를 IAM 리소스 정책이라고 하며, Amazon Simple Storage Service(S3)의 버킷 정책과도 비슷합니다. 예를 들어, 이 정책은 루트 액세스를 비활성화하거나 읽기 전용 액세스를 적용하거나 모든 클라이언트에 대해 전송 중 암호화를 적용하는 데 사용할 수 있습니다.

IAM 사용자, 그룹 또는 역할이 사용하는 정책과 같이 자격 증명 기반 정책은 이러한 기본 권한을 재정의할 수 있습니다. 이 새 기능은 보안 그룹을 사용하여 EFS의 현재 네트워크 기반 액세스보다 우선적으로 작동합니다.

기본적으로 루트 액세스를 비활성화하는 옵션을 선택하고 [정책 설정]을 클릭하고 [JSON] 탭을 선택합니다. 여기에서 내 설정에 기반하여 생성한 정책을 검토하거나 추가 고급 정책(예: 다른 AWS 계정이나 특정 IAM 역할에 권한 부여)을 생성할 수 있습니다.

다음 작업은 NFS 클라이언트에 대한 액세스 권한을 관리하기 위해 IAM 정책에서 사용할 수 있습니다.

  • ClientMount: 읽기 전용 액세스 권한으로 파일 시스템을 마운트할 권한 제공
  • ClientWrite: 파일 시스템에 쓸 수 있도록 허용
  • ClientRootAccess: 파일에 루트로 액세스

정책 JSON을 살펴보겠습니다. 파일 시스템을 마운트하고 읽을 수 있으며(ClientMount), 파일 시스템에서 쓸 수 있지만(ClientWrite), 루트 액세스를 비활성화하는 옵션을 선택했으므로, ClientRootAccess 권한은 없습니다.

마찬가지로, IAM 사용자 또는 역할에 정책을 연결하여 특정 권한을 부여할 수 있습니다. 예를 들어, 이 정책에서 루트 액세스를 포함하여 이 파일 시스템에 대한 전체 액세스를 부여할 IAM 역할을 생성합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticfilesystem:ClientMount",
                "elasticfilesystem:ClientWrite",
                "elasticfilesystem:ClientRootAccess"
            ],
            "Resource": "arn:aws:elasticfilesystem:us-east-2:123412341234:file-system/fs-d1188b58"
        }
    ]
}

Amazon Linux 2 및 파일 시스템에 연결할 수 있는 보안 그룹을 사용하여 EFS 파일 시스템과 동일한 Amazon Virtual Private Cloud에서 Amazon Elastic Compute Cloud(EC2)를 시작합니다. EC2 인스턴스는 방금 생성한 IAM 역할을 사용합니다.

IAM 인증, 전송 중 암호화 또는 둘 다를 사용하여 클라이언트에 연결하려면 오픈 소스 efs-utils가 필요합니다. 일반적으로 Amazon Linux 2에서는 yum을 사용하여 efs-utils를 설치하지만, 새 버전이 아직 배포 중이므로, 지침에 따라 이 리포지토리의 소스에서 패키지를 구축합니다. 업데이트된 패키지가 제공되면 이 블로그 게시물을 업데이트하겠습니다.

EFS 파일 시스템을 마운트하기 위해 mount 명령을 사용합니다. 전송 중 암호화를 활용하기 위해 tls 옵션을 추가합니다. 여기에서는 IAM 인증을 사용하지 않으므로 파일 시스템 정책에서 “*” 보안 주체에 대해 지정한 권한이 이 연결에 적용됩니다.

$ sudo mkdir /mnt/shared
$ sudo mount -t efs -o tls fs-d1188b58 /mnt/shared

내 파일 시스템 정책에서는 기본적으로 루트 액세스를 비활성화하므로, 새 파일을 루트로 생성할 수 없습니다.

$ sudo touch /mnt/shared/newfile
touch: cannot touch ‘/mnt/shared/newfile’: Permission denied

이제 mount 명령에 iam 옵션을 추가하여 IAM 인증을 사용합니다(IAM 인증이 작동하려면 tls가 필요함).

$ sudo mount -t efs -o iam,tls fs-d1188b58 /mnt/shared

이 마운트 옵션을 사용하는 경우 EC2 인스턴스 프로파일의 IAM 역할이 루트 액세스를 포함하여 해당 역할에 연결된 권한과 함께 연결에 사용됩니다.

$ sudo touch /mnt/shared/newfile
$ ls -la /mnt/shared/newfile
-rw-r--r-- 1 root root 0 Jan  8 09:52 /mnt/shared/newfile

여기에서는 IAM 역할을 사용하여 루트 액세스를 보유합니다. 다른 공통 사용 사례로는, aws:SecureTransport 조건 키를 사용하여 전송 중 암호화를 적용하거나 쓰기 또는 읽기 전용 액세스가 필요한 클라이언트에 대해 다른 역할을 생성할 수 있습니다.

EFS IAM 권한 검사는 AWS CloudTrail에서 파일 시스템에 대한 클라이언트 액세스를 감사하기 위해 기록됩니다. 예를 들어, 클라이언트가 파일 시스템을 마운트하면 NewClientConnection 이벤트가 내 CloudTrail 콘솔에 표시됩니다.

EFS 액세스 지점 사용
EFS 액세스 지점을 사용하면 파일 시스템에 액세스할 때 사용할 POSIX 사용자 및 그룹을 지정하고 파일 시스템 내 디렉터리에 대한 액세스를 제한하여 NFS 환경에 대한 애플리케이션 액세스를 쉽게 관리할 수 있습니다.

다음은 EFS 액세스 지점을 활용할 수 있는 사용 사례입니다.

  • 개발자가 자체 컨테이너를 구축 및 배포하는 컨테이너 기반 환경(컨테이너 스토리지에 대해 EFS를 사용하는 사례도 이 블로그 게시물에서 확인할 수 있음).
  • 프로덕션 데이터에 대한 읽기 전용 액세스만 필요한 데이터 과학 애플리케이션.
  • 파일 시스템의 특정 디렉터리를 다른 AWS 계정과 공유.

EFS 콘솔에서는 각각 다른 POSIX 사용자 및 그룹을 사용하여 파일 시스템에 대한 두 개의 액세스 지점을 생성합니다.

  • /data – 여러 클라이언트가 읽고 업데이트해야 하는 일부 데이터를 공유하는 경우.
  • /config/data 액세스 지점을 사용하여 클라이언트가 업데이트해서는 안 되는 일부 구성 파일을 공유하는 경우.

두 액세스 지점에 대해 파일 권한 755를 사용합니다. 즉, 읽기 및 실행 액세스 권한은 모든 사용자에게 부여하고, 쓰기 권한은 디렉터리의 소유자에게만 부여합니다. 여기에서는 디렉터리를 생성할 때 권한이 사용됩니다. 디렉터리 내에서 권한은 사용자가 완벽하게 제어합니다.

mount 명령에 accesspoint 옵션을 추가하여 :/data 액세스 지점을 마운트합니다.

$ sudo mount -t efs -o tls,accesspoint=fsap-0204ce67a2208742e fs-d1188b58 /mnt/shared

이제 파일을 생성할 수 있습니다. 루트로는 수행할 수 없지만, 액세스 지점의 사용자 및 그룹 ID를 자동으로 사용하기 때문입니다.

$ sudo touch /mnt/shared/datafile
$ ls -la /mnt/shared/datafile
-rw-r--r-- 1 1001 1001 0 Jan  8 09:58 /mnt/shared/datafile

액세스 지점을 지정하지 않고 다시 파일 시스템을 마운트합니다. 액세스 지점 구성을 고려하며 예상대로 datafile/data 디렉터리에서 생성됩니다. 액세스 지점을 사용하면 EFS 파일 시스템의 루트나 다른 디렉터리에 있는 파일에 액세스할 수 없었습니다.

$ sudo mount -t efs -o tls /mnt/shared/
$ ls -la /mnt/shared/data/datafile 
-rw-r--r-- 1 1001 1001 0 Jan  8 09:58 /mnt/shared/data/datafile

액세스 지점에서 IAM 인증을 사용하기 위해 iam 옵션을 추가합니다.

$ sudo mount -t efs -o iam,tls,accesspoint=fsap-0204ce67a2208742e fs-d1188b58 /mnt/shared

정책에 AccessPointArnCondition을 추가하여 특정 액세스 지점만 사용하도록 IAM 역할을 제한할 수 있습니다.

"Condition": {
    "StringEquals": {
        "elasticfilesystem:AccessPointArn" : "arn:aws:elasticfilesystem:us-east-2:123412341234:access-point/fsap-0204ce67a2208742e"
    }
}

IAM 인증 및 EFS 액세스 지점을 함께 사용하면 컨테이너 기반 아키텍처 및 멀티 테넌트 애플리케이션에 대한 안전한 데이터 공유를 단순화합니다. 모든 애플리케이션이 선택적으로 특정 디렉터리에 대한 액세스를 제한하거나 전송 중 암호화를 적용하거나 파일 시스템에 대한 읽기 전용 액세스만 제공하는 방식으로 올바른 운영 체제 사용자 및 그룹을 자동으로 지정할 수 있기 때문입니다.

정식 출시
NFS 클라이언트에 대한 IAM 권한 부여 및 EFS 액세스 지점은 AWS 리전 표에서 설명한 대로, EFS를 제공하는 모든 리전에서 사용할 수 있습니다. 이 기능을 사용할 때에는 추가 요금이 부과되지 않습니다. 설명서에서 IAM에서 EFS 사용액세스 지점에 대한 자세한 내용을 확인할 수 있습니다.

이제 데이터 및 구성을 공유하는 확장 가능한 아키텍처를 보다 쉽게 생성할 수 있습니다. 앞으로 이 새로운 기능을 어떻게 사용할 것인지에 대해 경험을 공유해주세요!

Danilo