IP 기반 액세스 제어

Managed Lustre는 루트 스쿼시 기능을 통해 IP 기반 액세스 제어를 제공합니다.

루트 스쿼시는 클라이언트 VM의 루트 사용자가 관리형 Lustre 파일 시스템에 대한 루트 권한을 갖지 못하도록 하는 보안 기능입니다. 루트 사용자가 관리형 Lustre 파일 시스템에 액세스하면 권한이 권한이 적은 사용자의 권한으로 '압축'됩니다.

새 Managed Lustre 인스턴스 또는 기존 인스턴스에 루트 스쿼시를 구성할 수 있습니다. 모든 클라이언트에 기본 루트 스쿼시 설정을 적용하거나 특정 클라이언트에 맞춤 규칙을 지정할 수 있습니다.

기본적으로 관리형 Lustre 인스턴스에는 루트 스쿼시가 구성되어 있지 않습니다.

보안 제한사항 및 권장사항

클라이언트 VM에서 루트 액세스 제한

루트 액세스를 제한하는 가장 좋은 메커니즘은 사용자가 처음부터 루트가 되지 못하도록 하는 것입니다. 사용자에게 VM에 대한 루트 권한을 부여하면 지속성 위험에 노출될 수 있습니다. 사용자가 이러한 권한을 악용하여 새 사용자 계정을 만들거나 백도어를 설치하여 VM에 대한 지속적인 액세스 권한을 유지할 수 있습니다. 루트 액세스를 제한하는 방법은 SSH 로그인 액세스 제어 권장사항을 참고하세요.

사용자가 VM에서 루트 권한을 갖지 못하도록 할 수 없는 경우 관리 Lustre의 IP 기반 액세스 제어 기능을 사용하면 관리 Lustre 인스턴스에 액세스할 때 루트 사용자 권한을 제한할 수 있습니다. 하지만 이러한 액세스 확인은 최선을 다하는 것이며 이 기능은 보안을 보장하기 위한 것이 아닙니다. VPC 방화벽 규칙을 기본 보안 경계로 사용하고 신뢰할 수 있는 VM 이미지를 사용하는 신뢰할 수 있는 클라이언트 VM만 관리형 Lustre 인스턴스에 대한 네트워크 액세스 권한을 갖도록 해야 합니다. 자세한 내용은 Google Cloud 보안 권장사항을 참고하세요.

IP 전달 사용 중지

기본 Compute Engine 구성에서는 인스턴스가 IP 전달을 사용 설정할 수 있습니다. 사용자가 다른 소스 IP 주소를 가장하여 루트 스쿼시 정책을 우회하지 못하도록 하려면 constraints/compute.vmCanIpForward 조직 정책을 사용하여 IP 전달을 사용 중지해야 합니다. 자세한 내용은 조직 정책 만들기 및 관리를 참고하세요.

기본 루트 스쿼시 구성

인스턴스에 연결하는 모든 클라이언트에 루트 스쿼시를 적용하려면 기본 스쿼시 UID와 GID를 지정하고 스쿼시 모드를 ROOT_SQUASH로 설정합니다. UID 및 GID에 일반적으로 사용되는 값은 65534이며, 이는 nobody 사용자로 변환됩니다.

기본적으로 nobody 사용자는 읽기 및 실행 액세스 권한만 갖습니다. 루트 사용자 및 Owner 그룹의 구성원만 파일 시스템에 대한 쓰기 액세스 권한이 있습니다.

인스턴스 만들기

기본 루트 스쿼시로 인스턴스를 만들려면 다음을 실행하세요.

gcloud

--default-squash-mode, --default-squash-uid, --default-squash-gid 플래그를 사용하여 기본값을 설정합니다.

gcloud lustre instances create INSTANCE_NAME \
  --project=PROJECT_ID \
  --location=LOCATION \
  --network=NETWORK_NAME \
  --per-unit-storage-throughput=PER_UNIT_STORAGE_THROUGHPUT \
  --capacity-gib=CAPACITY \
  --filesystem=FS_NAME \
  --default-squash-mode=ROOT_SQUASH \
  --default-squash-uid=UID \
  --default-squash-gid=GID

각 항목의 의미는 다음과 같습니다.

  • --default-squash-modeROOT_SQUASH입니다.
  • --default-squash-uid--default-squash-gid은 루트 사용자를 변환할 기본 ID를 지정합니다.

인스턴스를 만들 때 사용할 수 있는 필드의 전체 목록과 설명은 gcloud lustre instances create 참조를 참고하세요.

REST

REST API를 사용하여 인스턴스를 만들려면 다음 엔드포인트로 요청을 보내고 accessRulesOptions 객체를 포함합니다.

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances?instanceId=INSTANCE_NAME
Authorization: Bearer AUTH_TOKEN
{
  "filesystem": "FS_NAME",
  "perUnitStorageThroughput": "PER_UNIT_STORAGE_THROUGHPUT",
  "capacityGib": "CAPACITY_GIB",
  "network": "NETWORK",
  "accessRulesOptions": {
    "defaultSquashMode": "SQUASH_MODE",
    "defaultSquashUid": UID,
    "defaultSquashGid": GID
  }
}

각 항목의 의미는 다음과 같습니다.

  • defaultSquashModeROOT_SQUASH입니다.
  • defaultSquashUiddefaultSquashGid는 루트 사용자를 변환할 사용자 및 그룹 ID 값입니다.

REST API를 사용하여 인스턴스를 만드는 방법에 대한 자세한 내용은 projects.locations.instances.create API 참조를 참고하세요.

Google Cloud 콘솔

Google Cloud 콘솔을 사용하여 루트 스쿼시를 구성할 수 없습니다.

인스턴스 업데이트

기존 인스턴스를 업데이트하여 기본 루트 스쿼시를 사용하려면 다음 단계를 따르세요.

gcloud

--default-squash-mode, --default-squash-uid, --default-squash-gid 플래그를 사용하여 기본값을 설정합니다.

gcloud lustre instances update INSTANCE_NAME \
  --project=PROJECT_ID \
  --location=LOCATION \
  --default-squash-mode=ROOT_SQUASH \
  --default-squash-uid=UID \
  --default-squash-gid=GID

각 항목의 의미는 다음과 같습니다.

  • --default-squash-modeROOT_SQUASH입니다.
  • --default-squash-uid--default-squash-gid는 루트 사용자를 병합할 기본 ID를 지정합니다.

REST

REST API를 사용하여 인스턴스를 업데이트하려면 특정 엔드포인트에 PATCH 요청을 전송합니다. updateMask에서 accessRulesOptions를 지정해야 합니다.

PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances/INSTANCE_NAME?updateMask=accessRulesOptions
Authorization: Bearer AUTH_TOKEN

{
  "accessRulesOptions": {
    "defaultSquashMode": "ROOT_SQUASH",
    "defaultSquashUid": UID,
    "defaultSquashGid": GID
  }
}

각 항목의 의미는 다음과 같습니다.

  • defaultSquashModeROOT_SQUASH입니다.
  • defaultSquashUiddefaultSquashGid는 루트 사용자를 변환할 사용자 및 그룹 ID 값입니다.

인스턴스 업데이트에 대한 자세한 내용은 인스턴스 관리를 참고하세요.

Google Cloud 콘솔

Google Cloud 콘솔을 사용하여 루트 스쿼시를 구성할 수 없습니다.

예외를 사용하여 루트 스쿼시 구성

신뢰할 수 있는 특정 클라이언트를 제외한 모든 클라이언트에 루트 스쿼시를 적용하려면 액세스 규칙을 지정하세요. 이 규칙은 루트 사용자를 스쿼시할 기본 UID 및 GID와 IP 주소 또는 주소 범위에 따라 특정 클라이언트를 스쿼시에서 제외하는 규칙을 지정합니다.

스쿼시 UID 및 GID에 일반적으로 사용되는 값은 65534이며 이는 nobody 사용자로 변환됩니다. nobody 사용자는 파일 시스템에 대한 쓰기 액세스 권한이 없습니다. 루트 사용자 및 Owner 그룹의 구성원만 읽기, 쓰기, 실행 액세스 권한을 갖습니다. 다른 사용자는 읽기 및 실행 액세스 권한만 가집니다.

인스턴스 만들기

gcloud

인스턴스를 만들려면 다음 안내를 따르세요.

gcloud lustre instances create INSTANCE_NAME \
  --project=PROJECT_ID \
  --location=LOCATION \
  --network=NETWORK_NAME \
  --per-unit-storage-throughput=PER_UNIT_STORAGE_THROUGHPUT \
  --capacity-gib=CAPACITY \
  --filesystem=FS_NAME \
  --default-squash-mode=ROOT_SQUASH \
  --default-squash-uid=UID \
  --default-squash-gid=GID \
  --access-rules=name="ACCESS_RULE_NAME",ipAddressRanges="IP_ADDRESS_OR_CIDR_RANGE",squashMode=NO_SQUASH

각 항목의 의미는 다음과 같습니다.

  • --default-squash-modeROOT_SQUASH입니다.
  • --default-squash-uid--default-squash-gid는 루트 사용자를 병합할 기본 ID를 지정합니다.
  • --access-rules은 루트 스쿼시에 대한 예외를 지정합니다. 다음 값을 지정해야 합니다.
    • name은 이 액세스 규칙의 이름입니다.
    • ipAddressRanges는 겹치지 않는 하나 이상의 IP 주소 또는 CIDR 범위의 쉼표로 구분된 목록입니다. 범위는 192.168.0.0/24 형식으로 지정됩니다.
    • squashModeNO_SQUASH여야 합니다.

사용 가능한 필드의 전체 목록과 설명은 Managed Lustre 인스턴스 만들기를 참고하세요.

REST

REST API를 사용하여 인스턴스를 만들려면 다음 엔드포인트로 요청을 보내고 accessRulesOptions 객체를 포함합니다.

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances?instanceId=INSTANCE_NAME
Authorization: Bearer AUTH_TOKEN
{
  "filesystem": "FS_NAME",
  "perUnitStorageThroughput": "PER_UNIT_STORAGE_THROUGHPUT",
  "capacityGib": "CAPACITY_GIB",
  "network": "NETWORK",
  "accessRulesOptions": {
    "accessRules": [
      {
        "name": "ACCESS_RULE_NAME",
        "ipAddressRanges": [
          "IP_ADDRESS_OR_CIDR_RANGE_1",
          "IP_ADDRESS_OR_CIDR_RANGE_2"
        ],
        "squashMode": "NO_SQUASH"
      }
    ],
    "defaultSquashMode": "SQUASH_MODE",
    "defaultSquashUid": UID,
    "defaultSquashGid": GID
  }
}

특정 액세스 규칙을 설정할 때는 다음 필드가 필요합니다.

  • name은 이 규칙의 사용자 정의 이름입니다. 영숫자 문자 및 밑줄 (_)만 사용해야 하며 16자 이하여야 합니다.

  • ipAddressRanges은 겹치지 않는 IP 주소 또는 CIDR 범위 하나 이상의 목록입니다. 범위는 192.168.0.0/24 형식으로 지정됩니다.

  • squashMode은 항상 NO_SQUASH입니다.

  • defaultSquashModeROOT_SQUASH입니다.

  • defaultSquashUiddefaultSquashGid은 특정 액세스 규칙과 일치하지 않는 루트 사용자를 변환할 사용자 및 그룹 ID 값입니다.

예를 들어 특정 IP 주소 범위와 특정 IP 주소의 루트 사용자를 제외하고 기본 루트 스쿼시를 설정하려면 accessRulesOptions 객체가 다음과 같이 표시됩니다.

{
  "accessRulesOptions": {
    "accessRules": [
      {
        "name": "dont_squash",
        "ipAddressRanges": [
          "192.100.1.10",
          "192.168.0.0/24"
        ],
        "squashMode": "NO_SQUASH"
      }
    ],
    "defaultSquashMode": "ROOT_SQUASH",
    "defaultSquashUid": 65534,
    "defaultSquashGid": 65534
  }
}

REST API를 사용하여 인스턴스를 만드는 방법에 대한 자세한 내용은 관리형 Lustre 인스턴스 만들기를 참고하세요.

Google Cloud 콘솔

Google Cloud 콘솔을 사용하여 루트 스쿼시를 구성할 수 없습니다.

인스턴스 업데이트

gcloud

인스턴스를 업데이트하려면 다음 단계를 따르세요.

gcloud lustre instances update INSTANCE_NAME \
  --project=PROJECT_ID \
  --location=LOCATION \
  --default-squash-mode=ROOT_SQUASH \
  --default-squash-uid=UID \
  --default-squash-gid=GID \
  --access-rules=name="ACCESS_RULE_NAME",ipAddressRanges="IP_ADDRESS_OR_CIDR_RANGE",squashMode=NO_SQUASH

각 항목의 의미는 다음과 같습니다.

  • --default-squash-modeROOT_SQUASH입니다.
  • --default-squash-uid--default-squash-gid는 루트 사용자를 병합할 기본 ID를 지정합니다.
  • --access-rules은 루트 스쿼시에 대한 예외를 지정합니다. 다음 값을 지정해야 합니다.
    • name은 이 액세스 규칙의 이름입니다.
    • ipAddressRanges는 겹치지 않는 하나 이상의 IP 주소 또는 CIDR 범위의 쉼표로 구분된 목록입니다. 범위는 192.168.0.0/24 형식으로 지정됩니다.
    • squashModeNO_SQUASH여야 합니다.

인스턴스 업데이트에 대한 자세한 내용은 인스턴스 관리를 참고하세요.

REST

REST API를 사용하여 인스턴스를 업데이트하려면 특정 엔드포인트에 PATCH 요청을 전송합니다. 엔드포인트 URL에서 accessRulesOptionsupdateMask의 값으로 지정해야 합니다.

PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances/INSTANCE_NAME?updateMask=accessRulesOptions
Authorization: Bearer AUTH_TOKEN

{
  "accessRulesOptions": {
    "accessRules": [
      {
        "name": "ACCESS_RULE_NAME",
        "ipAddressRanges": [
          "IP_ADDRESS_OR_CIDR_RANGE_1",
          "IP_ADDRESS_OR_CIDR_RANGE_2"
        ],
        "squashMode": "NO_SQUASH"
      }
    ],
    "defaultSquashMode": "SQUASH_MODE",
    "defaultSquashUid": UID,
    "defaultSquashGid": GID
  }
}

인스턴스 업데이트에 대한 자세한 내용은 인스턴스 관리를 참고하세요.

Google Cloud 콘솔

Google Cloud 콘솔을 사용하여 루트 스쿼시를 구성할 수 없습니다.

인스턴스에서 루트 스쿼시 삭제

인스턴스에서 모든 루트 스쿼시 설정을 삭제하려면 액세스 규칙을 지우고 기본 모드를 NO_SQUASH로 설정하도록 인스턴스를 업데이트합니다.

gcloud

gcloud lustre instances update INSTANCE_NAME \
  --project=PROJECT_ID \
  --location=LOCATION \
  --default-squash-mode=NO_SQUASH \
  --clear-access-rules \
  --default-squash-uid=0 --default-squash-gid=0

REST

PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances/INSTANCE_NAME?updateMask=accessRulesOptions
Authorization: Bearer AUTH_TOKEN

{
  "accessRulesOptions": {
    "defaultSquashMode": "NO_SQUASH"
  }
}

Google Cloud 콘솔

Google Cloud 콘솔을 사용하여 루트 스쿼시를 구성할 수 없습니다.