NFS 클라이언트 연결

이 페이지에서는 NFS 클라이언트를 연결하는 방법을 설명합니다.

시작하기 전에

Linux 배포 유형에 따라 NFS 클라이언트 도구를 설치하여 클라이언트를 준비합니다.

RedHat

다음 명령어를 실행합니다.

sudo yum install -y nfs-utils

SuSe

다음 명령어를 실행합니다.

sudo yum install -y nfs-utils

Debian

다음 명령어를 실행합니다.

sudo apt-get install nfs-common

Ubuntu

다음 명령어를 실행합니다.

sudo apt-get install nfs-common

내보내기 정책을 사용한 볼륨 액세스 제어

NFSv3 및 NFSv4.1의 볼륨 액세스 제어는 클라이언트의 IP 주소를 기반으로 합니다. 볼륨의 내보내기 정책에는 최대 20개의 내보내기 규칙이 포함됩니다. 각 규칙은 볼륨 마운트를 사용 설정할 수 있는 허용된 클라이언트를 정의하는 IP 또는 네트워크 CIDR의 쉼표로 구분된 목록입니다. 규칙은 클라이언트가 갖는 액세스 유형(예: 읽기 및 쓰기 또는 읽기 전용)도 정의합니다.

다음 탭을 사용하여 NFS 버전에 따른 정책을 검토하세요.

Kerberos가 없는 NFS

Kerberos가 없는 모든 NFS 버전은 AUTH_SYS 보안 버전을 사용합니다. 이 모드에서는 신뢰할 수 있고 사용자 ID와 그룹 ID 무결성을 보장할 수 있는 클라이언트만 허용하도록 내보내기 규칙을 엄격하게 관리해야 합니다.

보안 조치로 NFS 서버는 UID=0(루트)가 있는 NFS 호출을 파일 시스템에 대한 권한이 제한된 UID=65534 (익명)에 자동으로 매핑합니다. 자세한 내용은 사용자 ID 스쿼싱을 참고하세요.

Kerberos를 사용하는 NFSv4.1

Kerberos를 사용하는 NFSv4.1은 내보내기 정책과 Kerberos를 사용한 추가 인증을 사용하여 볼륨에 액세스합니다. 다음 항목에 적용할 내보내기 규칙을 구성할 수 있습니다.

  • Kerberos만 (krb5)

  • Kerberos 서명 (krb5i)

  • Kerberos 개인 정보 보호 (krb5p)

내보내기 정책 권장사항

내보내기 정책에 관한 권장사항은 다음과 같습니다.

  • 내보내기 규칙을 가장 구체적인 것부터 가장 구체적이지 않은 것 순으로 정렬합니다.

  • 신뢰할 수 있는 클라이언트(예: 신뢰할 수 있는 클라이언트가 있는 특정 클라이언트 또는 CIDR)로만 내보냅니다.

  • 신뢰할 수 있는 소규모 관리 클라이언트에 대한 루트 액세스 권한을 제한합니다.

규칙 허용되는 클라이언트 액세스 루트 액세스 설명
1 10.10.5.3,
10.10.5.9
읽기 및 쓰기 사용 관리 클라이언트 루트 사용자는 루트로 유지되며 모든 파일 권한을
관리할 수 있습니다.
2 10.10.5.0/24 읽기 및 쓰기 사용 안함 10.10.5.0/24 네트워크의 다른 모든 클라이언트는 마운트할 수 있지만,
루트 액세스는 nobody에 매핑됩니다.
3 10.10.6.0/24 읽기 전용 사용 안함 다른 네트워크는 볼륨에서 데이터를 읽을 수 있지만
쓰기는 허용되지 않습니다.

클라이언트가 볼륨을 마운트하면 파일 수준 액세스에 따라 사용자가 할 수 있는 작업이 결정됩니다. 자세한 내용은 UNIX 스타일 볼륨의 NFS 파일 수준 액세스 제어를 참고하세요.

사용자 ID 병합

NFS 내보내기 정책은 사용자 및 그룹 ID 스쿼싱을 위한 제어 기능을 제공하므로 보안을 위해 사용자 및 그룹 ID를 익명 사용자 ID로 리매핑할 수 있습니다.

루트 스쿼싱

NFS 서버는 루트 사용자 (UID=0)를 nobody(UID=65534)로 리매핑하여 보안을 개선합니다. 이렇게 하면 루트가 볼륨의 파일 액세스에 대한 권한이 없는 사용자가 됩니다. 이 기능을 루트 스쿼싱이라고 합니다. 이 기능을 사용 중지하고 루트의 권한을 유지하는 옵션은 NFS 서버에서 no_root_squash라고 합니다.

기본적으로 정의된 내보내기 정책이 없는 볼륨은 클라이언트 IP 주소에서 액세스할 수 없습니다. Google Cloud 콘솔에서 내보내기 정책 규칙을 만들면 기본 설정에 읽기 및 쓰기 액세스 권한과 루트 스쿼시가 포함됩니다. 이전에는Google Cloud API, Google Cloud CLI, Terraform에서 has-root-access 매개변수를 사용하여 루트 스쿼싱을 제어할 수 있었습니다. has-root-access도 계속 허용되지만 squash-mode 매개변수로 대체되었습니다.

권장사항에 따라 신뢰할 수 있는 관리자 호스트에 루트 액세스를 사용 설정하고 다른 클라이언트에는 루트 액세스를 사용 중지하는 전용 내보내기 규칙을 만드세요. 이 규칙을 더 일반적인 규칙보다 먼저 배치하세요.

사용자 및 그룹 ID 압축

squash-mode 매개변수는 사용자 및 그룹 ID를 익명의 UID로 스쿼시하는 기능을 제공하며, 이는 공개 SFTP 드롭박스 디렉터리에 유용할 수 있습니다. 이 매개변수는 has-root-access 매개변수도 대체하며 API, Google Cloud CLI, Terraform에서 지원됩니다.

squash-mode 매개변수는 다음 값을 허용합니다.

  • no-root-squash: 이 모드에서는 루트 사용자가 루트로 유지되고 nobody (UID=65534)로 다시 매핑되지 않습니다.

  • root-squash: 이 설정은 루트 사용자를 nobody로 리맵합니다.

  • all-squash: 이 옵션은 루트를 포함한 모든 사용자에게 익명 액세스를 제공합니다. 모든 사용자가 anon-uid 매개변수로 지정된 UID 및 GID에 다시 매핑됩니다. all-squash를 사용하는 경우 anon-uid도 지정하고 access-typeREAD_WRITE로 설정해야 합니다.

고려사항

squash mode를 사용하는 내보내기 정책 규칙의 경우 다음을 고려하세요.

  • 내보내기 정책은 all-squash 규칙 하나만 지원합니다.

  • all-squash가 사용 설정되면 루트 사용자가 익명으로 압축됩니다. 이는 no-root-squash를 사용하는 우선순위가 더 높은 규칙에 의해 재정의될 수 있습니다.

  • squash-mode 스타일 내보내기 정책 규칙이 있는 볼륨에는 볼륨 복제가 지원되지 않습니다.

  • Flex 서비스 수준의 경우 all-squash이 볼륨의 루트 inode 소유권을 자동으로 변경하지 않습니다. 이를 위해 루트 사용자가 chown를 사용하여 루트 아이노드의 소유권을 필요한 UID로 변경할 수 있도록 허용하는 no-root-squash 내보내기 규칙을 추가합니다.

  • has-root-access 매개변수가 지원됩니다. has-root-access 또는 squash-mode 중 하나만 사용합니다. 두 매개변수를 동시에 사용하지 마세요.

볼륨 수정

다음 안내에 따라 Google Cloud CLI를 사용하여 스쿼시 모드로 볼륨의 내보내기 정책을 업데이트합니다.

gcloud

스쿼시 모드를 사용하여 내보내기 정책으로 볼륨을 업데이트합니다.

gcloud netapp volumes update VOLUME_ID \
  --project=PROJECT_ID \
  --location=LOCATION \
  --export-policy=access-type=ACCESS_TYPE,squash-mode=SQUASH_MODE,anon-uid=ANON_UID,allowed-clients=ALLOWED_CLIENTS_IP_ADDRESSES

다음 정보를 바꿉니다.

  • VOLUME_ID: 볼륨의 ID입니다.

  • PROJECT_ID: 볼륨이 있는 프로젝트의 이름입니다.

  • LOCATION: 볼륨의 위치입니다.

  • ACCESS_TYPE: 액세스 유형은 READ_WRITE, READ_ONLY, READ_NONE 중 하나여야 합니다.

  • SQUASH_MODE: 내보내기 규칙은 NO_ROOT_SQUASH, ROOT_SQUASH 또는 ALL_SQUASH 중 하나여야 합니다.

  • ANON_UID: 병합할 UID 번호입니다.

  • ALLOWED_CLIENTS_IP_ADDRESSES: 허용된 클라이언트 IP 주소 또는 범위의 목록(쉼표로 구분).

내보내기 정책 매개변수는 여러 규칙을 포함하도록 반복할 수 있습니다.

다음 예에서는 내보내기 정책에 root-squash 및 all-squash 규칙이 모두 있는 경우를 보여줍니다.

gcloud netapp volumes update my_volume --location=us-east4 \
--export-policy=allowed-clients=10.0.1.18,nfsv3=true,access-type=READ_WRITE,squash-mode=NO_ROOT_SQUASH \
--export-policy=allowed-clients=10.0.2.0/24,nfsv3=true,access-type=READ_WRITE,squash-mode=ALL_SQUASH,anon-uid=2000

추가 선택적 플래그에 대한 자세한 내용은 볼륨 내보내기 정책에 관한 Google Cloud SDK 문서를 참고하세요.

NFS 클라이언트 마운트 안내

Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 NFS 클라이언트의 마운트 안내를 가져오려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 NetApp Volumes 페이지로 이동합니다.

    NetApp Volumes로 이동

  2. 볼륨을 클릭합니다.

  3. 더보기를 클릭합니다.

  4. 마운트 안내를 선택합니다.

  5. Google Cloud 콘솔에 표시된 마운트 안내를 따릅니다.

  6. 워크로드에 특정 마운트 옵션 요구사항이 없는 경우 마운트 명령어를 식별하고 마운트 옵션을 사용합니다.

    NFSv3만 해당: 애플리케이션에서 잠금을 사용하지 않거나 NSM 통신을 사용하도록 클라이언트를 구성하지 않은 경우 nolock 마운트 옵션을 추가하는 것이 좋습니다.

gcloud

볼륨의 마운트 안내를 조회합니다.

 gcloud netapp volumes describe VOLUME_NAME \
    --project=PROJECT_ID \
    --location=LOCATION \
    --format="value(mountOptions.instructions)"

다음 정보를 바꿉니다.

  • VOLUME_NAME: 볼륨 이름입니다.

  • PROJECT_ID: 볼륨이 있는 프로젝트의 이름입니다.

  • LOCATION: 볼륨의 위치입니다.

추가 선택적 플래그에 대한 자세한 내용은 볼륨에 관한 Google Cloud SDK 문서를 참고하세요.

추가 NFSv4.1 안내

Flex Unified, Standard, Premium, Extreme 서비스 수준의 볼륨에 NFSv4.1을 사용 설정하면 이러한 볼륨에 NFSv4.2가 자동으로 사용 설정됩니다. 마운트할 버전을 지정하지 않으면 Linux 마운트 명령어는 항상 사용 가능한 가장 높은 NFS 버전을 마운트합니다. NFSv4.1로 마운트하려면 마운트 명령어에서 -o vers=4.1 매개변수를 사용하세요.

NFSv3에서 사용자와 그룹은 NFSv3 프로토콜을 통해 전송되는 사용자 ID (UID)와 그룹 ID (GID)로 식별됩니다. 볼륨에 액세스하는 모든 클라이언트에서 동일한 UID와 GID가 동일한 사용자 및 그룹을 나타내는지 확인하는 것이 중요합니다. NFSv4에서는 보안 식별자를 사용하여 명시적 UID 및 GID 매핑이 필요하지 않습니다. 보안 식별자는 <username|groupname>@<full_qualified_domain> 형식의 문자열입니다. 보안 식별자의 예는 bob@example.com입니다. 클라이언트는 내부적으로 사용되는 UID와 GID를 보안 식별자로 변환한 후 서버에 NFSv4 요청을 전송해야 합니다. 서버는 수신 요청에 대해 보안 식별자를 UID 및 GID로 변환해야 하고 응답에 대해서는 그 반대로 변환해야 합니다. 번역을 사용하면 모든 클라이언트와 서버가 서로 다른 내부 UID와 GID를 사용할 수 있다는 장점이 있습니다. 하지만 모든 클라이언트와 서버가 UID와 GID, 사용자 및 그룹 이름 간의 매핑 목록을 유지해야 한다는 단점이 있습니다. 클라이언트의 매핑 정보는 /etc/passwd/etc/groups과 같은 로컬 파일이나 LDAP 디렉터리에서 가져올 수 있습니다. 이 매핑의 구성은 클라이언트에서 실행해야 하는 rpc.idmapd에 의해 관리됩니다.

NetApp 볼륨에서 LDAP는 매핑 정보를 제공해야 하며, Active Directory가 지원되는 유일한 RFC2307bis 호환 LDAP 서버입니다. NFSv4에 Kerberos를 사용하는 경우 보안 식별자는 username@DOMAINNAME 형식으로 Kerberos 주 구성원을 저장합니다. 여기서 DOMAINNAME (대문자)은 영역 이름이 됩니다.

숫자 ID

이름 매핑을 구성하지 않고 NFSv3 대신 NFSv4를 사용하려는 사용자를 위해 NFSv4에서는 보안 식별자로 인코딩된 UID 및 GID 텍스트 문자열을 전송하는 numeric ID라는 옵션을 도입했습니다. 이렇게 하면 사용자의 구성 프로세스가 간소화됩니다.

다음 명령어를 사용하여 클라이언트 설정을 확인할 수 있습니다.

     cat /sys/module/nfs/parameters/nfs4_disable_idmapping
   

기본값은 Y이며, 숫자 ID를 사용 설정합니다. NetApp Volumes는 숫자 ID 사용을 지원합니다.

NFS 클라이언트에서 rpc.idmapd 구성

사용하는 ID 또는 보안 식별자의 유형과 관계없이 NFS 클라이언트에서 rpc.idmapd를 구성해야 합니다. 시작하기 전에 섹션의 클라이언트 유틸리티 설치 안내를 따른 경우 이미 설치되어 있지만 실행되고 있지 않을 수 있습니다. 일부 배포판에서는 첫 번째 NFS 볼륨을 마운트할 때 systemd를 사용하여 자동으로 시작합니다. rpc.idmapd에 필요한 최소 구성은 도메인 설정을 설정하는 것입니다. 그렇지 않으면 사용자 루트가 UID=65534 or 4294967295와 함께 nobody로 표시됩니다.

다음 안내에 따라 NFS 클라이언트에서 rpc.idmapd를 구성합니다.

  1. 클라이언트에서 /etc/idmapd.conf 파일을 열고 도메인 매개변수를 다음 중 하나로 변경합니다.

    • 볼륨에 LDAP가 사용 설정되어 있지 않으면 domain = defaultv4iddomain.com.

    • 볼륨에서 LDAP가 사용 설정된 경우 domain = <FDQN_of_Windows_Domain>.

  2. 다음 명령어를 실행하여 rpc.idmapd 변경사항을 활성화합니다.

     nfsidmap -c

NFSv4.2 지원

이제 Flex Unified, Standard, Premium, Extreme 서비스 수준에서 이미 NFSv4.1이 사용 설정된 볼륨의 NFSv4.1 외에 NFSv4.2 프로토콜을 지원합니다.

NFS 볼륨을 마운트할 때 Linux 마운트 명령은 사용 가능한 가장 높은 NFS 버전을 자동으로 선택합니다. NFSv4.1 지원 볼륨을 마운트하면 vers=4.1 마운트 옵션을 명시적으로 지정하지 않는 한 기본적으로 NFSv4.2가 사용됩니다.

NetApp Volumes는 NFSv4.2를 사용하여 NFS 확장 속성 xattrs를 지원합니다. TR-4962에 자세히 설명된 xattrs의 사용 및 제한사항도 적용됩니다.

Linux를 LDAP에 연결

NFSv3 확장 그룹 또는 보안 식별자가 있는 NFSv4.1을 사용하는 경우 스토리지 풀에 연결된 Active Directory를 사용하여 Active Directory를 LDAP 서버로 사용하도록 NetApp Volumes를 구성했습니다.

NFS 클라이언트와 서버 간에 일관된 사용자 정보를 유지하려면 사용자 및 그룹 정보에 Active Directory를 LDAP 이름 서비스로 사용하도록 클라이언트를 구성해야 할 수 있습니다.

다음 리소스를 사용하여 LDAP를 구성합니다.

Kerberized NFS를 사용하는 경우 이 섹션에 언급된 배포 가이드를 사용하여 LDAP를 구성하고 클라이언트와 서버 간의 일관성을 보장해야 할 수 있습니다.

다음 단계

여러 스토리지 엔드포인트가 있는 대용량 볼륨을 연결합니다.