

# Amazon EC2 인스턴스의 NitroTPM
<a name="nitrotpm"></a>

NitroTPM(Nitro Trusted Platform Module)은 [AWS Nitro System](https://aws.amazon.com//ec2/nitro/)에서 제공하는 가상 디바이스로서 [TPM 2.0 사양](https://trustedcomputinggroup.org/resource/trusted-platform-module-2-0-a-brief-introduction/)을 준수합니다. 인스턴스를 인증하는 데 사용되는 아티팩트(예: 암호, 인증서 또는 암호화 키)를 안전하게 저장합니다. NitroTPM은 키를 생성하여 암호화 기능(예: 해시, 서명, 암호화 및 암호 해독)에 사용할 수 있습니다.

NitroTPM은 부트로더와 운영 체제가 모든 부팅 바이너리의 암호화 해시를 생성하여 NitroTPM 내부 플랫폼 구성 레지스터(PCR)의 이전 값과 결합하는 프로세스인 측정된 부팅**을 제공합니다. 측정된 부팅을 사용하면 NitroTPM에서 서명된 PCR 값을 가져와서 이를 사용하여 원격 엔터티에 인스턴스 부팅 소프트웨어의 무결성을 입증할 수 있습니다. 이를 원격 증명**이라고 합니다.

NitroTPM을 사용하면 키 및 암호에 특정 PCR 값으로 태그를 지정할 수 있으므로 PCR 값 즉, 인스턴스 무결성이 변경되면 절대 액세스할 수 없습니다. 이러한 특수한 형태의 조건부 액세스 권한을 밀봉 및 밀봉 해제**라고 합니다. [BitLocker](https://learn.microsoft.com/en-us/windows/security/operating-system-security/data-protection/bitlocker/)와 같은 운영 체제 기술은 NitroTPM을 사용하여 드라이브 암호 해독 키를 밀봉합니다. 따라서 운영 체제가 올바르게 부팅되어 정상 작동이 확인된 상태일 경우에만 드라이브의 암호를 해독할 수 있습니다.

NitroTPM을 사용하려면 NitroTPM 지원을 위해 구성된 [Amazon Machine Image](AMIs.md)(AMI)를 선택한 다음 AMI를 사용하여 [Nitro 기반 인스턴스](instance-types.md#instance-hypervisor-type)를 시작해야 합니다. Amazon의 사전 빌드된 AMI 중 하나를 선택하거나 직접 생성할 수 있습니다.

**가격 책정**  
NitroTPM 사용에 대한 추가 비용은 없습니다. 사용하는 기본 리소스에 대해서만 비용을 지불합니다.

**Topics**
+ [요구 사항](enable-nitrotpm-prerequisites.md)
+ [NitroTPM용 Linux AMI 활성화](enable-nitrotpm-support-on-ami.md)
+ [AMI가 NitroTPM에 대해 활성화되어 있는지 확인](verify-nitrotpm-support-on-ami.md)
+ [NitroTPM 활성화 또는 중지](nitrotpm-instance.md)
+ [인스턴스가 NitroTPM에 대해 활성화되어 있는지 확인](verify-nitrotpm-support-on-instance.md)
+ [퍼블릭 인증 키 검색](retrieve-ekpub.md)

# Amazon EC2 인스턴스에서 NitroTPM을 사용하기 위한 요구 사항
<a name="enable-nitrotpm-prerequisites"></a>

NitroTPM이 활성화된 인스턴스를 시작하려면 다음 요구 사항이 충족되어야 합니다.

**Topics**
+ [AMI](#nitrotpm-ami)
+ [인스턴스 유형](#nitrotpm-instancetypes)
+ [고려 사항](#nitrotpm-considerations)

## AMI
<a name="nitrotpm-ami"></a>

AMI에서 NitroTPM이 활성화되어 있어야 합니다.

**Linux AMI**  
사전 구성된 AMI는 없습니다. 자체 AMI를 구성해야 합니다. 자세한 내용은 [NitroTPM용 Linux AMI 활성화](enable-nitrotpm-support-on-ami.md) 섹션을 참조하세요.

**Windows AMI**  
Microsoft 키를 사용하여 NitroTPM과 UEFI 보안 부팅을 위해 사전 구성된 AWS Windows AMI를 찾으려면 *AWS Windows AMIs Reference*의 [Find Windows Server AMIs configured with NitroTPM and UEFI Secure Boot](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ami-windows-tpm.html#ami-windows-tpm-find)를 참조하세요.

**참고**  
**운영 체제** - AMI에는 TPM 2.0 CRB(Command Response Buffer) 드라이버가 있는 운영 체제가 포함되어야 합니다. 대부분의 최신 운영 체제에는 TPM 2.0 CRB 드라이버가 포함되어 있습니다.  
**UEFI 부팅 모드** - AMI는 UEFI 부팅 모드에 맞게 구성되어야 합니다. 자세한 내용은 [Amazon EC2 인스턴스의 UEFI 보안 부팅](uefi-secure-boot.md) 섹션을 참조하세요.

## 인스턴스 유형
<a name="nitrotpm-instancetypes"></a>

다음 가상화 인스턴스 유형 중 하나를 사용해야 합니다.
+ **범용**: M5, M5a, M5ad, M5d, M5dn, M5n, M5zn, M6a, M6g, M6gd, M6i, M6id, M6idn, M6in, M7a, M7g, M7gd, M7i, M7i-flex, M8a, M8azn, M8g, M8gb, M8gd, M8gn, M8i, M8id, M8i-flex, T3, T3a, T4g
+ **컴퓨팅 최적화**: C5, C5a, C5ad, C5d, C5n, C6a, C6g, C6gd, C6gn, C6i, C6id, C6in, C7a, C7g, C7gd, C7gn, C7i, C7i-flex, C8a, C8g, C8gb, C8gd, C8gn, C8i, C8id, C8i-flex
+ **메모리 최적화**: R5, R5a, R5ad, R5b, R5d, R5dn, R5n, R6a, R6g, R6gd, R6i, R6id, R6idn, R6in, R7a, R7g, R7gd, R7i, R7iz, R8a, R8g, R8gb, R8gd, R8gn, R8i, R8id, R8i-flex, U7i-6tb, U7i-8tb, U7i-12tb, U7in-16tb, U7in-24tb, U7in-32tb, X2idn, X2iedn, X2iezn, X8g, X8aedz, X8i, z1d
+ **스토리지 최적화**: D3, D3en, I3en, I4i, I7i, I7ie, I8g, I8ge, Im4gn
+ **가속 컴퓨팅**: F2, G4dn, G5, G6, G6e, G6f, Gr6, Gr6f, G7e, Inf1, Inf2, P5, P5e, P5en, P6-B200, P6-B300, Trn2, Trn2u
+ **고성능 컴퓨팅: **Hpc6a, Hpc6id, Hpc8a

## 고려 사항
<a name="nitrotpm-considerations"></a>

NitroTPM 사용 시 다음 사항을 고려하세요.
+ NitroTPM이 활성화된 AMI를 사용하여 인스턴스를 시작한 후 인스턴스 유형을 변경하려면 선택한 새 인스턴스 유형 역시 NitroTPM을 지원해야 합니다.
+ NitroTPM 기반 키로 암호화된 BitLocker 볼륨은 원본 인스턴스에서만 사용할 수 있습니다.
+ NitroTPM 상태는 Amazon EC2 콘솔에 표시되지 않습니다.
+ NitroTPM 상태는 [Amazon EBS 스냅샷](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-snapshots.html)에 포함되지 않습니다.
+ NitroTPM 상태는 [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/) 이미지에 포함되지 않습니다.
+ NitroTPM은 AWS Outposts, 로컬 영역 또는 Wavelength 영역에서 지원되지 않습니다.

# NitroTPM용 Linux AMI 활성화
<a name="enable-nitrotpm-support-on-ami"></a>

인스턴스에 대해 NitroTPM을 활성화하려면 NitroTPM이 활성화된 AMI를 사용하여 인스턴스를 시작해야 합니다. 등록할 때 NitroTPM 지원 Linux AMI를 구성해야 합니다. NitroTPM 지원은 나중에 구성할 수 없습니다.

NitroTPM 지원을 위해 사전 구성된 Windows AMI 목록은 [Amazon EC2 인스턴스에서 NitroTPM을 사용하기 위한 요구 사항](enable-nitrotpm-prerequisites.md) 섹션을 참조하세요.

[RegisterImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RegisterImage.html) API를 사용하여 NitroTPM이 구성된 AMI를 생성해야 합니다. Amazon EC2 콘솔 또는 VM Import/Export를 사용할 수는 없습니다.

**NitroTPM용 Linux AMI 활성화**

1. 필요한 Linux AMI를 사용하여 임시 인스턴스를 시작합니다. 콘솔에 있는 인스턴스의 **스토리지** 탭에서 인스턴스의 루트 볼륨 ID를 찾을 수 있습니다.

1. 인스턴스가 `running` 상태에 도달하면 인스턴스의 루트 볼륨 스냅샷을 생성합니다. 자세한 내용은 [EBS 볼륨의 스냅샷 생성](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-create-snapshot.html)을 참조하세요.

1. 생성한 스냅샷을 AMI로 등록합니다. 블록 디바이스 매핑에서 루트 볼륨에 대해 생성한 스냅샷을 지정합니다.

   다음은 예제 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 명령입니다. `--tpm-support`에 `v2.0`을 지정합니다. `--boot-mode`에 `uefi`을 지정합니다.

   ```
   aws ec2 register-image \
       --name my-image \
       --boot-mode uefi \
       --architecture x86_64 \
       --root-device-name /dev/xvda \
       --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0abcdef1234567890} \
       --tpm-support v2.0
   ```

   다음은 [Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet의 예입니다.

   ```
   $block = @{SnapshotId=snap-0abcdef1234567890}
   Register-EC2Image `
       -Name my-image `
       -Architecture "x86_64" `
       -RootDeviceName /dev/xvda `
       -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
       -BootMode Uefi `
       -TpmSupport V20
   ```

1. 1단계에서 시작한 임시 인스턴스를 종료합니다.

# AMI가 NitroTPM에 대해 활성화되어 있는지 확인
<a name="verify-nitrotpm-support-on-ami"></a>

인스턴스에 대해 NitroTPM을 활성화하려면 NitroTPM이 활성화된 AMI를 사용하여 인스턴스를 시작해야 합니다. 이미지를 설명하여 NitroTPM이 활성화되어 있는지 확인할 수 있습니다. AMI 소유자인 경우 `tpmSupport` 이미지 속성을 설명할 수 있습니다.

Amazon EC2 콘솔에는 `TpmSupport`가 표시되지 않습니다.

------
#### [ AWS CLI ]

**NitroTPM이 활성화되어 있는지 확인하려면**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다.

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[*].TpmSupport
```

AMI에 대해 NitroTPM이 활성화된 출력이 다음과 같습니다. TPM이 활성화되지 않은 경우 출력이 비어 있습니다.

```
[
    "v2.0"
]
```

또는 AMI 소유자인 경우 [describe-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) 명령을 `tpmSupport` 속성과 함께 사용합니다.

```
aws ec2 describe-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute tpmSupport
```

 다음은 예제 출력입니다.

```
{
    "ImageId": "ami-0abcdef1234567890",
    "TpmSupport": {
        "Value": "v2.0"
    }
}
```

**NitroTPM이 활성화되어 있는 AMI를 찾으려면**  
다음 예제는 NitroTPM이 활성화된 상태로 소유한 AMI의 ID를 나열합니다.

```
aws ec2 describe-images \
    --owners self \
    --filters Name=tpm-support,Values=v2.0 \
    --query Images[].ImageId
```

------
#### [ PowerShell ]

**NitroTPM이 활성화되어 있는지 확인하려면**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다.

```
Get-EC2Image `
    -ImageId ami-0abcdef1234567890 | Select TpmSupport
```

AMI에 대해 NitroTPM이 활성화된 출력이 다음과 같습니다. TPM이 활성화되지 않은 경우 출력이 비어 있습니다.

```
TpmSupport
----------
v2.0
```

또는 AMI 소유자인 경우 [Get-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) cmdlet을 `tpmSupport` 속성과 함께 사용합니다.

```
Get-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute tpmSupport
```

**NitroTPM이 활성화되어 있는 AMI를 찾으려면**  
다음 예제는 NitroTPM이 활성화된 상태로 소유한 AMI의 ID를 나열합니다.

```
Get-EC2Image `
    -Owner self `
    -Filter @{Name="tpm-support; Values="v2.0"} | Select ImageId
```

------

# Amazon EC2 인스턴스에서 NitroTPM 활성화 또는 중지
<a name="nitrotpm-instance"></a>

시작 시에만 NitroTPM에 대해 Amazon EC2 인스턴스를 활성화할 수 있습니다. NitroTPM에 대해 인스턴스를 활성화하면 비활성화할 수 없습니다. 더 이상 NitroTPM을 사용할 필요가 없는 경우 사용을 중지하도록 운영 체제를 구성해야 합니다.

**Topics**
+ [NitroTPM이 사용 설정된 상태로 인스턴스 시작](#launch-instance-with-nitrotpm)
+ [인스턴스에서 NitroTPM 사용 중지](#disable-nitrotpm-support-on-instance)

## NitroTPM이 사용 설정된 상태로 인스턴스 시작
<a name="launch-instance-with-nitrotpm"></a>

[필수 구성 요소](enable-nitrotpm-prerequisites.md)를 사용하여 인스턴스를 시작하는 경우 NitroTPM이 인스턴스에서 자동으로 활성화됩니다. 시작 시에만 인스턴스에서 NitroTPM을 활성화할 수 있습니다. 인스턴스 시작에 대한 자세한 정보는 [Amazon EC2 인스턴스 시작하기](LaunchingAndUsingInstances.md) 섹션을 참조하세요.

## 인스턴스에서 NitroTPM 사용 중지
<a name="disable-nitrotpm-support-on-instance"></a>

NitroTPM이 활성화된 상태로 인스턴스를 시작하면 인스턴스에 대해 NitroTPM을 사용 중지할 수 없습니다. 그러나 다음 도구를 통해 인스턴스에서 TPM 2.0 디바이스 드라이버를 비활성화하여, NitroTPM 사용을 중지하도록 운영 체제를 구성할 수 있습니다.
+ **Linux 인스턴스**의 경우 tpm-tools를 사용합니다.
+ **Windows 인스턴스**의 경우 TPM 관리 콘솔(tpm.msc)을 사용합니다.

디바이스 드라이버 사용 중지에 대한 자세한 정보는 운영 체제 설명서를 참조하세요.

# Amazon EC2 인스턴스가 NitroTPM에 대해 활성화되어 있는지 확인
<a name="verify-nitrotpm-support-on-instance"></a>

Amazon EC2 인스턴스에 NitroTPM이 활성화되어 있는지 확인할 수 있습니다. 인스턴스에 NitroTPM 지원이 활성화된 경우 명령이 `"v2.0"`을 반환합니다. 그렇게 하지 않으면 출력에 `TpmSupport` 필드가 없습니다.

Amazon EC2 콘솔에는 `TpmSupport` 필드가 표시되지 않습니다.

------
#### [ AWS CLI ]

**인스턴스가 NitroTPM에 대해 활성화되어 있는지 확인하려면 다음을 수행하세요.**  
아래와 같이 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 명령을 사용합니다.

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query Reservations[].Instances[].TpmSupport
```

------
#### [ PowerShell ]

**인스턴스가 NitroTPM에 대해 활성화되어 있는지 확인하려면 다음을 수행하세요.**  
[Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet을 사용합니다.

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances.TpmSupport
```

------

## Windows 인스턴스에서 NitroTPM 액세스 권한 확인
<a name="verify-nitrotpm-support-windows-instance"></a>

**(Windows 인스턴스만 해당) Windows에서 NitroTPM에 액세스할 수 있는지 확인하려면 다음을 수행하세요.**

1. [EC2 Windows 인스턴스에 연결합니다.](connecting_to_windows_instance.md)

1. 인스턴스에서 tpm.msc 프로그램을 실행합니다.

   **로컬 컴퓨터의 TPM 관리** 창이 열립니다.

1. **TPM 제조업체 정보(TPM Manufacturer Information)** 필드를 확인합니다. 인스턴스의 제조업체 이름과 NitroTPM 버전이 포함되어 있습니다.  
![\[로컬 컴퓨터의 TPM 관리 창 및 인스턴스의 NitroTPM 버전을 표시하는 TPM 제조업체 정보(TPM Manufacturer Information) 필드입니다.\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/tpm-1.png)

# EC2 인스턴스의 퍼블릭 인증 키 검색
<a name="retrieve-ekpub"></a>

언제든지 인스턴스의 퍼블릭 인증 키를 안전하게 검색할 수 있습니다.

------
#### [ AWS CLI ]

**인스턴스의 퍼블릭 인증 키를 검색하는 방법**  
[get-instance-tpm-ek-pub](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-tpm-ek-pub.html) 명령을 사용합니다.

**예제 1.**  
다음 예제는 지정한 인스턴스의 `rsa-2048` 퍼블릭 인증 키(`tpmt` 형식)를 가져옵니다.

```
aws ec2 get-instance-tpm-ek-pub \
    --instance-id i-1234567890abcdef0 \
    --key-format tpmt \ 
    --key-type rsa-2048
```

다음은 출력 예제입니다.

```
{
    "InstanceId": "i-01234567890abcdef",
    "KeyFormat": "tpmt",
    "KeyType": "rsa-2048",
    "KeyValue": "AAEACwADALIAIINxl2dEhLEXAMPLEUal1yT9UtduBlILZPKh2hszFGmqAAYAgABDA
    EXAMPLEAAABAOiRd7WmgtdGNoV1h/AxmW+CXExblG8pEUfNm0LOLiYnEXAMPLERqApiFa/UhvEYqN4
    Z7jKMD/usbhsQaAB1gKA5RmzuhSazHQkax7EXAMPLEzDthlS7HNGuYn5eG7qnJndRcakS+iNxT8Hvf
    0S1ZtNuItMs+Yp4SO6aU28MT/JZkOKsXIdMerY3GdWbNQz9AvYbMEXAMPLEPyHfzgVO0QTTJVGdDxh
    vxtXCOu9GYf0crbjEXAMPLEd4YTbWdDdgOKWF9fjzDytJSDhrLAOUctNzHPCd/92l5zEXAMPLEOIFA
    Ss50C0/802c17W2pMSVHvCCa9lYCiAfxH/vYKovAAE="
}
```

**예제 2.**  
다음 예제는 지정한 인스턴스의 `rsa-2048` 퍼블릭 인증 키(`der` 형식)를 가져옵니다.

```
aws ec2 get-instance-tpm-ek-pub \
    --instance-id i-1234567890abcdef0 \
    --key-format der \ 
    --key-type rsa-2048
```

다음은 출력 예제입니다.

```
{
    "InstanceId": "i-1234567890abcdef0",
    "KeyFormat": "der",
    "KeyType": "rsa-2048",
    "KeyValue": "MIIBIjANBgEXAMPLEw0BAQEFAAOCAQ8AMIIBCgKCAQEA6JF3taEXAMPLEXWH8DGZb4
    JcTFuUbykRR82bQs4uJifaKSOv5NGoEXAMPLEG8Rio3hnuMowP+6xuGxBoAHWAoDlGbO6FJrMdEXAMP
    LEnYUHvMO2GVLsc0a5ifl4buqcmd1FxqRL6I3FPwe9/REXAMPLE0yz5inhI7ppTbwxP8lmQ4qxch0x6
    tjcZ1Zs1DP0EXAMPLERUYLQ/Id/OBU7RBNMlUZ0PGG/G1cI670Zh/RytuOdx9iEXAMPLEtZ0N2A4pYX
    1+PMPK0lIOGssA5Ry03Mc8J3/3aXnOD2/ASRQ4gUBKznQLT/zTZEXAMPLEJUe8IJr2VgKIB/Ef+9gqi
    8AAQIDAQAB"
}
```

------
#### [ PowerShell ]

**인스턴스의 퍼블릭 인증 키를 검색하는 방법**  
[Get-EC2InstanceTpmEkPub](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceTpmEkPub.html) cmdlet을 사용합니다.

**예제 1.**  
다음 예제는 지정한 인스턴스의 `rsa-2048` 퍼블릭 인증 키(`tpmt` 형식)를 가져옵니다.

```
Get-EC2InstanceTpmEkPub `
    -InstanceId i-1234567890abcdef0 `
    -KeyFormat tpmt `
    -KeyType rsa-2048
```

**예제 2.**  
다음 예제는 지정한 인스턴스의 `rsa-2048` 퍼블릭 인증 키(`der` 형식)를 가져옵니다.

```
Get-EC2InstanceTpmEkPub `
    -InstanceId i-1234567890abcdef0 `
    -KeyFormat der `
    -KeyType rsa-2048
```

------