데이터 액세스 감사 로그 구성

이 가이드에서는 프로젝트 또는 조직에서 데이터 액세스 감사 로그의 여러 측면을 사용 설정하고 구성하는 방법을 설명합니다. 감사 로그에 대한 일반 정보는 Cloud 감사 로그를 참조하세요.

관리자 활동 감사 로그는 모든 Google Cloud 서비스에서 사용 설정되며 구성될 수 없습니다.

구성 개요

데이터 액세스 감사 로그는 BigQuery를 제외하고 기본적으로 사용 중지되어 있습니다. 데이터 액세스 감사 로그의 일부 측면을 사용 설정하고 구성할 수 있습니다.

  • 조직. 조직의 데이터 액세스 감사 로그를 사용 설정하고 구성할 수 있으며, 이는 그 조직의 모든 기존 및 신규 프로젝트와 폴더에 적용됩니다.

  • 폴더. 폴더의 데이터 액세스 감사 로그를 사용 설정하고 구성할 수 있으며, 이는 그 폴더의 모든 기존 및 신규 프로젝트에 적용되지만 프로젝트의 조직에서 사용 설정된 데이터 액세스 감사 로그는 사용 중지할 수 없습니다.

  • 프로젝트. 개별 프로젝트의 데이터 액세스 감사 로그를 구성할 수 있지만 프로젝트의 조직 또는 폴더에 사용 설정된 데이터 액세스 감사 로그는 사용 중지할 수 없습니다.

  • 결제 계정. 결제 계정의 데이터 액세스 감사 로그를 구성하려면 gcloud 명령줄 도구를 사용합니다. 데이터 액세스 감사 로그와 결제 계정으로 gcloud 도구를 사용하는 방법에 대한 자세한 내용은 gcloud beta billing accounts set-iam-policy 명령어 참조 문서를 참조하세요.

  • 기본 구성. 조직, 폴더 또는 프로젝트의 기본 데이터 액세스 감사 로그 구성을 지정할 수 있습니다. 이 구성은 이후에 데이터 액세스 감사 로그를 생성하기 시작하는 Google Cloud 서비스에 적용됩니다.

  • 서비스. 어떤 서비스의 감사 로그를 수신할지 지정할 수 있습니다. 예를 들어 Compute Engine의 감사 로그는 수신하고 Cloud SQL의 감사 로그는 수신하지 않도록 지정할 수 있습니다. 감사 로그를 생성할 수 있는 Google Cloud 서비스의 목록은 감사 로그를 생성하는 Google 서비스를 참조하세요.

  • 정보의 종류. 감사 로그에 어떤 종류의 정보를 포함할지 제어할 수 있습니다. 데이터 액세스 감사 로그 정보에는 다음 세 가지 종류가 있습니다.

    • 관리자 읽기: 메타데이터 또는 구성 정보를 읽는 작업을 기록합니다.

      관리자 활동 감사 로그는 메타데이터와 구성 정보의 쓰기를 기록합니다. 이 로그는 사용 중지할 수 없습니다.

    • 데이터 읽기: 사용자가 제공한 데이터를 읽는 작업을 기록합니다.

    • 데이터 쓰기: 사용자가 제공한 데이터를 쓰는 작업을 기록합니다.

    예를 들어 데이터 쓰기 작업만 로깅하면서 Cloud DNS의 3가지 종류 정보를 모두 로깅할 수 있습니다.

  • 면제 사용자. 특정 사용자 또는 그룹의 데이터 액세스가 기록되지 않도록 제외할 수 있습니다. 예를 들어 내부 테스트 계정의 Cloud Debugger 작업이 기록되지 않도록 면제할 수 있습니다.

IAM 감사 로그 콘솔 또는 API를 통해 데이터 액세스 감사 로그를 구성할 수 있습니다. 이러한 방법은 아래 섹션에서 설명합니다.

서비스별 구성

Google Cloud 서비스 전체(allServices) 구성과 Google Cloud 서비스별 구성이 모두 있는 경우 서비스의 결과 구성은 두 구성의 합집합입니다. 즉, 다음과 같습니다.

  • 특정 Google Cloud 서비스의 데이터 액세스 감사 로그를 사용 설정할 수 있지만 더 광범위한 구성에서 사용 설정된 Google Cloud 서비스의 데이터 액세스 감사 로그를 중지할 수 없습니다.

  • Google Cloud 서비스의 데이터 액세스 감사 로그에 다른 종류의 정보를 추가할 수 있지만 더 광범위한 구성에서 지정된 종류의 정보를 삭제할 수 없습니다.

  • 사용자를 예외 목록에 추가할 수 있지만 더 광범위한 구성의 예외 목록에서 사용자를 삭제할 수 없습니다.

조직, 폴더, 프로젝트 구성

조직, 폴더, 프로젝트에 대한 데이터 액세스 감사 로그를 구성할 수 있습니다. Google Cloud 서비스에 대한 구성이 상, 하 계층 전체에 존재하는 경우 결과 구성은 해당 구성의 합집합입니다. 즉, 프로젝트 수준에서는 다음과 같이 적용됩니다.

  • Google Cloud 서비스의 로그를 사용 설정할 수 있지만 폴더 또는 조직에서 사용 설정된 Google Cloud 서비스의 로그를 중지할 수 없습니다.

  • 정보의 종류를 사용 설정할 수 있지만 조직 또는 폴더에서 사용 설정된 정보의 종류를 중지할 수 없습니다.

  • 사용자를 제외 목록에 추가할 수 있지만 조직 또는 폴더의 제외 목록에 있는 사용자를 삭제할 수 없습니다.

  • 조직 또는 폴더 수준에서는 프로젝트에 데이터 액세스 감사 로그가 구성되지 않은 경우에도 조직 또는 폴더 내의 프로젝트에 데이터 액세스 감사 로그를 사용 설정할 수 있습니다.

액세스 제어

Google Cloud 리소스에 대한 데이터 액세스 감사 로그를 구성하려면 다음 ID 및 액세스 관리 역할이 필요합니다.

Cloud Console에서 데이터 액세스 감사 로그 구성

이 섹션에서는 Cloud Console을 사용하여 데이터 액세스 감사 로그를 구성하는 방법을 설명합니다.

API 또는 gcloud 명령줄 도구를 사용하여 이 태스크를 프로그래매틱 방식으로 수행할 수도 있습니다. 자세한 내용은 API로 데이터 액세스 감사 로그 구성을 참조하세요.

Cloud Console에서 감사 로그 구성 옵션에 액세스하려면 다음 단계를 수행합니다.

  1. Cloud Console에서 IAM 및 관리자 > 감사 로그를 선택합니다.

    감사 로그 페이지로 이동

  2. 페이지 상단에서 기존의 Google Cloud 프로젝트, 폴더 또는 조직을 선택합니다.

감사 로그 사용 설정

다음 단계는 데이터 액세스 감사 로그를 사용 설정하는 방법을 보여줍니다.

  1. 감사 로그 페이지의 기본 표에 있는 제목 열에서 Google Cloud 서비스를 한 개 이상 선택합니다.

  2. 로그 유형 탭에서 사용 설정할 데이터 액세스 감사 로그 유형 옆에 있는 상자를 선택한 후 저장을 클릭합니다.

  3. 감사 로그가 성공적으로 사용 설정되면 표에 체크 표시가 나타납니다. 아래 예시에서는 Cloud Composer API 서비스에 관리자 읽기데이터 읽기 감사 로그가 사용 설정되어 있습니다.

    감사 로그 구성

데이터 액세스 감사 로그를 생성하는 모든 Google Cloud 서비스에 감사 로그를 사용 설정할 수도 있습니다. 감사 로그 페이지의 기본 표에서 모든 Google Cloud 서비스를 선택합니다.

이 일괄 구성 방법은 현재 사용할 수 있는 Google Cloud 서비스에만 적용됩니다. 새로 추가되는 Google Cloud 서비스는 기본 감사 구성을 상속합니다.

데이터 액세스 감사 로그 중지

다음 단계는 데이터 액세스 감사 로그를 중지하는 방법을 보여줍니다.

  1. 감사 로그 페이지의 기본 표에서 Google Cloud 서비스를 한 개 이상 선택합니다.

  2. 로그 유형 탭에서 중지할 데이터 액세스 감사 로그 유형을 선택한 후 저장을 클릭합니다.

  3. 표에서 데이터 액세스 감사 로그에 회색 대시가 표시되면 성공적으로 중지된 것입니다. 사용 설정된 데이터 액세스 감사 로그에는 모두 녹색 체크표시가 표시됩니다.

사용자 면제 설정

면제를 설정하여 감사 로그를 생성할 사용자를 제어할 수 있습니다. 면제 사용자를 추가하면 선택한 로그 유형에서 해당 사용자의 감사 로그가 생성되지 않습니다. 관리자 활동 로그는 면제 상태와 관계없이 항상 생성됩니다.

다음 단계에서는 면제를 설정하는 방법을 보여줍니다.

  1. 감사 로그 구성 페이지의 기본 표에 있는 제목 열에서 Google Cloud 서비스를 한 개 이상 선택합니다.

  2. 면제 사용자 탭을 선택합니다. 면제 사용자 추가에서 선택한 서비스의 면제 목록에 추가할 사용자의 이메일 주소를 입력합니다. 면제 사용자 추가 버튼을 필요한 횟수만큼 선택하여 여러 사용자를 추가할 수 있습니다.

  3. 사용자에게 중지할 데이터 액세스 감사 로그 유형 옆에 있는 상자를 선택한 후 저장을 클릭합니다.

  4. 서비스에 면제 사용자가 성공적으로 추가되면 표의 면제 열 아래에 추가된 면제 사용자 수가 표시됩니다.

면제 목록에서 사용자를 삭제하려면 다음 안내를 따르세요.

  1. 정보 패널에서 면제 사용자 탭으로 이동합니다.

  2. 사용자 이름 위로 마우스를 가져간 후 나타나는 휴지통 아이콘을 선택합니다.

  3. 사용자의 이름이 취소선 텍스트로 표시되면 저장을 클릭합니다.

면제 사용자의 정보를 수정하려면 다음 안내를 따르세요.

  1. 정보 패널에서 면제 사용자 탭으로 이동합니다.

  2. 사용자 이름 오른쪽의 확장 화살표를 클릭합니다.

  3. 데이터 액세스 감사 로그 유형을 사용자에 따라 선택하거나 선택 해제한 후 저장을 클릭합니다.

기본 구성 설정

프로젝트, 폴더 또는 조직의 모든 신규 및 기존 Google Cloud 서비스가 상속받는 구성을 설정할 수 있습니다. 그러면 새 Google Cloud 서비스를 사용할 수 있게 되어 조직의 사용자가 사용하기 시작할 때 이 기본 구성 설정이 적용됩니다. 해당 서비스는 다른 Google Cloud 서비스에 이미 설정된 감사 로깅 정책을 상속하므로 데이터 액세스 감사 로그가 캡처됩니다.

  1. 페이지 상단의 기본 구성 설정을 클릭합니다.

  2. 로그 유형 탭에서 사용 설정하거나 사용 중지하려는 데이터 액세스 감사 로그 유형 옆의 상자를 선택한 후 저장을 클릭합니다.

  3. 면제 사용자 탭에서 면제 목록에 추가하려는 사용자의 이메일 주소를 기재한 후 저장을 클릭합니다. 위의 사용자 면제 설정 섹션의 단계를 따릅니다.

API로 데이터 액세스 감사 로그 구성

이 섹션에서는 API 및 gcloud 도구를 사용하여 프로그래매틱 방식으로 데이터 액세스 감사 로그를 구성하는 방법을 설명합니다.

Cloud Console을 사용하여 이 태스크의 대부분을 수행할 수도 있습니다. 자세한 내용은 Cloud Console에서 데이터 액세스 감사 로그 구성을 참조하세요.

IAM 정책 객체

API를 사용하여 데이터 액세스 감사 로그를 구성하려면 프로젝트, 폴더 또는 조직과 연결된 IAM 정책을 수정해야 합니다. 감사 로그 구성은 정책의 auditConfigs 섹션에 있습니다.

"auditConfigs": [
  {
    object(AuditConfig)
  }
]

자세한 내용은 IAM 정책 유형을 참조하세요.

다음 섹션에서는 AuditConfig 객체를 자세히 설명합니다. 구성을 변경하는 데 사용되는 API 및 gcloud 도구 명령어는 getIamPolicy 및 setIamPolicy를 참조하세요.

AuditConfig 객체

감사 로그 구성은 AuditConfig 객체의 목록으로 구성됩니다. 각 객체는 한 서비스의 로그를 구성하거나 모든 서비스의 더 광범위한 구성을 설정합니다. 각 객체는 다음과 같이 나타납니다.

{
  "service": SERVICE,
  "auditLogConfigs": [
    {
      "logType": "ADMIN_READ"
      "exemptedMembers": [ MEMBER,]
    },
    {
      "logType": "DATA_READ"
      "exemptedMembers": [ MEMBER,]
    },
    {
      "logType": "DATA_WRITE"
      "exemptedMembers": [ MEMBER,]
    },
  ]
},

SERVICE"appengine.googleapis.com"과 같은 서비스 이름이거나 "allServices"와 같은 특수 값입니다. 구성에 특정 서비스가 언급되어 있지 않으면 해당 서비스에는 더 광범위한 구성이 사용됩니다. 구성이 없으면 해당 서비스에 데이터 액세스 감사 로그가 사용 설정되지 않습니다. 서비스 이름 목록은 로그 서비스를 참조하세요.

AuditConfig 객체의 auditLogConfigs 섹션은 각각 한 종류의 감사 로그 정보를 구성하는 객체 0~3개로 구성된 목록입니다. 목록에서 종류 중 하나를 생략하면 이 종류의 정보는 서비스에 사용 설정되지 않습니다.

MEMBER는 데이터 액세스 감사 로그가 수집되지 않는 사용자입니다. 단일 사용자, 그룹, 서비스 계정을 지정할 수 있습니다. binding 유형은 여러 가지 유형의 구성원을 설명하지만 이들 모두를 사용하여 데이터 액세스 감사 로그를 구성할 수 있는 것은 아닙니다.

다음은 JSON 형식과 YAML 형식에서 감사를 구성하는 예시입니다. gcloud 명령줄 도구를 사용할 경우 YAML 형식이 기본값입니다.

JSON

"auditConfigs": [
  {
    "auditLogConfigs": [
      {
        "logType": "ADMIN_READ"
      },
      {
        "logType": "DATA_WRITE"
      },
      {
        "logType": "DATA_READ"
      }
    ],
    "service": "allServices"
  },
  {
    "auditLogConfigs": [
      {
        "exemptedMembers": [
          "499862534253-compute@developer.gserviceaccount.com"
        ],
        "logType": "ADMIN_READ"
      }
    ],
    "service": "cloudsql.googleapis.com"
  }
],

YAML

auditConfigs:
- auditLogConfigs:
  - logType: ADMIN_READ
  - logType: DATA_WRITE
  - logType: DATA_READ
  service: allServices
- auditLogConfigs:
  - exemptedMembers:
    - 499862534253-compute@developer.gserviceaccount.com
    logType: ADMIN_READ
  service: cloudsql.googleapis.com

일반 설정

다음은 프로젝트에 대한 몇 가지 일반 감사 로그 구성입니다.

이러한 구성에서는 프로젝트의 조직 또는 폴더에 감사 로그 구성이 포함되지 않습니다. 자세한 내용은 조직 및 프로젝트 구성을 참조하세요.

모든 데이터 액세스 감사 로그 사용 설정

다음 auditConfigs 섹션에서는 모든 서비스와 사용자에 데이터 액세스 감사 로그를 사용 설정합니다.

JSON

"auditConfigs": [
      {
        "service": "allServices",
        "auditLogConfigs": [
          { "logType": "ADMIN_READ" },
          { "logType": "DATA_READ"  },
          { "logType": "DATA_WRITE" },
        ]
      },
    ]

YAML

auditConfigs:
- auditLogConfigs:
  - logType: ADMIN_READ
  - logType: DATA_WRITE
  - logType: DATA_READ
  service: allServices

한 종류의 서비스 및 정보 사용 설정

다음 구성은 Cloud SQL에 데이터 액세스 감사 로그를 사용 설정합니다. 로그가 사용자 정의 데이터의 쓰기 작업만 기록합니다.

JSON

"auditConfigs": [
  {
    "service": "cloudsql.googleapis.com",
    "auditLogConfigs": [
      { "logType": "DATA_WRITE" },
    ]
  },
]

YAML

auditConfigs:
- auditLogConfigs:
  - logType: DATA_WRITE
  service: cloudsql.googleapis.com

모든 데이터 액세스 감사 로그 중지

프로젝트에서 BigQuery를 제외한 모든 데이터 액세스 감사 로그를 사용 중지하려면 새 IAM 정책에 빈 auditConfigs: 섹션을 포함합니다.

JSON

"auditConfigs": [],

YAML

auditConfigs:

새 정책에서 auditConfigs 섹션을 완전히 삭제해도 setIamPolicy가 기존 데이터 액세스 감사 로그 구성을 변경하지 않습니다. 자세한 내용은 setIamPolicy 업데이트 마스크를 참조하세요.

BigQuery 데이터 액세스 감사 로그를 중지할 수 없습니다.

getIamPolicy 및 setIamPolicy

Resource Manager API의 getIamPolicy 메서드와 setIamPolicy 메서드를 사용하여 IAM 정책을 읽고 씁니다. 다음과 같이 여러 메서드 중에 선택하여 사용할 수 있습니다.

  • Resource Manager API에는 다음과 같은 메서드가 있습니다.

    projects.getIamPolicy
    projects.setIamPolicy
    organizations.getIamPolicy
    organizations.setIamPolicy
    
  • gcloud 명령줄 도구에는 다음과 같은 Resource Manager 명령어가 있습니다.

    gcloud projects get-iam-policy
    gcloud projects set-iam-policy
    gcloud organizations get-iam-policy
    gcloud organizations set-iam-policy
    gcloud beta billing accounts get-iam-policy
    gcloud beta billing accounts set-iam-policy
    

어떤 메서드를 선택하든 다음 3단계를 따르세요.

  1. getIamPolicy 메서드 중 하나를 사용하여 현재 정책을 읽습니다. 정책을 임시 파일에 저장합니다.
  2. 임시 파일의 정책을 수정합니다. auditConfigs 섹션만 변경(또는 추가)합니다.
  3. setIamPolicy 메서드 중 하나를 사용하여 수정된 정책을 임시 파일에 씁니다.

Resource Manager에서 개발자가 첫 번째 단계에서 정책을 읽은 후에 다른 개발자가 이 정책을 변경했음을 감지하면 setIamPolicy가 실패합니다. 이 경우 앞의 세 단계를 반복합니다.

예시

다음 예시에서는 gcloud 명령어와 Resource Manager API를 사용하여 프로젝트의 데이터 액세스 감사 로그를 구성하는 방법을 보여줍니다.

조직 데이터 액세스 감사 로그를 구성하려면 명령어와 API 메서드의 'projects' 버전을 'organizations' 버전으로 바꿉니다.

gcloud

gcloud projects 명령어를 사용하여 데이터 액세스 감사 로그를 구성하려면 다음을 수행합니다.

  1. 프로젝트의 IAM 정책을 읽고 파일에 저장합니다.

    gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    

    아래와 같이 정책이 반환됩니다. 이 정책에는 아직 auditConfigs 섹션이 없습니다.

    bindings:
    - members:
      - user:colleague@example.com
      role: roles/editor
    - members:
      - user:myself@example.com
      role: roles/owner
    etag: BwVM-FDzeYM=
    version: 1
    
  2. /tmp/policy.yaml에서 정책을 수정하되, 데이터 액세스 감사 로그 구성 추가하거나 변경합니다.

    Cloud SQL 데이터-쓰기 데이터 액세스 감사 로그를 사용 설정하도록 수정된 정책의 예가 아래에 나와 있습니다. 처음에 네 줄이 추가되었습니다.

    auditConfigs:
    - auditLogConfigs:
      - logType: DATA_WRITE
      service: cloudsql.googleapis.com
    bindings:
    - members:
      - user:colleague@example.com
      role: roles/editor
    - members:
      - user:myself@example.com
      role: roles/owner
    etag: BwVM-FDzeYM=
    version: 1
    
  3. 다음과 같이 새 IAM 정책을 씁니다.

    gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
    

    앞의 명령어가 다른 변경사항과의 충돌을 보고할 경우 이 단계를 1단계부터 다시 반복합니다.

JSON

YAML 대신 JSON 형식으로 IAM 정책을 사용하려면 예시에서 다음 gcloud 명령어를 바꿉니다.

gcloud projects get-iam-policy PROJECT_ID --format=json >/tmp/policy.json
gcloud projects set-iam-policy PROJECT_ID /tmp/policy.json

API

Resource Manager API를 사용하여 데이터 액세스 감사 로그를 구성하려면 다음을 수행합니다.

  1. getIamPolicy API 메서드에 다음 매개변수를 지정하여 프로젝트의 IAM 정책을 읽습니다.

    • 리소스: projects/PROJECT_ID
    • 요청 본문: 비워둠

    이 메서드는 아래와 같이 현재 정책 객체를 반환합니다. 이 프로젝트의 정책에는 아직 auditConfigs 섹션이 없습니다.

    {
      "bindings": [
      {
        "members": [
          "user:colleague@example.com"
        ],
        "role": "roles/editor"
      },
      {
        "members": [
          "user:myself@example.com"
        ],
        "role": "roles/owner"
      }
    ],
    "etag": "BwUsv2gimRs=",
    "version": 1
    

    }

  2. 현재 정책을 수정합니다.

    • auditConfigs 섹션을 변경 또는 추가합니다.

      데이터 액세스 감사 로그를 중지하려면 auditConfigs:[] 섹션에 빈 값을 포함합니다.

    • etag 값을 유지합니다.

    다음 단계에서 updateMask를 주의해서 설정한다면 새 정책 객체에서 다른 모든 정보를 삭제할 수도 있습니다. Cloud SQL 데이터 쓰기 감사 로그를 사용 설정하도록 수정된 정책은 다음과 같습니다.

    {
      "auditConfigs": [
        {
          "auditLogConfigs": [
            {
              "logType": "DATA_WRITE"
            }
          ],
          "service": "cloudsql.googleapis.com"
        }
      ],
      "etag": "BwVM-FDzeYM="
    }
    
  3. setIamPolicy API 메서드를 사용하여 새 정책을 씁니다. 이때 매개변수는 다음과 같이 지정합니다.

    • 리소스: projects/PROJECT_ID
    • 요청 본문:
      • updateMask: "auditConfigs,etag"
      • policy: 수정한 정책 객체

setIamPolicy 업데이트 마스크

이 섹션에서는 setIamPolicy 메서드에 사용되는 updateMask 매개변수의 중요성을 설명하고 gcloud 도구 set-iam-policy 명령어를 사용할 때 프로젝트 또는 조직에 실수로 해를 끼치지 않도록 주의가 필요한 이유를 설명합니다.

setIamPolicy API methodupdateMask 매개변수를 사용하여 업데이트할 정책 필드를 제어합니다. 예를 들어 마스크에 bindings가 포함되어 있지 않으면 정책 섹션을 실수로 변경할 수 없습니다. 반면에 마스크에 bindings가 포함되어 있으면 정책 섹션이 항상 업데이트됩니다. bindings의 업데이트된 값을 포함하지 않으면 섹션이 정책에서 완전히 삭제됩니다.

setIamPolicy를 호출하는 gcloud projects set-iam-policy 명령어로는 updateMask 매개변수를 지정할 수 없습니다. 대신 이 명령어는 다음과 같은 방법으로 updateMask 값을 계산합니다.

  • updateMask에는 항상 bindingsetag 필드가 포함됩니다.
  • set-iam-policy에서 제공된 정책 객체에 auditConfigs 등의 다른 최상위 필드가 포함되어 있으면 해당 필드가 updateMask에 추가됩니다.

이러한 규칙의 결과로 set-iam-policy 명령어는 다음과 같이 동작합니다.

  • 새 정책에서 auditConfigs 섹션을 생략해도 이 섹션이 업데이트 마스크에 없으므로 auditConfigs 섹션의 이전 값(있는 경우)은 변경되지 않습니다. 이 경우 해가 되지 않으나 혼동이 발생할 수 있습니다.

  • 새 정책 객체에서 bindings를 생략하면 정책에서 bindings 섹션이 삭제됩니다. 이 섹션이 업데이트 마스크에 표시되기 때문입니다. 이 경우 매우 유해한 결과가 초래될 수 있으며, 모든 사용자가 프로젝트에 액세스할 수 없게 됩니다.

  • 새 정책 객체에서 etag를 생략하면 정책에 대한 동시 변경사항 검사가 사용 중지되고 사용자의 변경사항이 실수로 다른 사용자의 변경사항을 덮어쓰게 될 수 있습니다.