

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Transfer Family 서버에 대한 Amazon CloudWatch 로깅
<a name="structured-logging"></a>

Amazon CloudWatch는를 포함한 AWS 리소스에 대한 포괄적인 가시성을 제공하는 강력한 모니터링 및 관찰성 서비스입니다 AWS Transfer Family.
+ 실시간 모니터링: CloudWatch는 Transfer Family 리소스 및 애플리케이션을 실시간으로 모니터링하여 성능을 추적하고 분석할 수 있습니다.
+ 지표 수집: CloudWatch는 리소스 및 애플리케이션에 대한 다양한 지표를 수집하고 추적합니다.이 지표는 측정하여 분석에 사용할 수 있는 변수입니다.
+ CloudWatch 홈 페이지: CloudWatch 홈 페이지에는 Transfer Family 및 사용하는 기타 AWS 서비스에 대한 지표가 자동으로 표시되므로 모니터링 데이터를 중앙에서 볼 수 있습니다.
+ 사용자 지정 대시보드: CloudWatch에서 사용자 지정 대시보드를 생성하여 사용자 지정 애플리케이션 및 모니터링하도록 선택한 리소스와 관련된 지표를 표시할 수 있습니다.
+ 경보 및 알림: CloudWatch를 사용하면 지표를 모니터링하고 특정 임계값 위반 시 알림 또는 자동 작업을 트리거하는 경보를 생성할 수 있습니다. 이는 Transfer Family 서버에서 파일 전송 활동을 모니터링하고 그에 따라 리소스를 조정하는 데 유용할 수 있습니다.
+ 비용 최적화: CloudWatch에서 수집한 데이터를 사용하여 사용률이 낮은 리소스를 식별하고 인스턴스 중지 또는 삭제와 같은 조치를 취하여 비용을 최적화할 수 있습니다.

전반적으로 CloudWatch의 포괄적인 모니터링 기능은 Transfer Family 인프라와 해당 인프라에서 실행되는 애플리케이션을 관리하고 최적화하는 데 유용한 도구입니다.

Transfer Family 웹 앱의 CloudWatch 로깅에 대한 세부 정보는에서 확인할 수 있습니다[Transfer Family 웹 앱에 대한 CloudTrail 로깅](webapp-cloudtrail.md).

## Transfer Family에 대한 CloudWatch 로깅 유형
<a name="log-tf-types"></a>

Transfer Family는 CloudWatch에 이벤트를 로깅하는 두 가지 방법을 제공합니다.
+ JSON 정형 로깅
+ 로깅 역할을 통한 로깅

Transfer Family 서버의 경우 원하는 로깅 메커니즘을 선택할 수 있습니다. 커넥터 및 워크플로의 경우 로깅 역할만 지원됩니다.

**JSON 구조화 로깅**

서버 이벤트 로깅의 경우 JSON 구조화 로깅을 사용하는 것이 좋습니다. 이렇게 하면 CloudWatch 로그 쿼리를 활성화하는 보다 포괄적인 로깅 형식이 제공됩니다. 이러한 유형의 로깅의 경우 서버를 생성(또는 서버의 로깅 구성을 편집)하는 사용자의 IAM 정책에 다음 권한이 포함되어야 합니다.
+ `logs:CreateLogDelivery`
+ `logs:DeleteLogDelivery`
+ `logs:DescribeLogGroups`
+ `logs:DescribeResourcePolicies`
+ `logs:GetLogDelivery`
+ `logs:ListLogDeliveries`
+ `logs:PutResourcePolicy`
+ `logs:UpdateLogDelivery`

다음은 예제 정책입니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"                
            ],
            "Resource": "*"
        }
    ]
}
```

JSON 구조화 로깅 설정에 대한 자세한 내용은 섹션을 참조하세요[서버에 대한 로깅 생성, 업데이트 및 보기](log-server-manage.md).

**로깅 역할**

서버에 연결된 관리형 워크플로와 커넥터에 대한 이벤트를 로깅하려면 로깅 역할을 지정해야 합니다. 액세스 권한을 설정하려면 리소스 기반 IAM 정책과 해당 액세스 정보를 제공하는 IAM 역할을 만듭니다. 다음은 서버 이벤트를 로깅할 수 AWS 계정 있는에 대한 정책 예제입니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:DescribeLogStreams",
                "logs:CreateLogGroup",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/transfer/*"
        }
    ]
}
```

워크플로 이벤트를 로깅하도록 로깅 역할을 구성하는 방법에 대한 자세한 내용은 섹션을 참조하세요[워크플로에 대한 로깅 관리](cloudwatch-workflows.md).

# 서버에 대한 로깅 생성, 업데이트 및 보기
<a name="log-server-manage"></a>

모든 AWS Transfer Family 서버에 대해 구조화된 로깅을 제공합니다. 모든 신규 및 기존 Transfer Family 서버에 대해 구조화된 로깅을 사용하는 것이 좋습니다. 구조화된 로깅 사용의 이점은 다음과 같습니다.
+ 구조화된 JSON 형식으로 로그를 수신합니다.
+ JSON 형식의 필드를 자동으로 검색하는 Amazon CloudWatch 로그 인사이트를 사용하여 로그를 쿼리할 수 있습니다.
+  AWS Transfer Family 리소스 간에 로그 그룹을 공유하면 여러 서버의 로그 스트림을 단일 로그 그룹으로 결합하여 모니터링 구성 및 로그 보존 설정을 더 쉽게 관리할 수 있습니다.
+ CloudWatch 대시보드에 추가할 수 있는 집계된 지표와 시각화를 생성합니다.
+ 로그 그룹을 사용하여 통합된 로그 지표, 시각화 및 대시보드를 생성하여 사용량 및 성능 데이터를 추적할 수 있습니다.

서버에 연결된 워크플로에 대한 로깅을 활성화하려면 로깅 역할을 사용해야 합니다.

**참고**  
로깅 역할을 추가할 때 로깅 그룹은 항상 이며 변경할 `/aws/transfer/your-serverID`수 없습니다. 즉, 구조화된 서버 로그를 동일한 그룹에 전송하지 않는 한 두 개의 개별 로깅 그룹에 로깅하게 됩니다.  
워크플로를 서버와 연결하려는 경우 로깅 역할을 추가해야 하는 경우의 기본 로그 그룹에 로깅하도록 구조화된 로깅을 설정할 수 있습니다`/aws/transfer/your-serverID`.  
로깅 그룹을 수정하려면 *AWS Transfer Family API* 참조의 [StructuredLogDestinations](https://docs.aws.amazon.com/transfer/latest/APIReference/API_UpdateServer.html#TransferFamily-UpdateServer-request-StructuredLogDestinations)를 참조하세요.

Transfer Family 콘솔을 사용하여 새 서버를 생성할 경우 기본값으로 로깅이 활성화됩니다. 서버를 생성한 후 `UpdateServer` API 작업을 사용하여 로깅 구성을 변경할 수 있습니다. 자세한 내용은 [StructuredLogDestinations](https://docs.aws.amazon.com/transfer/latest/APIReference/API_UpdateServer.html#TransferFamily-UpdateServer-request-StructuredLogDestinations)를 참조하세요.

현재 워크플로의 경우 로깅을 활성화하려면 로깅 역할을 지정해야 합니다.
+ `CreateServer` 또는 `UpdateServer` API 작업을 사용하여 워크플로를 서버에 연결하면 시스템에서 로깅 역할을 자동으로 생성하지 않습니다. 워크플로 이벤트를 기록하려면 서버에 로깅 역할을 명시적으로 연결해야 합니다.
+ Transfer Family 콘솔을 사용하여 서버를 생성하고 워크플로를 연결하는 경우 이름에 서버 ID가 포함된 로그 그룹에 로그가 전송됩니다. 형식은 `/aws/transfer/server-id`이며, 예를 들면 `/aws/transfer/s-1111aaaa2222bbbb3`와 같습니다. 서버 로그는 동일한 로그 그룹이나 다른 로그 그룹으로 전송될 수 있습니다.

**콘솔에서 서버를 만들고 편집할 때 고려할 로깅 고려 사항**
+ 콘솔을 통해 만든 새 서버는 워크플로가 서버에 연결되어 있지 않는 한 구조화된 JSON 로깅만 지원합니다.
+ 콘솔에서 새로 만든 서버의 경우 *로깅 없음*을 선택할 수 없습니다.
+ 기존 서버는 언제든지 콘솔을 통해 구조화된 JSON 로깅을 활성화할 수 있습니다.
+ 콘솔을 통해 구조화된 JSON 로깅을 활성화하면 기존 로깅 방법이 비활성화되므로 고객에게 요금이 두 배로 청구되지 않습니다. 단, 워크플로가 서버에 연결된 경우는 예외입니다.
+ 구조화된 JSON 로깅을 활성화하면 나중에 콘솔을 통해 비활성화할 수 없습니다.
+ 구조화된 JSON 로깅을 활성화하면 언제든지 콘솔을 통해 로그 그룹 대상을 변경할 수 있습니다.
+ 구조화된 JSON 로깅을 활성화한 경우 API를 통해 두 로깅 타입을 모두 활성화한 경우 콘솔을 통해 로깅 역할을 편집할 수 없습니다. 단, 워크플로가 서버에 연결된 경우는 예외입니다. 하지만 로깅 역할은 **추가 세부 정보**에 계속 표시됩니다.

**API 또는 SDK를 사용하여 서버를 만들고 편집할 때 로깅 고려 사항**
+ API를 통해 새 서버를 만드는 경우 로깅 타입 중 하나 또는 두 가지를 모두 구성하거나 로깅 없음을 선택할 수 있습니다.
+ 기존 서버의 경우 언제든지 구조화된 JSON 로깅을 활성화 및 비활성화할 수 있습니다.
+ API를 통해 언제든지 로그 그룹을 변경할 수 있습니다.
+ API를 통해 언제든지 로깅 역할을 변경할 수 있습니다.

**구조적 로깅을 활성화하려면 다음 권한이 있는 계정에 로그인해야 합니다**
+ `logs:CreateLogDelivery`
+ `logs:DeleteLogDelivery`
+ `logs:DescribeLogGroups`
+ `logs:DescribeResourcePolicies`
+ `logs:GetLogDelivery`
+ `logs:ListLogDeliveries`
+ `logs:PutResourcePolicy`
+ `logs:UpdateLogDelivery`

정책 예제는 단원에서 확인할 수 있습니다[CloudWatch 로깅 역할 구성](configure-cw-logging-role.md).

**Topics**
+ [서버에 대한 로깅 생성](#log-server-create)
+ [서버의 로깅 업데이트](#log-server-update)
+ [서버 구성 보기](#log-server-config)

## 서버에 대한 로깅 생성
<a name="log-server-create"></a>

새 서버를 만들 때 **추가 세부 정보 구성** 페이지에서 기존 로그 그룹을 지정하거나 새 로그 그룹을 만들 수 있습니다.

![\[서버 생성 마법사의 추가 세부 정보 구성을 위한 로깅 창 기존 로그 그룹 선택이 선택되었습니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-choose-existing-group.png)


**로그 그룹 생성**을 선택하면 CloudWatch 콘솔 [(](https://console.aws.amazon.com/cloudwatch/)https://console.aws.amazon.com/cloudwatch/)에서 로그 그룹 **생성** 페이지가 열립니다. 자세한 내용은 [CloudWatch Logs의 로그 그룹 생성](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#Create-Log-Group)을 참조하세요.

## 서버의 로깅 업데이트
<a name="log-server-update"></a>

로깅 세부 정보는 업데이트 시나리오에 따라 다릅니다.

**참고**  
구조화된 JSON 로깅을 선택하면 드문 경우지만 Transfer Family에서 이전 형식의 로깅을 중지하지만 새 JSON 형식으로 로깅을 시작하는 데 시간이 걸리는 지연이 발생할 수 있습니다. 이로 인해 이벤트가 로그되지 않을 수 있습니다. 서비스 중단은 없겠지만 로깅 방법을 변경한 후 처음 1시간 동안은 로그가 삭제될 수 있으므로 파일 전송에 주의해야 합니다.

기존 서버를 편집하는 경우 옵션은 서버 상태에 따라 달라집니다.
+ 서버에는 이미 로깅 역할이 활성화되어 있지만 구조화된 JSON 로깅은 활성화되어 있지 않습니다.  
![\[기존 로깅 역할을 보여주는 로깅 창입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-choose-role.png)
+ 서버에 로깅이 활성화되지 않았습니다.  
![\[서버에 로깅이 활성화되지 않은 경우의 로깅 창입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-edit-none.png)
+ 서버에는 이미 로깅 역할이 활성화되어 있지만 구조화된 JSON 로깅은 활성화되어 있지 않습니다.  
![\[서버에 아직 로깅이 활성화되지 않은 경우의 로깅 창입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-edit-add-json-02.png)
+ 서버에는 이미 구조화된 JSON 로깅이 활성화되어 있으며 지정된 로딩 역할도 있습니다.  
![\[서버에 구조적 로깅이 활성화되어 있고 로깅 역할도 지정된 경우의 로깅 창입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-edit-both.png)

## 서버 구성 보기
<a name="log-server-config"></a>

서버 구성 페이지의 세부 정보는 시나리오에 따라 다릅니다.

시나리오에 따라 서버 구성 페이지는 다음 예 중 하나와 비슷할 수 있습니다.
+ 로깅이 활성화되지 않았습니다.  
![\[로깅이 구성되지 않은 로깅 구성\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-config-none.png)
+ 구조화된 JSON 로깅이 활성화되었습니다.  
![\[구조화된 로깅이 구성된 로깅 구성\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-config-structured.png)
+ 로깅 역할은 활성화되지만 구조화된 JSON 로깅은 활성화되지 않습니다.  
![\[로깅 역할이 구성된 로깅 구성.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-config-legacy.png)
+ 두 가지 타입의 로깅(로깅 역할 및 구조화된 JSON 로깅)이 모두 활성화됩니다.  
![\[두 가지 로깅 타입(로깅 역할 및 구조화된 JSON 로깅)이 모두 구성된 로깅 구성\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-config-both.png)

# 워크플로에 대한 로깅 관리
<a name="cloudwatch-workflows"></a>

CloudWatch는 워크플로 진행 상황 및 결과에 대한 통합 감사 및 로깅을 제공합니다. 또한는 워크플로에 대한 여러 지표를 AWS Transfer Family 제공합니다. 이전 1분 간 시작, 성공적으로 완료, 및 실패한 워크플로 실행 수에 대한 지표를 볼 수 있습니다. Transfer Family에 대한 모든 CloudWatch 지표는 [Transfer Family 서버에 CloudWatch 지표 사용](metrics.md)에 설명되어 있습니다.

**워크플로에 대한 Amazon CloudWatch Logs 보기**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 Amazon CloudWatch 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **로그**를 선택한 다음, **로그 그룹**을 선택합니다.

1. **로그 그룹** 페이지의 탐색 모음에서 AWS Transfer Family 서버에 적합한 리전을 선택합니다.

1. 서버에 해당하는 로그 그룹을 선택합니다.

   예를 들어 서버 ID가 `s-1234567890abcdef0`인 경우 로그 그룹은 `/aws/transfer/s-1234567890abcdef0`입니다.

1. 서버의 로그 그룹 세부 정보 페이지에는 가장 최근의 로그 스트림이 표시됩니다. 탐색 중인 사용자에 대한 로그 스트림은 두 가지입니다.
   + 각 Secure Shell(SSH) File Transfer 프로토콜(SFTP) 세션별 로그 스트림
   + 서버에서 실행 중인 워크플로의 로그 스트림 워크플로의 로그 스트림 형식은 `username.workflowID.uniqueStreamSuffix`입니다.

   예를 들어 사용자가 `mary-major`이면 다음과 같은 로그 스트림이 있습니다.

   ```
   mary-major-east.1234567890abcdef0
   mary.w-abcdef01234567890.021345abcdef6789
   ```
**참고**  
 이 예에 나열된 16자리 영숫자 식별자는 가상의 식별자입니다. Amazon CloudWatch에 표시되는 값은 다릅니다.

`mary-major-usa-east.1234567890abcdef0`의 **로그 이벤트** 페이지에는 각 사용자 세션의 세부 정보가 표시되고 `mary.w-abcdef01234567890.021345abcdef6789` 로그 스트림에는 워크플로에 대한 세부 정보가 포함됩니다.

 다음은 복사 단계가 포함된 워크플로(`w-abcdef01234567890`)를 기반으로 하는 `mary.w-abcdef01234567890.021345abcdef6789`의 샘플 로그 스트림입니다.

```
{
    "type": "ExecutionStarted",
    "details": {
        "input": {
            "initialFileLocation": {
                "bucket": "amzn-s3-demo-bucket",
                "key": "mary/workflowSteps2.json",
                "versionId": "version-id",
                "etag": "etag-id"
            }
        }
    },
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails": {
        "serverId":"s-server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
},
{
    "type":"StepStarted",
    "details": {
        "input": {
            "fileLocation": {
                "backingStore":"S3",
                "bucket":"amzn-s3-demo-bucket",
                "key":"mary/workflowSteps2.json",
                "versionId":"version-id",
                "etag":"etag-id"
            }
        },
        "stepType":"COPY",
        "stepName":"copyToShared"
    },
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails": {
        "serverId":"s-server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
},
{
    "type":"StepCompleted",
    "details":{
        "output":{},
        "stepType":"COPY",
        "stepName":"copyToShared"
    },
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails":{
        "serverId":"server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
},
{
    "type":"ExecutionCompleted",
    "details": {},
    "workflowId":"w-abcdef01234567890",
    "executionId":"execution-id",
    "transferDetails":{
        "serverId":"s-server-id",
        "username":"mary",
        "sessionId":"session-id"
    }
}
```

# CloudWatch 로깅 역할 구성
<a name="configure-cw-logging-role"></a>

액세스 권한을 설정하려면 리소스 기반 IAM 정책과 해당 액세스 정보를 제공하는 IAM 역할을 만듭니다.

Amazon CloudWatch 로깅을 사용 설정하려면 먼저 CloudWatch 로깅을 사용 설정하는 IAM 정책을 만들어야 합니다. 그런 다음 IAM 역할을 만들고 이 역할에 정책을 첨부합니다. 이렇게 하려면 [서버를 생성](getting-started.md#getting-started-server)하거나 [기존 서버를 편집](edit-server-config.md)해야 합니다. 자세한 설명은 *Amazon CloudWatch 사용자 가이드*의 [Amazon CloudWatch란 무엇인가?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)와 [Amazon CloudWatch Logs란 무엇인가?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)를 참조하세요.

다음 예 IAM 정책을 사용하여 CloudWatch 로깅을 허용하세요.

------
#### [ Use a logging role ]

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:DescribeLogStreams",
                "logs:CreateLogGroup",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/transfer/*"
        }
    ]
}
```

------
#### [ Use structured logging ]

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"                
            ],
            "Resource": "*"
        }
    ]
}
```

위의 예 정책에서, **Resource**의 경우 *region-id* 및 *AWS 계정*를 맞춤 값으로 대체하세요. 예: **"Resource": "arn:aws::logs:us-east-1:111122223333:log-group:/aws/transfer/\$1"**

------

그런 다음 역할을 생성하고 만든 CloudWatch 로그 정책을 연결합니다.

**IAM 역할을 생성하여 정책을 연결하려면**

1. 탐색 창에서 **역할**을 선택한 후 **역할 생성**을 선택합니다.

   **역할 생성** 페이지에서 **AWS 서비스**가 선택되어 있는지 확인합니다.

1. 서비스 목록에서 **전송**을 선택하고, **다음: 권한**을 선택합니다. 이렇게 하면 AWS Transfer Family 와 IAM 역할 간에 신뢰 관계가 설정됩니다. 또한 `aws:SourceAccount` 및 `aws:SourceArn` 조건 키를 추가하여 *혼동되는 부정* 문제로부터 자신을 보호하세요. 자세한 설명은 다음 설명서를 참조하세요:
   + 신뢰 관계를 설정하기 위한 절차 AWS Transfer Family: [신뢰 관계를 구축하기 위해](requirements-roles.md#establish-trust-transfer) 
   + 혼동된 대리인 문제에 대한 설명: [혼동된 대리인 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)

1. **권한 정책 연결** 섹션에서, 방금 생성한 CloudWatch 로그 정책을 찾아 선택한 다음 **다음: 태그**를 선택합니다.

1. (옵션) 태그의 키와 값을 입력하고 **Next: Review(다음: 검토)**를 선택합니다.

1. **검토** 페이지에 새 역할의 명칭과 설명을 입력한 다음 **역할 생성**을 선택합니다.

1. 로그를 보려면 **Server ID(서버 ID)**를 선택하여 서버 구성 페이지를 열고 **로그 보기**를 선택합니다. 로그 스트림을 볼 수 있는 CloudWatch 콘솔로 리디렉션됩니다.

서버의 CloudWatch 페이지에서는 사용자 인증(성공 및 실패), 데이터 업로드(`PUT` 작업), 데이터 다운로드(`GET` 작업) 레코드를 확인할 수 있습니다.

# Transfer Family 로그 스트림 보기
<a name="view-log-entries"></a>

**Transfer Family 서버 로그를 보려면**

1. 서버의 세부 정보 페이지로 이동합니다.

1. **로그 보기**를 선택합니다. 그러면Amazon CloudWatch가 열립니다.

1. 선택한 서버의 로그 그룹이 표시됩니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/log-example-01.png)

1. 로그 스트림을 선택하여 스트림의 세부 정보 및 개별 항목을 표시할 수 있습니다.
   + **오류** 목록이 있는 경우 해당 목록을 선택하여 서버의 최신 오류에 대한 세부 정보를 볼 수 있습니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/log-example-errors.png)
   + 예 로그 스트림을 보려면 다른 항목을 선택하세요.  
![\[\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/log-example-02.png)
   + 서버에 연결된 관리형 워크플로가 있는 경우 워크플로 실행에 대한 로그를 볼 수 있습니다.
**참고**  
워크플로의 로그 스트림 형식은 `username.workflowId.uniqueStreamSuffix`입니다. 예를 들어 **decrypt-user.w-a1111222233334444.aa1111bb2222는** 사용자 **decrypt-user** 및 워크플로 **w-a1111222233334444**의 로그 스트림 명칭일 수 있습니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/log-example-workflow.png)

**참고**  
확장된 로그 항목의 경우 **복사**를 선택하여 항목을 클립보드에 복사할 수 있습니다. CloudWatch 로그에 대한 자세한 설명은 [로그 데이터 보기](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)를 참조하세요.

## Amazon CloudWatch 경보 생성
<a name="monitoring-cloudwatch-examples"></a>

다음 예제에서는 지표 AWS Transfer Family 를 사용하여 Amazon CloudWatch 경보를 생성하는 방법을 보여줍니다`FilesIn`.

------
#### [ CDK ]

```
new cloudwatch.Metric({
  namespace: "AWS/Transfer",
  metricName: "FilesIn",
  dimensionsMap: { ServerId: "s-00000000000000000" },
  statistic: "Average",
  period: cdk.Duration.minutes(1),
}).createAlarm(this, "AWS/Transfer FilesIn", {
  threshold: 1000,
  evaluationPeriods: 10,
  datapointsToAlarm: 5,
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
});
```

------
#### [ CloudFormation ]

```
Type: AWS::CloudWatch::Alarm
Properties:
  Namespace: AWS/Transfer
  MetricName: FilesIn
  Dimensions:
    - Name: ServerId
      Value: s-00000000000000000
  Statistic: Average
  Period: 60
  Threshold: 1000
  EvaluationPeriods: 10
  DatapointsToAlarm: 5
  ComparisonOperator: GreaterThanOrEqualToThreshold
```

------

## Amazon S3 S3 API 작업 로깅
<a name="monitoring-s3-access-logs"></a>

**참고**  
이 섹션은 Transfer Family 웹 앱에는 적용되지 않습니다.

파일 전송 사용자를 대신하여 이루어진 [S3 요청을 식별하기 위해 Amazon S3 액세스 로그를 사용](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-s3-access-logs-to-identify-requests.html)하는 경우, 파일 전송을 처리하는 데 맡겨진 IAM 역할을 표시하는 데 `RoleSessionName`이(가) 사용됩니다. 또한 전송에 사용된 사용자 이름, 세션 ID, 서버 ID와 같은 추가 정보도 표시됩니다. 형식은 `[AWS:Role Unique Identifier]/username.sessionid@server-id`(이)며, 요청자 필드에 포함되어 있습니다. 예를 들어, 다음은 S3 버킷으로 복사된 파일에 대한 S3 액세스 로그의 샘플 요청자 필드 콘텐츠입니다.

`arn:aws:sts::AWS-Account-ID:assumed-role/IamRoleName/username.sessionid@server-id`

위의 요청자 필드에는 `IamRoleName`(이)라고 불리는 IAM 역할이 표시됩니다. IAM 역할 고유 식별자에 대한 자세한 설명은 *AWS Identity and Access Management 사용자 가이드*에서 [고유 식별자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)를 참조하세요.

# 혼동된 대리자 문제를 제한하는 예
<a name="cloudwatch-confused-deputy"></a>

혼동된 대리자 문제는 작업을 수행할 권한이 없는 엔터티가 권한이 더 많은 엔터티에게 작업을 수행하도록 강요할 수 있는 보안 문제입니다. 에서 AWS교차 서비스 가장은 혼동된 대리자 문제를 초래할 수 있습니다. 자세한 내용은 [교차 서비스 혼동된 대리자 방지](confused-deputy.md)를 참조하세요.

**참고**  
다음 예에서는 자신의 정보로 각각의 *사용자 입력 자리 표시자*를 바꿉니다.  
이 예제에서는 서버에 워크플로가 연결되어 있지 않은 경우 워크플로에 대한 ARN 세부 정보를 제거할 수 있습니다.

다음 예제 로깅/호출 정책은 계정의 모든 서버(및 워크플로)가 역할을 수임하도록 허용합니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAllServersWithWorkflowAttached",
            "Effect": "Allow",
            "Principal": {
                "Service": "transfer.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                   "aws:SourceArn": [
                     "arn:aws:transfer:us-west-2:111122223333:server/*",
                     "arn:aws:transfer:us-west-2:111122223333:workflow/*"
                   ]
                }
            }
        }
    ]
}
```

다음 예제 로깅/호출 정책은 특정 서버(및 워크플로)가 역할을 수임하도록 허용합니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowSpecificServerWithWorkflowAttached",
            "Effect": "Allow",
            "Principal": {
                "Service": "transfer.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnEquals": {
                   "aws:SourceArn": [
                       "arn:aws:transfer:us-west-2:111122223333:server/server-id",
                       "arn:aws:transfer:us-west-2:111122223333:workflow/workflow-id"
                   ]
                }
            }
        }
    ]
}
```

# Transfer Family의 CloudWatch 로그 구조
<a name="cw-structure-logs"></a>

이 주제에서는 JSON 구조화 로그 항목과 레거시 로그 항목 모두에 대해 Transfer Family 로그에 채워진 필드를 설명합니다.

**Topics**
+ [Transfer Family에 대한 JSON 구조화 로그](#json-log-entries)
+ [Transfer Family에 대한 레거시 로그](#legacy-log-entries)

## Transfer Family에 대한 JSON 구조화 로그
<a name="json-log-entries"></a>

다음 표에는 Transfer Family SFTP/FTP/FTPS 작업의 로그 항목 필드에 대한 세부 정보가 새 JSON 구조화 로그 형식으로 포함되어 있습니다.


| 필드 | 설명 | 입력 예 | 
| --- |--- |--- |
| activity-type | The action by the user | 사용 가능한 활동 유형은 `AUTH_FAILURE`, , `CONNECTED`, `DISCONNECTED`, `ERROR`, `EXIT_REASON`, `CLOSE`, `CREATE_SYMLINK`, `MKDIR`, `DELETE``OPEN`, , `PARTIAL_CLOSE`, `RENAME`, `RMDIR`, `SETSTAT`입니다`TLS_RESUME_FAILURE`. | 
| bytes-in | Number of bytes uploaded by the user | 29238420042 | 
| bytes-out | Number of bytes downloaded by the user | 23094032490328 | 
| ciphers | Specifies the SSH cipher negotiated for the connection (available ciphers are listed in [암호화 알고리즘](security-policies.md#cryptographic-algorithms)) | aes256-gcm@openssh.com | 
| client | The user's client software | SSH-2.0-OpenSSH\$17.4 | 
| home-dir | The directory that the end user lands on when they connect to the endpoint if their home directory type is PATH: if they have a logical home directory, this value is always / | /user-home-bucket/test | 
| kex | Specifies the negotiated SSH key exchange (KEX) for the connection (available KEX are listed in [암호화 알고리즘](security-policies.md#cryptographic-algorithms)) | diffie-hellman-group14-sha256 | 
| message | Provides more information related to the error | <문자열> | 
| method | The authentication method | publickey | 
| mode | Specifies how a client opens a file | CREATE \$1 TRUNCATE \$1 WRITE | 
| operation | The client operation on a file | OPEN \$1 CLOSE | 
| path | Actual file path affected | /amzn-s3-demo-bucket/test-file-1.pdf  | 
| ssh-public-key | The public key body for the user that is connecting | AAAAC3NzaC1lZDI1NTE5AAAAIA9OY0qV6XYVHaaOiWAcj2spDJVbgjrqDPY4pxd6GnHl | 
| ssh-public-key-fingerprint | 사용자 키를 나열할 때 서비스 관리 사용자를 위한 콘솔에 표시된 퍼블릭 키 지문입니다.  콘솔에서 지문은 패딩 문자(있는 경우): 끝에 0\$13개의 등호(=)로 표시됩니다. 로그 항목에서이 패딩은 출력에서 제거됩니다.  | SHA256:BY3gNMHwTfjd4n2VuT4pTyLOk82zWZj4KEYEu7y4r/0 | 
| ssh-public-key-type | Type of public key: Transfer Family supports RSA-, ECDSA-, and ED25519-formatted keys | ssh-ed25519 | 
| resource-arn | A system-assigned, unique identifier for a specific resource (for example, a server) |  arn:aws:transfer:ap-northeast-1:12346789012:server/s-1234567890akeu2js2  | 
| role | The IAM role of the user |  arn:aws:iam::0293883675:role/testuser-role  | 
| session-id | A system-assigned, unique identifier for a single session |  9ca9a0e1cec6ad9d  | 
| source-ip | Client IP address | 18.323.0.129 | 
| user | The end user's username | myname192 | 
| user-policy | The permissions specified for the end user: this field is populated if the user's policy is a session policy. | The JSON code for the session policy that is being used | 

## Transfer Family에 대한 레거시 로그
<a name="legacy-log-entries"></a>

다음 표에는 다양한 Transfer Family 작업에 대한 로그 항목에 대한 세부 정보가 포함되어 있습니다.

**참고**  
 이러한 항목은 새로운 JSON 구조화 로그 형식이 아닙니다.

다음 표에는 다양한 Transfer Family 작업에 대한 로그 항목에 대한 세부 정보가 새 JSON 구조화된 로그 형식으로 포함되어 있습니다.




| 작업 | Amazon CloudWatch Logs 내의 해당 로그 | 
| --- | --- | 
| 인증 실패 횟수 |  ERRORS AUTH\$1FAILURE Method=publickey User=lhr Message="RSA SHA256:Lfz3R2nmLY4raK\$1b7Rb1rSvUIbAE\$1a\$1Hxg0c7l1JIZ0" SourceIP=3.8.172.211   | 
| 복사/태그 지정/삭제/복호화 워크플로 |  \$1"type":"StepStarted","details":\$1"input":\$1"fileLocation":\$1"backingStore":"EFS","filesystemId":"fs-12345678","path":"/lhr/regex.py"\$1\$1,"stepType":"TAG","stepName":"successful\$1tag\$1step"\$1,"workflowId":"w-1111aaaa2222bbbb3","executionId":"81234abcd-1234-efgh-5678-ijklmnopqr90","transferDetails":\$1"serverId":"s-1234abcd5678efghi","username":"lhr","sessionId":"1234567890abcdef0"\$1\$1  | 
| 맞춤 단계 워크플로 |  \$1"type":"CustomStepInvoked","details":\$1"output":\$1"token":"MzM4Mjg5YWUtYTEzMy00YjIzLWI3OGMtYzU4OGI2ZjQyMzE5"\$1,"stepType":"CUSTOM","stepName":"efs-s3\$1copy\$12"\$1,"workflowId":"w-9283e49d33297c3f7","executionId":"1234abcd-1234-efgh-5678-ijklmnopqr90","transferDetails":\$1"serverId":"s-zzzz1111aaaa22223","username":"lhr","sessionId":"1234567890abcdef0"\$1\$1  | 
| 삭제 |  lhr.33a8fb495ffb383b DELETE Path=/bucket/user/123.jpg  | 
| 다운로드 |  lhr.33a8fb495ffb383b OPEN Path=/bucket/user/123.jpg Mode=READ llhr.33a8fb495ffb383b CLOSE Path=/bucket/user/123.jpg BytesOut=3618546  | 
| 로그인/로그아웃 |  user.914984e553bcddb6 CONNECTED SourceIP=1.22.111.222 User=lhr HomeDir=LOGICAL Client=SSH-2.0-OpenSSH\$17.4 Role=arn:aws::iam::123456789012:role/sftp-s3-access user.914984e553bcddb6 DISCONNECTED  | 
| 명칭 바꾸기 |  lhr.33a8fb495ffb383b RENAME Path=/bucket/user/lambo.png NewPath=/bucket/user/ferrari.png   | 
| 샘플 워크플로 오류 로그 |  \$1"type":"StepErrored","details":\$1"errorType":"BAD\$1REQUEST","errorMessage":"Cannot tag Efs file","stepType":"TAG","stepName":"successful\$1tag\$1step"\$1,"workflowId":"w-1234abcd5678efghi","executionId":"81234abcd-1234-efgh-5678-ijklmnopqr90","transferDetails":\$1"serverId":"s-1234abcd5678efghi","username":"lhr","sessionId":"1234567890abcdef0"\$1\$1   | 
| Symlinks |  lhr.eb49cf7b8651e6d5 CREATE\$1SYMLINK LinkPath=/fs-12345678/lhr/pqr.jpg TargetPath=abc.jpg   | 
| 업로드 |  lhr.33a8fb495ffb383b OPEN Path=/bucket/user/123.jpg Mode=CREATE\$1TRUNCATE\$1WRITE lhr.33a8fb495ffb383b CLOSE Path=/bucket/user/123.jpg BytesIn=3618546  | 
| 워크플로 |  \$1"type":"ExecutionStarted","details":\$1"input":\$1"initialFileLocation":\$1"backingStore":"EFS","filesystemId":"fs-12345678","path":"/lhr/regex.py"\$1\$1\$1,"workflowId":"w-1111aaaa2222bbbb3","executionId":"1234abcd-1234-efgh-5678-ijklmnopqr90","transferDetails":\$1"serverId":"s-zzzz1111aaaa22223","username":"lhr","sessionId":"1234567890abcdef0"\$1\$1 \$1"type":"StepStarted","details":\$1"input":\$1"fileLocation":\$1"backingStore":"EFS","filesystemId":"fs-12345678","path":"/lhr/regex.py"\$1\$1,"stepType":"CUSTOM","stepName":"efs-s3\$1copy\$12"\$1,"workflowId":"w-9283e49d33297c3f7","executionId":"1234abcd-1234-efgh-5678-ijklmnopqr90","transferDetails":\$1"serverId":"s-18ca49dce5d842e0b","username":"lhr","sessionId":"1234567890abcdef0"\$1\$1  | 

# CloudWatch 로그 항목 예
<a name="cw-example-logs"></a>

이 주제에서는 예제 로그 항목을 제공합니다.

**Topics**
+ [전송 세션 로그 항목의 예](#session-log-examples)
+ [SFTP 커넥터의 로그 항목 예](#example-sftp-connector-logs)
+ [VPC Lattice 커넥터의 로그 항목 예제](#example-vpc-lattice-connector-logs)
+ [키 교환 알고리즘 실패에 대한 로그 항목 예제](#example-kex-logs)

## 전송 세션 로그 항목의 예
<a name="session-log-examples"></a>

이 예제에서 SFTP 사용자는 Transfer Family 서버에 연결하고 파일을 업로드한 다음 세션 연결을 해제합니다.

다음 로그 항목은 Transfer Family 서버에 연결하는 SFTP 사용자를 반영합니다.

```
{
   "role": "arn:aws:iam::500655546075:role/transfer-s3",
   "activity-type": "CONNECTED",
   "ciphers": "chacha20-poly1305@openssh.com,chacha20-poly1305@openssh.com",
   "client": "SSH-2.0-OpenSSH_7.4",
   "source-ip": "52.94.133.133",
   "resource-arn": "arn:aws:transfer:us-east-1:500655546075:server/s-3fe215d89f074ed2a",
   "home-dir": "/test/log-me",
   "ssh-public-key": "AAAAC3NzaC1lZDI1NTE5AAAAIA9OY0qV6XYVHaaOiWAcj2spDJVbgjrqDPY4pxd6GnHl",
   "ssh-public-key-fingerprint": "SHA256:BY3gNMHwTfjd4n2VuT4pTyLOk82zWZj4KEYEu7y4r/0",
   "ssh-public-key-type": "ssh-ed25519",
   "user": "log-me",
   "kex": "ecdh-sha2-nistp256",
   "session-id": "9ca9a0e1cec6ad9d"
}
```

다음 로그 항목은 Amazon S3 버킷에 파일을 업로드하는 SFTP 사용자를 반영합니다.

```
{
   "mode": "CREATE|TRUNCATE|WRITE",
   "path": "/test/log-me/config-file",
   "activity-type": "OPEN",
   "resource-arn": "arn:aws:transfer:us-east-1:500655546075:server/s-3fe215d89f074ed2a",
   "session-id": "9ca9a0e1cec6ad9d"
}
```

다음 로그 항목은 SFTP 세션에서 연결 해제된 SFTP 사용자를 반영합니다. 먼저 클라이언트가 버킷에 대한 연결을 닫은 다음 클라이언트가 SFTP 세션의 연결을 끊습니다.

```
{
   "path": "/test/log-me/config-file",
   "activity-type": "CLOSE",
   "resource-arn": "arn:aws:transfer:us-east-1:500655546075:server/s-3fe215d89f074ed2a",
   "bytes-in": "121",
   "session-id": "9ca9a0e1cec6ad9d"
}

{
   "activity-type": "DISCONNECTED",
   "resource-arn": "arn:aws:transfer:us-east-1:500655546075:server/s-3fe215d89f074ed2a",
   "session-id": "9ca9a0e1cec6ad9d"
}
```

**참고**  
사용 가능한 활동 유형은 `AUTH_FAILURE`, , `CONNECTED`, `DISCONNECTED`, `ERROR`, , `EXIT_REASON`, `CLOSE`, `DELETE`, `CREATE_SYMLINK``MKDIR`, `OPEN`, `PARTIAL_CLOSE`, `RENAME`, `RMDIR`, `SETSTAT`, 입니다`TLS_RESUME_FAILURE`.

## SFTP 커넥터의 로그 항목 예
<a name="example-sftp-connector-logs"></a>

이 섹션에는 전송 성공 및 실패 모두에 대한 예제 로그가 포함되어 있습니다. 로그는 라는 로그 그룹에 생성됩니다. `/aws/transfer/connector-id`여기서 *connector-id*는 SFTP 커넥터의 식별자입니다. `StartFileTransfer` 또는 `StartDirectoryListing` 명령을 실행하면 SFTP 커넥터에 대한 로그 항목이 생성됩니다.

이 로그 항목은 성공적으로 완료된 전송을 위한 것입니다.

```
{
    "operation": "RETRIEVE",
    "timestamp": "2023-10-25T16:33:27.373720Z",
    "connector-id": "connector-id",
    "transfer-id": "transfer-id",
    "file-transfer-id": "transfer-id/file-transfer-id",
    "url": "sftp://192.0.2.0",
    "file-path": "/remotebucket/remotefilepath",
    "status-code": "COMPLETED",
    "start-time": "2023-10-25T16:33:26.945481Z",
    "end-time": "2023-10-25T16:33:27.159823Z",
    "account-id": "480351544584",
    "connector-arn": "arn:aws:transfer:us-east-1:account-id:connector/connector-id",
    "local-directory-path": "/connectors-localbucket",
    "bytes": 514,
    "egress-type": "SERVICE_MANAGED"
}
```

이 로그 항목은 시간이 초과되어 성공적으로 완료되지 않은 전송을 위한 것입니다.

```
{
    "operation": "RETRIEVE",
    "timestamp": "2023-10-25T22:33:47.625703Z",
    "connector-id": "connector-id",
    "transfer-id": "transfer-id",
    "file-transfer-id": "transfer-id/file-transfer-id",
    "url": "sftp://192.0.2.0",
    "file-path": "/remotebucket/remotefilepath",
    "status-code": "FAILED",
    "failure-code": "TIMEOUT_ERROR",
    "failure-message": "Transfer request timeout.",
    "account-id": "480351544584",
    "connector-arn": "arn:aws:transfer:us-east-1:account-id:connector/connector-id",
    "local-directory-path": "/connectors-localbucket",
    "egress-type": "SERVICE_MANAGED"
}
```

이 로그 항목은 성공하는 SEND 작업을 위한 것입니다.

```
{
    "operation": "SEND",
    "timestamp": "2024-04-24T18:16:12.513207284Z",
    "connector-id": "connector-id",
    "transfer-id": "transfer-id",
    "file-transfer-id": "transfer-id/file-transfer-id",
    "url": "sftp://server-id.server.transfer.us-east-1.amazonaws.com",
    "file-path": "/amzn-s3-demo-bucket/my-test-folder/connector-metrics-us-east-1-2024-01-02.csv",
    "status-code": "COMPLETED",
    "start-time": "2024-04-24T18:16:12.295235884Z",
    "end-time": "2024-04-24T18:16:12.461840732Z",
    "account-id": "255443218509",
    "connector-arn": "arn:aws:transfer:us-east-1:account-id:connector/connector-id",
    "bytes": 275,
    "egress-type": "SERVICE_MANAGED"
}
```

이전 로그 예제의 일부 키 필드에 대한 설명입니다.
+ `timestamp`는 로그가 CloudWatch에 추가되는 시기를 나타냅니다. `start-time` 및는 커넥터가 실제로 전송을 시작하고 완료하는 시기를 `end-time` 나타냅니다.
+ `transfer-id`는 각 `start-file-transfer` 요청에 할당된 고유 식별자입니다. 사용자가 단일 `start-file-transfer` API 작업에서 여러 파일 경로를 전달하는 경우 모든 파일은 동일한를 공유합니다`transfer-id`.
+ `file-transfer-id`는 전송된 각 파일에 대해 생성된 고유한 값입니다. 의 초기 부분은와 `file-transfer-id` 동일합니다`transfer-id`.

## VPC Lattice 커넥터의 로그 항목 예제
<a name="example-vpc-lattice-connector-logs"></a>

이 섹션에는 VPC Lattice 커넥터에 대한 예제 로그가 포함되어 있습니다. VPC Lattice 커넥터의 경우 로그에는 커넥터 구성 및 네트워크 설정에 대한 정보를 제공하는 추가 필드가 포함됩니다.

이 로그 항목은 성공적으로 완료된 VPC Lattice 커넥터 SEND 작업을 위한 것입니다.

```
{
  "operation": "SEND",
  "timestamp": "2025-09-05T14:20:19.577192454Z",
  "connector-id": "connector-id",
  "transfer-id": "transfer-id",
  "file-transfer-id": "transfer-id/file-transfer-id",
  "file-path": ""/amzn-s3-demo-bucket/my-test-folder/connector-vpc-lattice-us-east-1-2025-03-22.csv"",
  "status-code": "COMPLETED",
  "start-time": "2025-09-05T14:20:19.434072509Z",
  "end-time": "2025-09-05T14:20:19.481453346Z",
  "account-id": "account-id",
  "connector-arn": "arn:aws:transfer:us-east-1:account-id:connector/connector-id",
  "remote-directory-path": "/test-bucket/test-folder/",
  "bytes": 262,
  "egress-type": "VPC_LATTICE",
  "vpc-lattice-resource-configuration-arn": "arn:aws:vpc-lattice:us-east-1:account-id:resourceconfiguration/resource-configuration-arn-id,
  "vpc-lattice-port-number": 22
}
```

VPC Lattice 커넥터 로그에는 다음과 같은 추가 필드가 포함됩니다.
+ `egress-type` - 커넥터의 송신 구성 유형
+ `vpc-lattice-resource-configuration-arn` - 대상 SFTP 서버 위치를 정의하는 VPC Lattice 리소스 구성의 ARN
+ `vpc-lattice-port-number` - VPC Lattice를 통해 SFTP 서버에 연결하기 위한 포트 번호

## 키 교환 알고리즘 실패에 대한 로그 항목 예제
<a name="example-kex-logs"></a>

이 섹션에는 키 교환 알고리즘(KEX)이 실패한 예제 로그가 포함되어 있습니다. 다음은 구조화된 로그에 대한 **ERRORS** 로그 스트림의 예입니다.

이 로그 항목은 호스트 키 유형 오류가 있는 예제입니다.

```
{
    "activity-type": "KEX_FAILURE",
    "source-ip": "999.999.999.999",
    "resource-arn": "arn:aws:transfer:us-east-1:999999999999:server/s-999999999999999999",
    "message": "no matching host key type found",
    "kex": "ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519,ssh-rsa,ssh-dss"
}
```

이 로그 항목은 KEX 불일치가 있는 예제입니다.

```
{
    "activity-type": "KEX_FAILURE",
    "source-ip": "999.999.999.999",
    "resource-arn": "arn:aws:transfer:us-east-1:999999999999:server/s-999999999999999999",
    "message": "no matching key exchange method found",
    "kex": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group14-sha256"
}
```

# Transfer Family 서버에 CloudWatch 지표 사용
<a name="metrics"></a>

**참고**  
 Transfer Family 콘솔 자체에서도 Transfer Family에 대한 지표를 가져올 수 있습니다. 자세한 내용은 [콘솔 내 사용량 모니터링](monitor-usage-transfer-console.md)를 참조하세요.

CloudWatch 지표를 사용하여 서버에 대한 정보를 얻을 수 있습니다. *지표*는 CloudWatch에 게시된 시간 순서별 데이터 요소 집합을 나타냅니다. 지표를 사용할 때는 Transfer Family 네임스페이스, 지표 명칭 및 [차원](#cw-dimensions)을 지정해야 합니다. 지표 수학에 대한 자세한 정보는 *Amazon CloudWatch 사용자 가이드*에서 [지표](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Metric)를 참조하세요.

 다음 표에서는 Transfer Family에 대한 CloudWatch 측정치를 설명합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/metrics.html)

## Transfer Family 크기
<a name="cw-dimensions"></a>

*차원*은 지표의 보안 인증에 속하는 명칭/값 쌍입니다. 차원에 대한 자세한 설명은 *CloudWatch Developer Guide*의 [차원](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)을 참조하세요.

다음 표에서는 Transfer Family의 CloudWatch 차원을 설명합니다.


| 차원 | 설명 | 
| --- | --- | 
| `ServerId` | 사용자의 고유 ID입니다. | 
| `ConnectorId` | 커넥터의 고유 ID입니다. AS2, `OutboundMessage` 및에 사용 `OutboundFailedMessage` | 

## AWS User Notifications 와 함께 사용 AWS Transfer Family
<a name="using-user-notifications"></a>

 AWS Transfer Family 이벤트에 대한 알림을 받으려면 [AWS User Notifications](https://docs.aws.amazon.com/notifications/latest/userguide/what-is.html)를 사용하여 다양한 전송 채널을 설정할 수 있습니다. 이벤트가 지정한 규칙과 일치하면 알림을 받습니다.

이메일, [채팅 애플리케이션의 Amazon Q Developer](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html) 채팅 알림 또는 [AWS Console Mobile Application](https://docs.aws.amazon.com/consolemobileapp/latest/userguide/what-is-consolemobileapp.html) 푸시 알림을 비롯한 여러 채널을 통해 이벤트에 대한 알림을 받을 수 있습니다. [콘솔 알림 센터에서 알림을 볼 수도 있습니다](https://console.aws.amazon.com/notifications/). User Notifications 는 집계를 지원하므로 특정 이벤트 중에 수신하는 알림 수를 줄일 수 있습니다.

자세한 내용은 [AWS Transfer Family 관리형 워크플로를 사용하여 파일 전송 알림 사용자 지정](https://aws.amazon.com/blogs/storage/customize-file-delivery-notifications-using-aws-transfer-family-managed-workflows/) 블로그 게시물과 *AWS User Notifications 사용 설명서*의 [What is AWS User Notifications?](https://docs.aws.amazon.com/notifications/latest/userguide/what-is.html)를 참조하세요.

# 쿼리를 사용하여 로그 항목 필터링
<a name="cw-queries"></a>

CloudWatch 쿼리를 사용하여 Transfer Family에 대한 로그 항목을 필터링하고 식별할 수 있습니다. 이 단원에는 몇 가지 예제가 포함되어 있습니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) CloudWatch 콘솔을 엽니다.

1. 쿼리 또는 규칙을 생성할 수 있습니다.
   + **Logs Insights** 쿼리를 생성하려면 왼쪽 탐색 패널에서 **Logs Insights**를 선택한 다음 쿼리에 대한 세부 정보를 입력합니다.
   + **Contributor Insights** 규칙을 생성하려면 왼쪽 탐색 패널에서 인사이트 > Contributor Insights를 선택한 다음 규칙의 세부 정보를 입력합니다.

1. 생성한 쿼리 또는 규칙을 실행합니다.

**상위 인증 실패 기여자 보기**

구조화된 로그에서 인증 실패 로그 항목은 다음과 비슷합니다.

```
{
  "method":"password",
  "activity-type":"AUTH_FAILURE",
  "source-ip":"999.999.999.999",
  "resource-arn":"arn:aws:transfer:us-east-1:999999999999:server/s-0123456789abcdef",
  "message":"Invalid user name or password",
  "user":"exampleUser"
}
```

다음 쿼리를 실행하여 인증 실패에 대한 상위 기여자를 확인합니다.

```
filter @logStream = 'ERRORS'
| filter `activity-type` = 'AUTH_FAILURE'
| stats count() as AuthFailures by user, method
| sort by AuthFailures desc
| limit 10
```

**CloudWatch Logs Insights**를 사용하는 대신 **CloudWatch Contributors Insights** 규칙을 생성하여 인증 실패를 볼 수 있습니다. 다음과 유사한 규칙을 생성합니다.

```
{
    "AggregateOn": "Count",
    "Contribution": {
        "Filters": [
            {
                "Match": "$.activity-type",
                "In": [
                    "AUTH_FAILURE"
                ]
            }
        ],
        "Keys": [
            "$.user"
        ]
    },
    "LogFormat": "JSON",
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupARNs": [
        "arn:aws:logs:us-east-1:999999999999:log-group:/customer/structured_logs"
    ]
}
```

**파일이 열린 로그 항목 보기**

구조화된 로그에서 파일 읽기 로그 항목은 다음과 비슷합니다.

```
{
  "mode":"READ",
  "path":"/fs-0df669c89d9bf7f45/avtester/example",
  "activity-type":"OPEN",
  "resource-arn":"arn:aws:transfer:us-east-1:999999999999:server/s-0123456789abcdef",
  "session-id":"0049cd844c7536c06a89"
}
```

다음 쿼리를 실행하여 파일이 열렸음을 나타내는 로그 항목을 봅니다.

```
filter `activity-type` = 'OPEN'
| display @timestamp, @logStream, `session-id`, mode, path
```