

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

# Authentication
<a name="authentication"></a>

인증은 클라이언트 또는 서버의 자격 증명을 확인하는 메커니즘입니다. 서버 인증은 디바이스 또는 다른 클라이언트가 실제 AWS IoT 엔드포인트와 통신하는지 확인하는 프로세스입니다. 클라이언트 인증은 디바이스 또는 다른 클라이언트가 자신을 인증하는 프로세스입니다 AWS IoT.

## X.509 인증서 개요
<a name="x509-certificate-overview"></a>

X.509 인증서는 [X.509 퍼블릭 키 인프라 표준](https://en.wikipedia.org/wiki/X.509)을 사용하여 퍼블릭 키를 인증서에 포함된 자격 증명과 연결하는 디지털 인증서입니다. X.509 인증서는 인증 기관(CA)이라고 하는 신뢰할 수 있는 엔터티가 발행합니다. CA는 X.509 인증서 발행하는 데 사용되는 CA 인증서라고 하는 하나 이상의 특수 인증서를 유지 관리합니다. 인증 기관만 CA 인증서에 액세스할 수 있습니다. X.509 인증서 체인은 클라이언트의 서버 인증과 서버의 클라이언트 인증에 모두 사용됩니다.

# 서버 인증
<a name="server-authentication"></a>

디바이스 또는 다른 클라이언트 AWS IoT Core가 AWS IoT Core 연결을 시도하면 서버는 디바이스가 서버를 인증하는 데 사용하는 X.509 인증서를 전송합니다. 인증은 [X.509 인증서 체인](x509-client-certs.md) 검증을 통해 TLS 계층에서 이루어집니다. 이는 HTTPS URL을 방문할 때 브라우저에서 사용하는 것과 동일한 방법입니다. 자체 인증 기관의 인증서를 사용하려면 단원을 참조하세요[CA 인증서 관리](manage-your-CA-certs.md)

디바이스 또는 다른 클라이언트가 엔드포인트에 AWS IoT Core TLS 연결을 설정하면는 디바이스가 다른 서버가 가장하는 것이 AWS IoT Core 아니라와 통신하고 있는지 확인하는 데 사용하는 인증서 체인을 AWS IoT Core 나타냅니다 AWS IoT Core. 표시되는 체인은 디바이스가 연결하는 엔드포인트 유형과 클라이언트가 TLS 핸드셰이크 중에 AWS IoT Core 협상한 [암호 제품군](transport-security.md)의 조합에 따라 달라집니다.

## 엔드포인트 유형
<a name="endpoint-types"></a>

AWS IoT Core 는를 지원합니다`iot:Data-ATS`. `iot:Data-ATS` 엔드포인트는 [Amazon Trust Services](https://www.amazontrust.com/repository/) CA에서 서명한 서버 인증서를 제공합니다.

ATS 엔드포인트에서 제공하는 인증서는 Starfield에서 교차 서명합니다. 일부 TLS 클라이언트 구현에는 신뢰 루트의 검증이 필요하며 클라이언트의 신뢰할 수 있는 스토어에 Starfield CA 인증서가 설치되어 있어야 합니다.

**주의**  
전체 인증서(발급자 이름 등 포함)를 해시하는 인증서 고정 방법을 사용하는 것은 권장되지 않습니다. 이렇게 하면 AWS에서 제공하는 ATS 인증서가 Starfield에 의해 교차 서명되고 발급자 이름이 다르기 때문에 인증서 확인에 실패할 수 있습니다.

**중요**  
`iot:Data-ATS` 엔드포인트를 사용합니다. Symantec 및 Verisign 인증서는 더 이상 사용되지 않으며에서 더 이상 지원되지 않습니다 AWS IoT Core.

`describe-endpoint` 명령을 사용하여 ATS 엔드포인트를 생성할 수 있습니다.

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

`describe-endpoint` 명령은 다음 형식으로 엔드포인트를 반환합니다.

```
account-specific-prefix.iot.your-region.amazonaws.com
```

**참고**  
`describe-endpoint`를 처음 호출하면 엔드포인트가 생성됩니다. 이후 `describe-endpoint`에 대한 모든 호출은 동일한 엔드포인트를 반환합니다.

**참고**  
 AWS IoT Core 콘솔에서 `iot:Data-ATS` 엔드포인트를 보려면 **설정을** 선택합니다. 콘솔에는 `iot:Data-ATS` 엔드포인트만 표시됩니다.

### AWS SDK for Java`IotDataPlaneClient`를 사용하여 생성
<a name="java-client"></a>

`iot:Data-ATS` 엔드포인트를 사용하는 `IotDataPlaneClient`를 생성하려면 다음을 수행해야 합니다.
+ [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html) API를 사용하여 `iot:Data-ATS` 엔드포인트를 생성합니다.
+ `IotDataPlaneClient`를 생성할 때 해당 엔드포인트를 지정합니다.

다음 예제에서는 이 두 작업을 모두 수행합니다.

```
public void setup() throws Exception {
        IotClient client = IotClient.builder().credentialsProvider(CREDENTIALS_PROVIDER_CHAIN).region(Region.US_EAST_1).build();
        String endpoint = client.describeEndpoint(r -> r.endpointType("iot:Data-ATS")).endpointAddress();
        iot = IotDataPlaneClient.builder()
                                .credentialsProvider(CREDENTIALS_PROVIDER_CHAIN)
                                .endpointOverride(URI.create("https://" + endpoint))
                                .region(Region.US_EAST_1)
                                .build();
}
```

## 서버 인증을 위한 CA 인증서
<a name="server-authentication-certs"></a>

사용 중인 데이터 엔드포인트 유형과 협상한 암호 제품군에 따라 AWS IoT Core 서버 인증 인증서는 다음 루트 CA 인증서 중 하나로 서명됩니다.

**Amazon Trust Services 엔드포인트(기본 설정됨)**

**참고**  
이 링크를 마우스 오른쪽 버튼으로 클릭하고 **다른 이름으로 링크 저장**을 선택하여 이러한 인증서를 파일로 저장해야 할 수 있습니다.
+ RSA 2048비트 키: [https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem).
+ RSA 4096비트 키: Amazon Root CA 2. 추후 사용 예약.
+ ECC 256비트 키: [https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem).
+ ECC 384비트 키: Amazon Root CA 4. 추후 사용 예약.

이러한 인증서는 모두 [Starfield 루트 CA 인증서](https://www.amazontrust.com/repository/SFSRootCAG2.pem)에서 교차 서명됩니다. 아시아 태평양(뭄바이) AWS IoT Core 리전 AWS IoT Core 에서 2018년 5월 9일 출시부터 모든 신규 리전은 ATS 인증서만 제공합니다.

**VeriSign 엔드포인트(레거시)**
+ RSA 2048비트 키: [VeriSign Class 3 Public Primary G5 루트 CA 인증서](https://www.digicert.com/kb/digicert-root-certificates.htm)

## 서버 인증 지침
<a name="server-authentication-guidelines"></a>

디바이스에서 AWS IoT Core 서버 인증 인증서를 검증하는 기능에 영향을 미칠 수 있는 많은 변수가 있습니다. 예를 들어 디바이스의 메모리가 너무 한정적이어서 가능한 모든 루트 CA 인증서를 보유할 수 없거나, 디바이스가 비표준 인증서 검증 방법을 구현할 수 있습니다. 이러한 이유로 다음 지침을 따르는 것이 좋습니다.
+ ATS 엔드포인트를 사용하고 지원되는 모든 Amazon Root CA 인증서를 설치하는 것이 좋습니다.
+ 디바이스에 이러한 인증서를 모두 저장할 수 없고 디바이스에서 ECC 기반 검증을 사용하지 않는 경우 [https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem) 및 [https://www.amazontrust.com/repository/AmazonRootCA4.pem](https://www.amazontrust.com/repository/AmazonRootCA4.pem) ECC 인증서를 생략할 수 있습니다. 디바이스가 RSA 기반 인증서 검증을 구현하지 않는 경우 [https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem) 및 [https://www.amazontrust.com/repository/AmazonRootCA2.pem](https://www.amazontrust.com/repository/AmazonRootCA2.pem) RSA 인증서를 생략할 수 있습니다. 이 링크를 마우스 오른쪽 버튼으로 클릭하고 **다른 이름으로 링크 저장**을 선택하여 이러한 인증서를 파일로 저장해야 할 수 있습니다.
+ ATS 엔드포인트에 연결할 때 서버 인증서 검증 문제가 발생하는 경우 관련 교차 서명된 Amazon Root CA 인증서를 신뢰할 수 있는 스토어에 추가해 보세요. 이 링크를 마우스 오른쪽 버튼으로 클릭하고 **다른 이름으로 링크 저장**을 선택하여 이러한 인증서를 파일로 저장해야 할 수 있습니다.
  + [교차 서명 Amazon Root CA 1](https://www.amazontrust.com/repository/G2-RootCA1.pem)
  + [교차 서명된 Amazon Root CA 2](https://www.amazontrust.com/repository/G2-RootCA2.pem) - 향후 사용을 위해 예약됩니다.
  + [교차 서명 Amazon Root CA 3](https://www.amazontrust.com/repository/G2-RootCA3.pem)
  + [교차 서명된 Amazon Root CA 4 - 향후 사용을 위해 예약됩니다.](https://www.amazontrust.com/repository/G2-RootCA4.pem)
+ 서버 인증서 검증 문제가 발생하는 경우 디바이스가 루트 CA를 명시적으로 신뢰해야 할 수 있습니다. [https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem)를 트러스트 스토어에 추가하세요.
+ 위의 단계를 실행한 후에도 문제가 계속 발생하면 [AWS 개발자 지원](https://aws.amazon.com/premiumsupport/plans/developers/) 센터에 문의하세요.

**참고**  
CA 인증서에는 서버 인증서를 검증하는 데 사용할 수 없는 만료 날짜가 있습니다. 따라서 만료 날짜가 도래하기 전에 CA 인증서를 교체해야 하는 경우도 있습니다. 지속적 연결을 보장하고 최신 보안 모범 사례를 유지하려면 모든 디바이스 또는 클라이언트에서 루트 CA 인증서를 업데이트해야 합니다.

**참고**  
디바이스 코드 AWS IoT Core 에서에 연결할 때 연결에 사용하는 API에 인증서를 전달합니다. 사용하는 API는 SDK에 따라 다릅니다. 자세한 내용은 [AWS IoT Core 디바이스 SDK](iot-sdks.md)를 참조하세요.

# 클라이언트 인증
<a name="client-authentication"></a>

AWS IoT 는 디바이스 또는 클라이언트 인증을 위해 세 가지 유형의 자격 증명 보안 주체를 지원합니다.
+ [X.509 클라이언트 인증서](x509-client-certs.md)
+ [IAM 사용자, 그룹 및 역할](iam-users-groups-roles.md)
+ [Amazon Cognito 자격 증명](cognito-identities.md)

이러한 자격 증명은 디바이스, 모바일, 웹 또는 데스크톱 애플리케이션에서 사용할 수 있습니다. 명령줄 인터페이스(CLI) AWS IoT 명령을 입력하는 사용자도 사용할 수 있습니다. 일반적으로 AWS IoT 디바이스는 X.509 인증서를 사용하는 반면, 모바일 애플리케이션은 Amazon Cognito 자격 증명을 사용합니다. 웹 및 데스크톱 애플리케이션은 IAM 또는 연동 자격 증명을 사용합니다. AWS CLI 명령은 IAM을 사용합니다. IAM 자격 증명에 대한 자세한 내용은 [에 대한 자격 증명 및 액세스 관리 AWS IoT](security-iam.md) 단원을 참조하세요.

# X.509 클라이언트 인증서
<a name="x509-client-certs"></a>

X.509 인증서 AWS IoT 는 클라이언트 및 디바이스 연결을 인증하는 기능을 제공합니다. 클라이언트가 통신하려면 AWS IoT 먼저 클라이언트 인증서를에 등록해야 합니다 AWS IoT. 클라이언트 인증서는 동일한 리전의 간에 디바이스를 쉽게 이동할 수 AWS 리전 있도록 동일한 AWS 계정의 여러 AWS 계정에 등록할 수 있습니다. 자세한 내용은 [다중 계정 등록을 통해 여러 AWS 계정에서 X.509 클라이언트 인증서 사용](#multiple-account-cert)를 참조하세요.

인증서 취소를 포함하여 세부적인 클라이언트 관리 작업이 가능하도록 각 디바이스 또는 클라이언트에 고유한 인증서를 부여하는 것이 좋습니다. 인증서 만료 시 원활한 작동을 보장하기 위해 디바이스 및 클라이언트가 인증서 교체 및 대체를 지원해야 합니다.

X.509 인증서를 사용하여 몇 개 이상의 디바이스를 지원하는 방법에 대한 자세한 내용은 [디바이스 프로비저닝](iot-provision.md) 단원을 참조하여 AWS IoT 이(가) 지원하는 다양한 인증서 관리 및 프로비저닝 옵션을 검토하세요.

**AWS IoT 는 다음과 같은 유형의 X.509 클라이언트 인증서를 지원합니다.**
+  에서 생성된 X.509 인증서 AWS IoT
+  에 등록된 CA가 서명한 X.509 인증서 AWS IoT.
+  AWS IoT에 등록되지 않은 CA에서 서명한 X.509 인증서입니다.

이 섹션에서는 AWS IoT에서 X.509 인증서를 관리하는 방법에 대해 설명합니다. AWS IoT 콘솔 또는 AWS CLI 를 사용하여 다음 인증서 작업을 수행할 수 있습니다.
+ [AWS IoT 클라이언트 인증서 생성](device-certs-create.md)
+ [자체 클라이언트 인증서 생성](device-certs-your-own.md)
+ [클라이언트 인증서 등록](register-device-cert.md)
+ [클라이언트 인증서 활성화 또는 비활성화](activate-or-deactivate-device-cert.md)
+ [클라이언트 인증서 취소](revoke-ca-cert.md)

이러한 작업을 수행하는 AWS CLI 명령에 대한 자세한 내용은 [AWS IoT CLI 참조](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/index.html)를 참조하세요.

## X.509 클라이언트 인증서 사용
<a name="x509-client-cert-basics"></a>

X.509 인증서는 클라이언트 및 디바이스 연결을 인증합니다 AWS IoT. X.509 인증서는 식별 및 인증 메커니즘보다 유용한 여러 가지 장점을 제공합니다. X.509 인증서가 있으면 디바이스에서 비대칭 키를 사용할 수 있습니다. 예를 들어 중요한 암호화 구성 요소가 디바이스를 벗어나지 않도록 프라이빗 키를 디바이스의 안전한 스토리지에 저장할 수 있습니다. 프라이빗 키가 디바이스를 전혀 벗어나지 않으므로 X.509 인증서는 사용자 이름 및 암호 또는 보유자 토큰과 같은 다른 체계보다 강력한 클라이언트 인증을 제공합니다.

AWS IoT 는 TLS 프로토콜의 클라이언트 인증 모드를 사용하여 클라이언트 인증서를 인증합니다. TLS 지원은 다수의 프로그래밍 언어 및 운영 체제에서 제공되며 데이터 암호화에 흔히 사용됩니다. TLS 클라이언트 인증에서는 X.509 클라이언트 인증서를 AWS IoT 요청하고 인증서의 레지스트리에 AWS 계정 대해 인증서의 상태를 검증합니다. 그런 다음 인증서에 포함된 퍼블릭 키에 해당하는 프라이빗 키의 소유권 증명을 위해 클라이언트에 문제를 제기합니다. AWS IoT 는 클라이언트가 전송 계층 보안(TLS[) 프로토콜에 SNI(Server Name Indication) 확장](https://tools.ietf.org/html/rfc3546#section-3.1)을 전송하도록 요구합니다. SNI 확장 구성에 대한 자세한 내용은 단원을 참조하세요[의 전송 보안 AWS IoT Core](transport-security.md)

 AWS IoT 코어에 대한 안전하고 일관된 클라이언트 연결을 용이하게 하려면 X.509 클라이언트 인증서에 다음이 포함되어야 합니다.
+  AWS IoT 코어에 등록됨. 자세한 내용은 [클라이언트 인증서 등록](register-device-cert.md) 단원을 참조하십시오.
+ `ACTIVE` 상태여야 합니다. 자세한 내용은 [클라이언트 인증서 활성화 또는 비활성화](activate-or-deactivate-device-cert.md) 단원을 참조하십시오.
+ 아직 인증서 만료 날짜가 되지 않았어야 합니다.

Amazon Root CA를 사용하는 클라이언트 인증서를 생성하고 다른 인증 기관(CA)에서 서명한 자체 클라이언트 인증서를 사용할 수 있습니다. AWS IoT 콘솔을 사용하여 Amazon Root CA를 사용하는 인증서를 생성하는 방법에 대한 자세한 내용은 섹션을 참조하세요[AWS IoT 클라이언트 인증서 생성](device-certs-create.md). 자체 X.509 인증서 사용에 대한 자세한 내용은 [자체 클라이언트 인증서 생성](device-certs-your-own.md) 단원을 참조하세요.

CA 인증서에서 서명한 인증서의 만료 날짜 및 시간은 인증서 생성 시 설정됩니다. 에서 생성된 X.509 인증서는 2049년 12월 31일 자정 UTC(2049-12-31T23:59:59Z)에 AWS IoT 만료됩니다.

AWS IoT Device Defender 는 일반적인 IoT 보안 모범 사례를 지원하는 AWS 계정 및 디바이스에 대한 감사를 수행할 수 있습니다. 여기에는 CA 또는 Amazon Root CA에서 서명한 X.509 인증서의 만료 날짜 관리가 포함됩니다. 인증서의 만료 날짜 관리에 대한 자세한 내용은 [장치 인증서 만료](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-device-cert-approaching-expiration.html) 및 [CA 인증서 만료](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-ca-cert-approaching-expiration.html)를 참조하세요.

공식 AWS IoT 블로그에서는를 [사용하여 IoT 디바이스 인증서 교체를 관리하는 방법에서 디바이스 인증서 교체 AWS IoT](https://aws.amazon.com/blogs/iot/how-to-manage-iot-device-certificate-rotation-using-aws-iot/) 및 보안 모범 사례 관리에 대해 자세히 살펴봅니다.

## 다중 계정 등록을 통해 여러 AWS 계정에서 X.509 클라이언트 인증서 사용
<a name="multiple-account-cert"></a>

다중 계정 등록을 통해 동일한 리전 및 다른 리전의 AWS 계정사이에 디바이스를 이동할 수 있습니다. 프리 프로덕션 계정에 디바이스를 등록, 테스트 및 구성한 다음 프로덕션 계정에 동일한 디바이스 및 디바이스 인증서를 등록하고 사용할 수 있습니다. 디바이스에 클라이언트 인증서를 등록하거나 등록된 CA 없이 디바이스 인증서를 등록할 수도 있습니다 AWS IoT. 자세한 정보는 [등록되지 않은 CA로 서명된 클라이언트 인증서 등록(CLI)](manual-cert-registration.md#manual-cert-registration-noca-cli)을 참조하세요.

**참고**  
다중 계정 등록에 사용되는 인증서는 `iot:Data-ATS`, `iot:Data`(레거시), `iot:Jobs` 및 `iot:CredentialProvider` 엔드포인트 유형으로 지원됩니다. AWS IoT 디바이스 엔드포인트에 대한 자세한 내용은 섹션을 참조하세요[AWS IoT 디바이스 데이터 및 서비스 엔드포인트](iot-connect-devices.md#iot-connect-device-endpoints).

다중 계정 등록을 사용하는 디바이스는 전송 계층 보안[(TLS) 프로토콜로 SNI(Server Name Indication) 확장](https://tools.ietf.org/html/rfc3546#section-3.1)을 전송하고에 연결할 때 `host_name` 필드에 전체 엔드포인트 주소를 제공해야 합니다 AWS IoT.는의 엔드포인트 주소를 AWS IoT 사용하여 연결을 올바른 AWS IoT 계정으로 `host_name` 라우팅합니다. `host_name`에서 유효한 엔드포인트 주소를 전송하지 않는 기존 디바이스도 계속 작동하기는 하지만 이 정보가 필요한 기능은 사용할 수 없습니다. SNI 확장에 대한 자세한 내용과 `host_name` 필드의 엔드포인트 주소를 식별하는 방법은 [의 전송 보안 AWS IoT Core](transport-security.md) 단원을 참조하세요.

**다중 계정 등록을 사용하려면**

1. CA로 디바이스 인증서를 등록할 수 있습니다. `SNI_ONLY` 모드에서 여러 계정에 서명 CA를 등록하고 해당 CA를 사용하여 여러 계정에 동일한 클라이언트 인증서를 등록할 수 있습니다. 자세한 내용은 [SNI\$1ONLY 모드에서 CA 인증서 등록(CLI) - 권장됨](manage-your-CA-certs.md#register-CA-cert-SNI-cli) 단원을 참조하십시오.

1. CA 없이 디바이스 인증서를 등록할 수 있습니다. [등록되지 않은 CA로 서명된 클라이언트 인증서 등록(CLI)](manual-cert-registration.md#manual-cert-registration-noca-cli)을(를) 참조하세요. CA 등록은 선택 사항입니다. 디바이스 인증서에 서명한 CA를 등록할 필요는 없습니다 AWS IoT.

## 에서 지원하는 인증서 서명 알고리즘 AWS IoT
<a name="x509-cert-algorithms"></a>

AWS IoT 는 다음과 같은 인증서 서명 알고리즘을 지원합니다.
+ SHA256WITHRSA
+ SHA384WITHRSA
+ SHA512WITHRSA
+ SHA256WITHRSAANDMGF1(RSASSA-PSS)
+ SHA384WITHRSAANDMGF1(RSASSA-PSS)
+ SHA512WITHRSAANDMGF1(RSASSA-PSS)
+ DSA\$1WITH\$1SHA256
+ ECDSA-WITH-SHA256
+ ECDSA-WITH-SHA384
+ ECDSA-WITH-SHA512

인증서 인증 및 보안에 대한 자세한 내용은 [디바이스 인증서 키 품질](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-device-cert-key-quality.html) 섹션을 참조하세요.

**참고**  
인증서 서명 요청(CSR)에는 퍼블릭 키가 포함되어야 합니다. 키는 길이가 2,048비트 이상인 RSA 키이거나 NIST P-256, NIST P-384, NIST P-521 곡선의 ECC 키일 수 있습니다. 자세한 내용은AWS IoT API 참조 가이드**의 [CreateCertificateFromCsr](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCertificateFromCsr.html)을 참조하세요.

## 에서 지원하는 키 알고리즘 AWS IoT
<a name="x509-cert-key-algorithms"></a>

아래 표는 키 알고리즘이 지원되는 방법을 보여줍니다.


****  

| 주요 알고리즘 | 인증서 서명 알고리즘 | TLS 버전 | 지원 여부 [Yes] 또는 [No] | 
| --- | --- | --- | --- | 
| 키 크기가 2,048비트 이상인 RSA | 모두 | TLS 1.2 TLS 1.3 | 예 | 
| ECC NIST P-256/P-384/P-521 | 모두 | TLS 1.2 TLS 1.3 | 예 | 
| 키 크기가 2,048비트 이상인 RSA-PSS | 모두 | TLS 1.2 | 아니요 | 
| 키 크기가 2,048비트 이상인 RSA-PSS | 모두 | TLS 1.3 | 예 | 

[CreateCertificateFromCSR](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateFromCsr.html)을 사용하여 인증서를 생성하려면 지원되는 키 알고리즘을 사용하여 CSR에 대한 퍼블릭 키를 생성할 수 있습니다. [RegisterCertificate](https://docs.aws.amazon.com//iot/latest/apireference/API_RegisterCertificate.html) 또는 [RegisterCertificateWithoutCA](https://docs.aws.amazon.com//iot/latest/apireference/API_RegisterCertificateWithoutCA.html)를 사용하여 자체 인증서를 등록하려면 지원되는 키 알고리즘을 사용하여 인증서에 대한 퍼블릭 키를 생성할 수 있습니다.

자세한 내용은 [보안 정책](https://docs.aws.amazon.com//iot/latest/developerguide/transport-security.html#tls-policy-table)을 참조하세요.

# AWS IoT 클라이언트 인증서 생성
<a name="device-certs-create"></a>

AWS IoT 는 Amazon Root 인증 기관(CA)에서 서명한 클라이언트 인증서를 제공합니다.

이 주제에서는 Amazon Root 인증 기관에서 서명한 클라이언트 인증서를 생성하고 인증서 파일을 다운로드하는 방법에 대해 설명합니다. 클라이언트 인증서 파일을 생성한 후에는 클라이언트에 설치해야 합니다.

**참고**  
에서 제공하는 각 X.509 클라이언트 인증서 AWS IoT 에는 인증서 생성 시 설정한 발급자 및 주체 속성이 있습니다. 인증서 속성은 인증서를 만든 후에만 변경할 수 없습니다.

 AWS IoT 콘솔 또는를 사용하여 Amazon Root AWS IoT 인증 기관에서 서명한 인증서를 AWS CLI 생성할 수 있습니다.

## AWS IoT 인증서 생성(콘솔)
<a name="device-certs-create-console"></a>

**AWS IoT 콘솔을 사용하여 AWS IoT 인증서를 생성하려면**

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

1. 탐색 창에서 **보안**, **인증서**, **생성**을 차례대로 선택합니다.

1. **원클릭 인증서 생성(권장)**과 **인증서 생성**을 선택합니다.

1. **인증서 생성 완료** 페이지에서 사물, 퍼블릭 키 및 프라이빗 키에 대한 클라이언트 인증서 파일을 안전한 위치로 다운로드합니다. 에서 생성된 이러한 인증서 AWS IoT 는 AWS IoT 서비스에서만 사용할 수 있습니다.

   Amazon Root CA 인증서 파일도 필요한 경우 이 페이지에는 다운로드할 수 있는 페이지로 연결되는 링크도 있습니다.

1. 이제 클라이언트 인증서가 생성되고 AWS IoT에 등록되었습니다. 클라이언트에서 인증서를 사용하기 전에 인증서를 활성화해야 합니다.

    지금 클라이언트 인증서를 활성화하려면 **활성화**를 선택합니다. 지금 인증서를 지금 활성화하지 않으려면 [클라이언트 인증서 활성화(콘솔)](activate-or-deactivate-device-cert.md#activate-device-cert-console)에서 나중에 인증서를 활성화하는 방법을 알아보세요.

   

1. 인증서에 정책을 연결하려면 **정책 연결**을 선택합니다.

   지금 정책을 연결하지 않으려면 **완료**를 선택하여 완료합니다. 나중에 정책을 연결할 수 있습니다.

절차를 완료 한 후 클라이언트에 인증서 파일을 설치합니다.

## AWS IoT 인증서 생성(CLI)
<a name="device-certs-create-cli"></a>

는 Amazon Root 인증 기관에서 서명한 클라이언트 인증서를 생성하는 **[create-keys-and-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/create-keys-and-certificate.html)** 명령을 AWS CLI 제공합니다. 그러나 이 명령은 Amazon Root CA 인증서 파일을 다운로드하지 않습니다. [서버 인증을 위한 CA 인증서](server-authentication.md#server-authentication-certs)에서 Amazon Root CA 인증서 파일을 다운로드할 수 있습니다.

이 명령은 프라이빗 키, 퍼블릭 키 및 X.509 인증서 파일을 생성하고 인증서를 등록하고 활성화합니다 AWS IoT.

```
aws iot create-keys-and-certificate \
    --set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```

인증서를 생성하고 등록할 때 인증서를 활성화하지 않으려면 이 명령은 프라이빗 키, 퍼블릭 키 및 X.509 인증서 파일을 생성하고 인증서를 등록하지만 인증서를 활성화하지는 않습니다. [클라이언트 인증서 활성화(CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli)에서는 나중에 인증서를 활성화하는 방법에 대해 설명합니다.

```
aws iot create-keys-and-certificate \
    --no-set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```



클라이언트에 인증서 파일을 설치합니다.

# 자체 클라이언트 인증서 생성
<a name="device-certs-your-own"></a>

AWS IoT 는 루트 또는 중간 인증 기관(CA)에서 서명한 클라이언트 인증서를 지원합니다.는 CA 인증서를 AWS IoT 사용하여 인증서의 소유권을 확인합니다. Amazon의 CA가 아닌 CA에서 서명한 디바이스 인증서를 사용하려면 디바이스 인증서의 소유권을 확인할 수 AWS IoT 있도록 CA의 인증서를에 등록해야 합니다.

AWS IoT 는 자체 인증서를 가져오는 여러 가지 방법(BYOC)을 지원합니다.
+ 먼저 클라이언트 인증서 서명에 사용되는 CA를 등록한 다음 개별 클라이언트 인증서를 등록합니다. 디바이스 또는 클라이언트가 처음 연결될 때 클라이언트 인증서에 등록하려면 AWS IoT ([Just-in-Time Provisioning](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html)이라고도 함) 서명 CA를에 AWS IoT 등록하고 자동 등록을 활성화해야 합니다.
+ 서명 CA를 등록할 수 없는 경우 CA 없이 클라이언트 인증서를 등록하도록 선택할 수 있습니다. CA 없이 등록된 디바이스의 경우 AWS IoT에 연결할 때 [서버 이름 표시(SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1)를 제시해야 합니다.

**참고**  
CA를 사용하여 클라이언트 인증서를 등록하려면 계층 구조의 다른 CA가 AWS IoT아닌에 서명 CAs를 등록해야 합니다.

**참고**  
CA 인증서는 한 리전의 한 계정에서만 `DEFAULT` 모드로 등록할 수 있습니다. CA 인증서는 한 리전의 여러 계정에서 `SNI_ONLY` 모드로 등록할 수 있습니다.

X.509 인증서를 사용하여 몇 개 이상의 디바이스를 지원하는 방법에 대한 자세한 내용은 [디바이스 프로비저닝](iot-provision.md) 단원을 참조하여 AWS IoT 이(가) 지원하는 다양한 인증서 관리 및 프로비저닝 옵션을 검토하세요.

**Topics**
+ [CA 인증서 관리](manage-your-CA-certs.md)
+ [CA 인증서를 사용하여 클라이언트 인증서 생성](create-device-cert.md)

# CA 인증서 관리
<a name="manage-your-CA-certs"></a>

이 섹션에서는 자체 인증 기관(CA) 인증서를 관리하기 위한 일반적인 작업에 대해 설명합니다.

인식하지 못하는 CA에서 서명한 클라이언트 인증서를 사용하는 AWS IoT 경우 인증 기관(CA)을에 등록할 수 AWS IoT 있습니다.

클라이언트가 처음 연결할 AWS IoT 때 클라이언트 인증서를에 자동으로 등록하도록 하려면 클라이언트 인증서에 서명한 CA를에 등록해야 합니다 AWS IoT. 그렇지 않으면 클라이언트 인증서를 서명한 CA 인증서를 등록할 필요가 없습니다.

**참고**  
CA 인증서는 한 리전의 한 계정에서만 `DEFAULT` 모드로 등록할 수 있습니다. CA 인증서는 한 리전의 여러 계정에서 `SNI_ONLY` 모드로 등록할 수 있습니다.

**Topics**
+ [CA 인증서 생성](#create-your-CA-cert)
+ [CA 인증서 등록](#register-CA-cert)
+ [CA 인증서 비활성화](#deactivate-ca-cert)

## CA 인증서 생성
<a name="create-your-CA-cert"></a>

CA 인증서가 없을 경우 [OpenSSL v1.1.1i](https://www.openssl.org/) 도구를 사용하여 인증서를 생성할 수 있습니다.

**참고**  
 AWS IoT 콘솔에서는이 절차를 수행할 수 없습니다.

**[OpenSSL v1.1.1i](https://www.openssl.org/) 도구를 사용하여 CA 인증서를 생성하려면**

1. 키 페어를 생성합니다.

   ```
   openssl genrsa -out root_CA_key_filename.key 2048
   ```

1. 키 페어의 프라이빗 키를 사용하여 CA 인증서를 생성합니다.

   ```
   openssl req -x509 -new -nodes \
       -key root_CA_key_filename.key \
       -sha256 -days 1024 \
       -out root_CA_cert_filename.pem
   ```

## CA 인증서 등록
<a name="register-CA-cert"></a>

이 절차에서는 Amazon의 CA가 아닌 인증 기관(CA)의 인증서를 등록하는 방법을 설명합니다. CA 인증서를 AWS IoT Core 사용하여 인증서 소유권을 확인합니다. Amazon의 CA가 아닌 CA에서 서명한 디바이스 인증서를 사용하려면 디바이스 인증서의 소유권을 확인할 수 AWS IoT Core 있도록 CA 인증서를에 등록해야 합니다.

### CA 인증서 등록(콘솔)
<a name="register-CA-cert-console"></a>

**참고**  
콘솔에서 CA 인증서를 등록하려면 콘솔에서 [CA 인증서 등록(Register CA certificate)](https://console.aws.amazon.com//iot/home#/create/cacertificate)을 시작합니다. 확인 인증서를 제공하거나 프라이빗 키에 액세스할 필요 없이 다중 계정 모드에서 CA를 등록할 수 있습니다. 다중 계정 모드에서 같은 AWS 리전의 여러 AWS 계정 으로 CA를 등록할 수 있습니다. CA 프라이빗 키의 확인 인증서와 소유권 증명을 제공하여 단일 계정 모드에서 CA를 등록할 수 있습니다.

### CA 인증서 등록(CLI)
<a name="register-CA-cert-cli"></a>

CA 인증서를 `DEFAULT` 모드 또는 `SNI_ONLY` 모드로 등록할 수 있습니다. CA는 한 AWS 계정 에 하나씩 `DEFAULT` 모드에 등록할 수 있습니다 AWS 리전. CA는 동일한에서 여러에 의해 `SNI_ONLY` 모드 AWS 계정 에 등록될 수 있습니다 AWS 리전. CA 인증서에 대한 자세한 정보는 [certificateMode](https://docs.aws.amazon.com//iot/latest/apireference/API_CACertificateDescription.html#iot-Type-CACertificateDescription-certificateMode)를 참조하세요.

**참고**  
`SNI_ONLY` 모드에서 CA를 등록하는 것이 좋습니다. 확인 인증서나 프라이빗 키에 대한 액세스 권한을 제공할 필요가 없으며 동일한 AWS 계정 에서 여러 로 CA를 등록할 수 있습니다 AWS 리전.

#### SNI\$1ONLY 모드에서 CA 인증서 등록(CLI) - 권장됨
<a name="register-CA-cert-SNI-cli"></a>

**사전 조건**

계속하기 전에 컴퓨터에서 다음 항목을 사용할 수 있는지 확인합니다.
+ 루트 CA의 인증서 파일(다음 예시에서 `root_CA_cert_filename.pem`으로 언급됨)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) 이상

**를 사용하여 `SNI_ONLY` 모드에서 CA 인증서를 등록하려면 AWS CLI**

1. CA 인증서를에 등록합니다 AWS IoT. **register-ca-certificate** 명령을 사용하여 CA 인증서 파일 이름을 입력합니다. 자세한 정보는 *AWS CLI 명령 참조*의 [egister-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html)를 참조하세요.

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --certificate-mode SNI_ONLY
   ```

   성공한 경우 이 명령은 *certificateId*를 반환합니다.

1. 이 시점에서 CA 인증서는에 등록 AWS IoT 되었지만 비활성 상태입니다. CA 인증서에서 서명한 클라이언트 인증서를 등록하려면 먼저 CA 인증서가 활성 상태여야 합니다.

   이 단계에서는 CA 인증서를 활성화합니다.

   다음과 같은 **update-certificate** CLI 명령을 사용하여 CA 인증서를 활성화합니다. 자세한 정보는 *AWS CLI 명령 참조*의 [update-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)를 참조하세요.

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

**describe-ca-certificate** 명령을 사용하여 CA 인증서의 상태를 확인합니다. 자세한 정보는 *AWS CLI 명령 참조*의 [describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html)를 참조하세요.

#### `DEFAULT` 모드에서 CA 인증서 등록(CLI)
<a name="register-CA-cert-default-cli"></a>

**사전 조건**

계속하기 전에 컴퓨터에서 다음 항목을 사용할 수 있는지 확인합니다.
+ 루트 CA의 인증서 파일(다음 예시에서 `root_CA_cert_filename.pem`으로 언급됨)
+ 루트 CA 인증서의 프라이빗 키 파일(다음 예시에서 `root_CA_key_filename.key`로 언급됨)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) 이상

**를 사용하여 `DEFAULT` 모드에서 CA 인증서를 등록하려면 AWS CLI**

1. 에서 등록 코드를 가져오려면를 AWS IoT사용합니다**get-registration-code**. 반환된 `registrationCode`를 저장하여 프라이빗 키 확인 인증서의 `Common Name`으로 사용합니다. 자세한 내용은 *AWS CLI 명령 참조 안내서*의 [get-registration-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/get-registration-code.html)를 참조하세요.

   ```
   aws iot get-registration-code
   ```

1. 프라이빗 키 확인 인증서의 키 페어를 생성합니다.

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. 프라이빗 키 확인 인증서에 대한 인증서 서명 요청(CSR)을 생성합니다. 인증서의 `Common Name` 필드를 **get-registration-code**에서 반환한 `registrationCode`로 설정합니다.

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   인증서의 `Common Name`을 비롯해 일부 정보를 입력하라는 메시지가 표시됩니다.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. CSR을 사용하여 프라이빗 키 확인 인증서를 생성합니다.

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. CA 인증서를에 등록합니다 AWS IoT. 다음과 같이 CA 인증서 파일 이름과 프라이빗 키 확인 인증서 파일 이름을 **register-ca-certificate** 명령에 전달합니다. 자세한 정보는 *AWS CLI 명령 참조*의 [egister-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html)를 참조하세요.

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --verification-cert file://verification_cert_filename.pem
   ```

   성공한 경우 이 명령은 *인증서 ID*를 반환합니다.

1. 현재 CA 인증서는에 등록 AWS IoT 되었지만 활성 상태가 아닙니다. 서명한 클라이언트 인증서를 등록하려면 CA 인증서가 활성 상태여야 합니다.

   이 단계에서는 CA 인증서를 활성화합니다.

   다음과 같은 **update-certificate** CLI 명령을 사용하여 CA 인증서를 활성화합니다. 자세한 정보는 *AWS CLI 명령 참조*의 [update-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)를 참조하세요.

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

**describe-ca-certificate** 명령을 사용하여 CA 인증서의 상태를 확인합니다. 자세한 정보는 *AWS CLI 명령 참조*의 [describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html)를 참조하세요.

### CA 검증 인증서를 생성하여 콘솔에서 CA 인증서를 등록합니다.
<a name="create-CA-verification-cert"></a>

**참고**  
이 절차는 AWS IoT 콘솔에서 CA 인증서를 등록하는 경우에만 사용할 수 있습니다.  
 AWS IoT 콘솔에서이 절차를 수행하지 않은 경우 콘솔의 CA 인증서 등록에서 [CA 인증서 등록](https://console.aws.amazon.com//iot/home#/create/cacertificate) 프로세스를 시작합니다.

계속하기 전에 동일한 컴퓨터에서 다음 항목을 사용할 수 있는지 확인합니다.
+ 루트 CA의 인증서 파일(다음 예시에서 `root_CA_cert_filename.pem`으로 언급됨)
+ 루트 CA 인증서의 프라이빗 키 파일(다음 예시에서 `root_CA_key_filename.key`로 언급됨)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) 이상

**명령줄 인터페이스를 사용하여 CA 확인 인증서를 생성하여 콘솔에서 CA 인증서를 등록하는 방법**

1. 생성하려는 확인 인증서 키 파일의 이름으로 `verification_cert_key_filename.key`를 바꿉니다(예: **verification\$1cert.key**). 그런 다음, 이 명령을 실행하여 프라이빗 키 확인 인증서의 키 페어를 생성합니다.

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. `verification_cert_key_filename.key`를 1단계에서 생성한 키 파일의 이름으로 바꿉니다.

   `verification_cert_csr_filename.csr`을 생성하려는 인증서 서명 요청(CSR) 파일의 이름으로 바꿉니다. 예: **verification\$1cert.csr**.

   이 명령을 실행하여 CSR 파일을 생성합니다.

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   이 명령은 나중에 설명할 추가 정보를 묻는 메시지를 표시합니다.

1.  AWS IoT 콘솔의 **확인 인증서** 컨테이너에서 등록 코드를 복사합니다.

1. **openssl** 명령에서 묻는 정보가 다음 예제에 나와 있습니다. `Common Name` 필드를 제외하고는 원하는 값을 입력하거나 비워 둘 수 있습니다.

   `Common Name` 필드에 이전 단계에서 복사한 등록 코드를 붙여 넣습니다.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

   작업을 마치면 명령이 CSR 파일을 생성합니다.

1. `verification_cert_csr_filename.csr`을 이전 단계에서 사용한 `verification_cert_csr_filename.csr`로 바꿉니다.

   `root_CA_cert_filename.pem`을 등록하려는 CA 인증서의 파일 이름으로 바꿉니다.

   `root_CA_key_filename.key`를 CA 인증서 프라이빗 키 파일의 파일 이름으로 바꿉니다.

   `verification_cert_filename.pem`을 생성하려는 확인 인증서의 파일 이름으로 바꿉니다. 예를 들어 **verification\$1cert.pem**입니다.

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. OpenSSL 명령이 완료되면 콘솔로 돌아갈 때 이러한 파일을 사용할 준비가 되어 있을 것입니다.
   + CA 인증서 파일(이전 명령에서 사용된 `root_CA_cert_filename.pem`)
   + 이전 단계에서 생성한 확인 인증서(이전 명령에서 사용된 *verification\$1cert\$1filename.pem*)

## CA 인증서 비활성화
<a name="deactivate-ca-cert"></a>

자동 클라이언트 인증서 등록을 위해 CA(인증 기관) 인증서가 활성화되면는 CA 인증서를 AWS IoT 확인하여 CA가 인지 확인합니다`ACTIVE`. CA 인증서가 인 경우 클라이언트 인증서 등록을 허용하지 `INACTIVE` AWS IoT 않습니다.

CA 인증서를 `INACTIVE`로 설정하면 CA에서 발급한 새 클라이언트 인증서가 자동으로 등록되지 않습니다.

**참고**  
훼손된 CA 인증서에서 서명한 모든 등록된 클라이언트 인증서는 사용자가 하나씩 명시적으로 취소할 때까지 계속 작동합니다.

### CA 인증서 비활성화(콘솔)
<a name="deactivate-ca-cert-console"></a>

**AWS IoT 콘솔을 사용하여 CA 인증서를 비활성화하려면**

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

1. 왼쪽 탐색 창에서 **보안**을 선택한 후 **CA**를 선택합니다.

1. 인증 기관 목록에서 비활성화할 인증 기관을 찾은 다음 줄임표 아이콘을 사용하여 옵션 메뉴를 엽니다.

1. 옵션 메뉴에서 **비활성화**를 선택합니다.

인증 기관은 목록에 **비활성**으로 표시되어야 합니다.

**참고**  
 AWS IoT 콘솔은 비활성화한 CA에서 서명한 인증서를 나열하는 방법을 제공하지 않습니다. 이러한 인증서를 나열하는 AWS CLI 옵션은 [CA 인증서 비활성화(CLI)](#deactivate-ca-cert-cli) 단원을 참조하세요.

### CA 인증서 비활성화(CLI)
<a name="deactivate-ca-cert-cli"></a>

는 CA 인증서를 비활성화하는 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html) 명령을 AWS CLI 제공합니다.

```
aws iot update-ca-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html) 명령을 사용하여 지정된 CA에서 서명한 모든 등록된 디바이스 인증서의 목록을 가져옵니다. 지정된 CA 인증서에서 서명한 각 디바이스 인증서에 대해 클라이언트 인증서가 사용되지 않도록 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) 명령을 사용하여 클라이언트 인증서를 취소합니다.

[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) 명령을 사용하여 CA 인증서의 상태를 확인합니다.

# CA 인증서를 사용하여 클라이언트 인증서 생성
<a name="create-device-cert"></a>

자체 인증 기관(CA)을 사용하여 클라이언트 인증서를 생성할 수 있습니다. 클라이언트 인증서는 사용하기 AWS IoT 전에에 등록해야 합니다. 클라이언트 인증서의 등록 옵션에 대한 자세한 내용은 단원을 참조하세요[클라이언트 인증서 등록](register-device-cert.md)

## 클라이언트 인증서 생성(CLI)
<a name="create-device-cert-cli"></a>

**참고**  
 AWS IoT 콘솔에서는이 절차를 수행할 수 없습니다.

**를 사용하여 클라이언트 인증서를 생성하려면 AWS CLI**

1. 키 페어를 생성합니다.

   ```
   openssl genrsa -out device_cert_key_filename.key 2048
   ```

1. 클라이언트 인증서에 대한 CSR을 생성합니다.

   ```
   openssl req -new \
       -key device_cert_key_filename.key \
       -out device_cert_csr_filename.csr
   ```

   아래와 같이 몇 가지 정보를 입력하라는 메시지가 표시됩니다.

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. CSR에서 클라이언트 인증서를 생성합니다.

   ```
   openssl x509 -req \
       -in device_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out device_cert_filename.pem \
       -days 500 -sha256
   ```

 현재 클라이언트 인증서가 생성되었지만 아직 등록되지 않았습니다 AWS IoT. 클라이언트 인증서를 등록하는 방법 및 시기에 대한 자세한 내용은 단원을 참조하세요[클라이언트 인증서 등록](register-device-cert.md) 

# 클라이언트 인증서 등록
<a name="register-device-cert"></a>

클라이언트와 간의 통신을 활성화 AWS IoT 하려면 클라이언트 인증서를에 등록해야 합니다 AWS IoT. 각 클라이언트 인증서를 수동으로 등록하거나 클라이언트가 AWS IoT 에 처음 연결할 때 자동으로 등록하도록 클라이언트 인증서를 구성할 수 있습니다.

 처음 연결할 때 클라이언트 및 디바이스가 클라이언트 인증서를 등록하도록 하려면 [CA 인증서 등록](manage-your-CA-certs.md#register-CA-cert)을(를) 사용하여 해당 클라이언트 인증서를 사용하려는 리전에서 AWS IoT (으)로 클라이언트 인증서에 서명해야 합니다. Amazon Root CA는에 자동으로 등록됩니다 AWS IoT.

클라이언트 인증서는 AWS 계정 및 리전에서 공유할 수 있습니다. 이 주제의 절차는 클라이언트 인증서를 사용할 각 계정 및 리전에서 수행해야 합니다. 한 계정 또는 리전에서 등록된 클라이언트 인증서는 다른 계정 또는 리전에서 자동으로 인식되지 않습니다.

**참고**  
전송 계층 보안(TLS) 프로토콜을 사용하여 AWS IoT 에 연결하는 클라이언트는 TLS에 대한 [SNI(서버 이름 표시) 확장](https://tools.ietf.org/html/rfc3546#section-3.1)을 지원해야 합니다. 자세한 내용은 [의 전송 보안 AWS IoT Core](transport-security.md) 단원을 참조하세요.

**Topics**
+ [수동으로 클라이언트 인증서 등록](manual-cert-registration.md)
+ [클라이언트가 JITR( AWS IoT just-in-time Registration)에 연결할 때 클라이언트 인증서 등록](auto-register-device-cert.md)

# 수동으로 클라이언트 인증서 등록
<a name="manual-cert-registration"></a>

 AWS IoT 콘솔 및를 사용하여 클라이언트 인증서를 수동으로 등록할 수 있습니다 AWS CLI.

사용할 등록 절차는 인증서가 AWS 계정및 리전에서 공유되는지 여부에 따라 달라집니다. 한 계정 또는 리전에서 등록된 클라이언트 인증서는 다른 계정 또는 리전에서 자동으로 인식되지 않습니다.

이 주제의 절차는 클라이언트 인증서를 사용할 각 계정 및 리전에서 수행해야 합니다. 클라이언트 인증서는 AWS 계정및 리전에서 공유할 수 있습니다.

## 등록된 CA로 서명된 클라이언트 인증서 등록(콘솔)
<a name="manual-cert-registration-console"></a>

**참고**  
이 절차를 수행하기 전에 클라이언트 인증서의 .pem 파일이 있고 클라이언트 인증서가 [등록한 AWS IoT](manage-your-CA-certs.md#register-CA-cert) CA에 의해 서명되었는지 확인합니다.

**콘솔을 AWS IoT 사용하여에 기존 인증서를 등록하려면**

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

1. 탐색 창의 **관리(Manage)** 섹션에서 **보안(Security)**을 선택한 다음 **인증서(Certificates)**를 선택합니다.

1. **인증서(Certificates)** 대화 상자의 **인증서(Certificates)** 페이지에서 **인증서 추가(Add certificate)**를 선택한 다음 **인증서 등록(Register certificates)**을 선택합니다.

1. **업로드할 인증서(Certificates to upload)** 대화 상자의 **인증서 등록(Register certificate)** 페이지에서 다음을 수행합니다.
   + **CA가 AWS IoT에 등록됨**을 선택합니다.
   + **CA 인증서 선택(Choose a CA certificate)**에서 **인증 기관(Certification authority)**을 선택합니다.
     +  AWS IoT에 등록되지 않은 새 **인증 기관(Certification authority)**을 등록하려면 **새 CA 등록(Register a new CA)**을 선택합니다.
     + **Amazon 루트 인증 기관(Amazon Root certificate authority)**이 해당 인증 기관인 경우 **CA 인증서 선택(Choose a CA certificate)**을 비워 둡니다.
   + 업로드하고 등록할 인증서를 최대 10개까지 선택합니다 AWS IoT.
     + [AWS IoT 클라이언트 인증서 생성](device-certs-create.md) 및 [CA 인증서를 사용하여 클라이언트 인증서 생성](create-device-cert.md)에서 생성한 인증서 파일을 사용합니다.
   + **활성화(Activate)** 또는 **비활성화(Deactivate)**를 선택합니다. **비활성화(Deactivate)**를 선택한 경우 인증서 등록 후 인증서를 활성화하는 방법이 [클라이언트 인증서 활성화 또는 비활성화](activate-or-deactivate-device-cert.md)에 설명되어 있습니다.
   + **등록**을 선택합니다.

이제 **인증서(Certificates)** 대화 상자의 **인증서(Certificates)** 페이지에 등록된 인증서가 나타납니다.

## 등록되지 않은 CA로 서명된 클라이언트 인증서 등록(콘솔)
<a name="manual-cert-registration-console-noca"></a>

**참고**  
이 절차를 수행하기 전에 클라이언트 인증서의 .pem 파일이 있는지 확인해야 합니다.

**콘솔을 AWS IoT 사용하여에 기존 인증서를 등록하려면**

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

1. 왼쪽 탐색 창에서 **보안**, **인증서**, **생성**을 차례대로 선택합니다.

1. **인증서 생성**에서 **내 인증서 사용** 항목을 찾아 **시작하기**를 선택합니다.

1. **CA 선택**에서 **다음**을 선택합니다.

1.  **기존 디바이스 인증서 등록**에서 **인증서 선택**을 선택하고 등록할 인증서 파일을 최대 10개까지 선택합니다.

1.  파일 대화 상자를 닫은 후 클라이언트 인증서를 등록할 때 클라이언트 인증서를 활성화할지 또는 취소할지 선택합니다.

   인증서를 등록할 때 인증서를 활성화하지 않으면 [클라이언트 인증서 활성화(콘솔)](activate-or-deactivate-device-cert.md#activate-device-cert-console)에서 나중에 인증서를 활성화하는 방법에 대해 설명합니다.

   인증서를 등록할 때 인증서가 취소되면 나중에 활성화할 수 없습니다.

   등록할 인증서 파일을 선택하고 등록 후 수행할 작업을 선택한 후 **인증서 등록**을 선택합니다.

성공적으로 등록된 클라이언트 인증서가 인증서 목록에 나타납니다.

## 등록된 CA로 서명된 클라이언트 인증서 등록(CLI)
<a name="manual-cert-registration-cli"></a>

**참고**  
이 절차를 수행하기 전에 인증 기관(CA) .pem 및 클라이언트 인증서의 .pem 파일이 있는지 확인해야 합니다. 클라이언트 인증서는 [등록한 AWS IoT](manage-your-CA-certs.md#register-CA-cert) 인증 기관(CA)에서 서명해야 합니다.

[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html) 명령을 사용하여 클라이언트 인증서를 활성화하지 않고 등록합니다.

```
aws iot register-certificate \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

클라이언트 인증서가에 등록 AWS IoT되었지만 아직 활성화되지 않았습니다. 나중에 활성화하는 방법에 대한 자세한 내용은 [클라이언트 인증서 활성화(CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) 단원을 참조하세요.

이 명령을 사용하여 클라이언트 인증서를 등록할 때 클라이언트 인증서를 활성화할 수도 있습니다.

```
aws iot register-certificate \
    --set-as-active \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

연결에 사용할 수 있도록 인증서를 활성화하는 방법에 대한 자세한 내용은 섹션을 AWS IoT참조하세요. [클라이언트 인증서 활성화 또는 비활성화](activate-or-deactivate-device-cert.md) 

## 등록되지 않은 CA로 서명된 클라이언트 인증서 등록(CLI)
<a name="manual-cert-registration-noca-cli"></a>

**참고**  
이 절차를 수행하기 전에 인증서의 .pem 파일이 있는지 확인해야 합니다.

[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html) 명령을 사용하여 클라이언트 인증서를 활성화하지 않고 등록합니다.

```
aws iot register-certificate-without-ca \
    --certificate-pem file://device_cert_filename.pem
```

클라이언트 인증서가에 등록 AWS IoT되었지만 아직 활성화되지 않았습니다. 나중에 활성화하는 방법에 대한 자세한 내용은 [클라이언트 인증서 활성화(CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) 단원을 참조하세요.

이 명령을 사용하여 클라이언트 인증서를 등록할 때 클라이언트 인증서를 활성화할 수도 있습니다.

```
aws iot register-certificate-without-ca \
    --status ACTIVE \
    --certificate-pem file://device_cert_filename.pem
```

연결에 사용할 수 있도록 인증서를 활성화하는 방법에 대한 자세한 내용은 섹션을 AWS IoT참조하세요[클라이언트 인증서 활성화 또는 비활성화](activate-or-deactivate-device-cert.md).

# 클라이언트가 JITR( AWS IoT just-in-time Registration)에 연결할 때 클라이언트 인증서 등록
<a name="auto-register-device-cert"></a>

클라이언트가 처음 연결할 때에 AWS IoT 자동으로 등록하도록 서명된 클라이언트 인증서를 활성화하도록 CA 인증서를 구성할 수 있습니다 AWS IoT.

클라이언트가 AWS IoT 에 처음 연결할 때 클라이언트 인증서를 등록하려면 자동 등록을 위해 CA 인증서를 활성화하고 필요한 인증서를 제공하도록 클라이언트의 첫 번째 연결을 구성해야 합니다.

## 자동 등록을 지원하도록 CA 인증서 구성(콘솔)
<a name="enable-auto-registration-console"></a>

**AWS IoT 콘솔을 사용하여 자동 클라이언트 인증서 등록을 지원하도록 CA 인증서를 구성하려면**

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

1. 왼쪽 탐색 창에서 **보안**을 선택한 후 **CA**를 선택합니다.

1. 인증 기관 목록에서 자동 등록을 활성화할 인증 기관을 찾은 다음 줄임표 아이콘을 사용하여 옵션 메뉴를 엽니다.

1. 옵션 메뉴에서 **자동 등록 활성화**를 선택합니다.

**참고**  
인증 기관 목록에 자동 등록 상태가 표시되지 않습니다. 인증 기관의 자동 등록 상태를 보려면 인증 기관의 **세부 정보** 페이지를 열어야 합니다.

## 자동 등록을 지원하도록 CA 인증서 구성(CLI)
<a name="enable-auto-registration-cli"></a>

CA 인증서를에 이미 등록한 경우 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html) 명령을 AWS IoT사용하여 `autoRegistrationStatus` CA 인증서를 로 설정합니다`ENABLE`.

```
aws iot update-ca-certificate \
--certificate-id caCertificateId \
--new-auto-registration-status ENABLE
```

CA 인증서를 등록할 때 `autoRegistrationStatus`를 활성화하려면 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html) 명령을 사용합니다.

```
aws iot register-ca-certificate \
--allow-auto-registration  \
--ca-certificate file://root_CA_cert_filename.pem \
--verification-cert file://verification_cert_filename.pem
```

[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) 명령을 사용하여 CA 인증서의 상태를 확인합니다.

## 자동 등록을 위해 클라이언트에 의한 첫 번째 연결 구성
<a name="configure-auto-reg-first-connect"></a>

클라이언트가 처음으로 AWS IoT 에 연결하려고 하면 전송 계층 보안(TLS) 핸드셰이크 중에 CA 인증서로 서명된 클라이언트 인증서가 클라이언트에 있어야 합니다.

클라이언트가 연결되면 [AWS IoT 클라이언트 인증서 생성](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-create.html) 또는 [자체 클라이언트 인증서 생성](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html)에서 생성한 클라이언트 인증서를 AWS IoT사용합니다.는 CA 인증서를 등록된 CA 인증서로 AWS IoT 인식하고, 클라이언트 인증서를 등록하고, 상태를 로 설정합니다`PENDING_ACTIVATION`. 이는 클라이언트 인증서가 자동으로 등록되었고 활성화를 기다리는 중임을 의미합니다. 클라이언트 인증서를 사용하여 AWS IoT에 연결하려면 먼저 클라이언트 인증서가 `ACTIVE` 상태여야 합니다. 클라이언트 인증서 활성화에 대한 자세한 내용은 [클라이언트 인증서 활성화 또는 비활성화](activate-or-deactivate-device-cert.md) 섹션을 참조하세요.

**참고**  
디바이스의 첫 번째 연결에서 전체 신뢰 체인을 보낼 필요 없이 JITR( AWS IoT Core just-in-time Registration) 기능을 사용하여 디바이스를 프로비저닝할 수 있습니다 AWS IoT Core. CA 인증서를 제시하는 것은 선택 사항이지만 디바이스가 연결할 때 [서버 이름 표시(SNI)](https://datatracker.ietf.org/doc/html/rfc3546#section-3.1) 확장을 전송해야 합니다.

가 인증서를 AWS IoT 자동으로 등록하거나 클라이언트가 `PENDING_ACTIVATION` 상태의 인증서를 제시하면는 다음 MQTT 주제에 메시지를 AWS IoT 게시합니다.

`$aws/events/certificates/registered/caCertificateId`

여기서 `caCertificateId`는 디바이스 인증서를 발행한 CA 인증서의 ID입니다.

이 주제에 게시된 메시지는 구조가 다음과 같습니다.

```
{
        "certificateId": "certificateId",
        "caCertificateId": "caCertificateId",
        "timestamp": timestamp,
        "certificateStatus": "PENDING_ACTIVATION",
        "awsAccountId": "awsAccountId",
        "certificateRegistrationTimestamp": "certificateRegistrationTimestamp"
}
```

이 주제를 수신 대기하고 일부 작업을 수행하는 규칙을 생성할 수 있습니다. 클라이언트 인증서가 인증서 취소 목록(CRL)에 포함되지 않음을 확인하고, 인증서를 활성화하고, 정책을 생성하여 인증서에 연결하는 Lambda 규칙을 생성하는 것이 좋습니다. 이 정책은 클라이언트가 어떤 리소스에 액세스할 수 있는지를 결정합니다. 생성 중인 정책에 연결되어 있는 디바이스의 클라이언트 ID가 필요한 경우, 규칙의 clientid() 함수를 사용하여 클라이언트 ID를 검색할 수 있습니다. 규칙 정의 예제는 다음과 같습니다.

```
SELECT *,
   clientid() as clientid
from $aws/events/certificates/registered/caCertificateId
```

이 예제에서 규칙은 JITR 주제 `$aws/events/certificates/registered/caCertificateID`를 구독하고 clientid() 함수를 사용하여 클라이언트 ID를 검색합니다. 그런 다음 규칙은 클라이언트 ID를 JITR 페이로드에 추가합니다. 규칙의 clientid() 함수에 대한 자세한 내용은 [clientid()](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-clientid)를 참조하세요.

`$aws/events/certificates/registered/caCertificateID` 주제를 수신 대기하고 이러한 작업을 수행하는 Lambda 규칙을 생성하는 방법에 대한 자세한 내용은[Just-in-Time Registration of Device Certificates on AWS IoT](https://aws.amazon.com/blogs/iot/just-in-time-registration-of-device-certificates-on-aws-iot/)을 참조하세요.

클라이언트 인증서의 자동 등록 중에 오류 또는 예외가 발생하면는 CloudWatch Logs의 로그에 이벤트 또는 메시지를 AWS IoT 전송합니다. 계정에 대한 로그 설정에 대한 자세한 내용은 [Amazon CloudWatch 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/)를 참조하세요.

# 클라이언트 인증서 관리
<a name="manage-device-cert"></a>

AWS IoT 는 클라이언트 인증서를 관리할 수 있는 기능을 제공합니다.

**Topics**
+ [클라이언트 인증서 활성화 또는 비활성화](activate-or-deactivate-device-cert.md)
+ [클라이언트 인증서에 사물 또는 정책 연결](attach-to-cert.md)
+ [클라이언트 인증서 취소](revoke-ca-cert.md)
+ [인증서를 다른 계정으로 이전합니다.](transfer-cert.md)

# 클라이언트 인증서 활성화 또는 비활성화
<a name="activate-or-deactivate-device-cert"></a>

AWS IoT 는 연결을 인증할 때 클라이언트 인증서가 활성 상태인지 확인합니다.

클라이언트 인증서를 활성화하지 않은 상태에서 생성하고 등록할 수 있으므로 사용할 때까지 클라이언트 인증서를 사용할 수 없습니다. 활성 클라이언트 인증서를 비활성화하여 일시적으로 비활성화할 수도 있습니다. 마지막으로 클라이언트 인증서를 취소하여 나중에 사용할 수 없도록 할 수 있습니다.

## 클라이언트 인증서 활성화(콘솔)
<a name="activate-device-cert-console"></a>

**AWS IoT 콘솔을 사용하여 클라이언트 인증서를 활성화하려면**

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

1. 왼쪽 탐색 창에서 **보안(Secure)**을 선택한 후 **인증서(Certificates)**를 선택합니다.

1. 인증서 목록에서 활성화할 인증서를 찾은 다음 줄임표 아이콘을 사용하여 옵션 메뉴를 엽니다.

1. 옵션 메뉴에서 **활성화**를 선택합니다.

인증서는 인증서 목록에 **활성**으로 표시되어야 합니다.

## 클라이언트 인증서 비활성화(콘솔)
<a name="deactivate-device-cert-console"></a>

**AWS IoT 콘솔을 사용하여 클라이언트 인증서를 비활성화하려면**

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

1. 왼쪽 탐색 창에서 **보안(Secure)**을 선택한 후 **인증서(Certificates)**를 선택합니다.

1. 인증서 목록에서 비활성화할 인증서를 찾은 다음 줄임표 아이콘을 사용하여 옵션 메뉴를 엽니다.

1. 옵션 메뉴에서 **비활성화**를 선택합니다.

인증서는 인증서 목록에 **비활성**으로 표시되어야 합니다.

## 클라이언트 인증서 활성화(CLI)
<a name="activate-device-cert-cli"></a>

는 인증서를 활성화하는 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) 명령을 AWS CLI 제공합니다.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status ACTIVE
```

명령이 성공하면 인증서가 `ACTIVE` 상태가 됩니다. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html)를 실행하여 인증서의 상태를 확인합니다.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

## 클라이언트 인증서 비활성화(CLI)
<a name="deactivate-device-cert-cli"></a>

는 인증서를 비활성화하는 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) 명령을 AWS CLI 제공합니다.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

명령이 성공하면 인증서가 `INACTIVE` 상태가 됩니다. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html)를 실행하여 인증서의 상태를 확인합니다.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# 클라이언트 인증서에 사물 또는 정책 연결
<a name="attach-to-cert"></a>

 AWS IoT 사물과 별도로 인증서를 생성하고 등록하면 AWS IoT 작업을 승인하는 정책이 없으며 AWS IoT 사물 객체와도 연결되지 않습니다. 이 섹션에서는 이러한 관계를 등록된 인증서에 추가하는 방법에 대해 설명합니다.

**중요**  
이러한 절차를 완료하려면 인증서에 연결할 사물이나 정책을 이미 생성했어야 합니다.

인증서는 연결할 수 AWS IoT 있도록를 사용하여 디바이스를 인증합니다. 인증서를 사물 리소스에 연결하면 디바이스와 (인증서를 통해) 리소스 간의 관계가 설정됩니다. 디바이스가 메시지를 연결하고 게시할 수 있도록 허용하는 등의 AWS IoT 작업을 수행하도록 디바이스에 권한을 부여하려면 디바이스의 인증서에 적절한 정책을 연결해야 합니다.

## 클라이언트 인증서에 사물 연결(콘솔)
<a name="attach-to-cert-thing-console"></a>

이 절차를 완료하려면 사물 객체의 이름이 필요합니다.

**등록된 인증서에 사물 객체를 연결하려면**

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

1. 왼쪽 탐색 창에서 **보안(Secure)**을 선택한 후 **인증서(Certificates)**를 선택합니다.

1. 인증서 목록에서 정책을 연결할 인증서를 찾고 줄임표 아이콘을 선택하여 인증서의 옵션 메뉴를 연 다음 **사물 연결**을 선택합니다.

1. 팝업에서 인증서에 연결할 사물의 이름을 찾아 해당 확인란을 선택한 다음 **연결**을 선택합니다.

이제 사물 객체가 인증서의 세부 정보 페이지에 있는 사물 목록에 나타나야 합니다.

## 클라이언트 인증서에 정책 연결(콘솔)
<a name="attach-to-cert-policy-console"></a>

이 절차를 완료하려면 정책 객체의 이름이 필요합니다.

**등록된 인증서에 정책 객체를 연결하려면**

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

1. 왼쪽 탐색 창에서 **보안(Secure)**을 선택한 후 **인증서(Certificates)**를 선택합니다.

1. 인증서 목록에서 정책을 연결할 인증서를 찾고 줄임표 아이콘을 선택하여 인증서의 옵션 메뉴를 연 다음 **정책 연결**을 선택합니다.

1. 팝업에서 인증서에 연결할 정책의 이름을 찾아 해당 확인란을 선택한 다음 **연결**을 선택합니다.

이제 정책 객체가 인증서의 세부 정보 페이지에 있는 정책 목록에 나타납니다.

## 클라이언트 인증서에 사물 연결(CLI)
<a name="attach-to-cert-thing-cli"></a>

는 사물 객체를 인증서에 연결하는 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html) 명령을 AWS CLI 제공합니다.

```
aws iot attach-thing-principal \
    --principal certificateArn \
    --thing-name thingName
```

## 클라이언트 인증서에 정책 연결(CLI)
<a name="attach-to-cert-policy-cli"></a>

는 인증서에 정책 객체를 연결하는 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html) 명령을 AWS CLI 제공합니다.

```
aws iot attach-policy \
    --target certificateArn \
    --policy-name policyName
```

# 클라이언트 인증서 취소
<a name="revoke-ca-cert"></a>

등록된 클라이언트 인증서에서 의심스러운 활동이 감지되는 경우 다시 사용할 수 없도록 클라이언트 인증서를 취소할 수 있습니다.

**참고**  
인증서가 취소되면 상태를 변경할 수 없습니다. 즉, 인증서 상태를 `Active` 또는 다른 상태로 변경할 수 없습니다.

## 클라이언트 인증서 취소(콘솔)
<a name="revoke-device-cert-console"></a>

**AWS IoT 콘솔을 사용하여 클라이언트 인증서를 취소하려면**

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

1. 왼쪽 탐색 창에서 **보안(Secure)**을 선택한 후 **인증서(Certificates)**를 선택합니다.

1. 인증서 목록에서 취소할 인증서를 찾은 다음 줄임표 아이콘을 사용하여 옵션 메뉴를 엽니다.

1. 옵션 메뉴에서 **취소**를 선택합니다.

인증서가 성공적으로 취소되면 인증서 목록에 **취소됨**으로 표시됩니다.

## 클라이언트 인증서(CLI) 취소
<a name="revoke-device-cert-cli"></a>

는 인증서를 취소하는 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) 명령을 AWS CLI 제공합니다.

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status REVOKED
```

명령이 성공하면 인증서가 `REVOKED` 상태가 됩니다. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html)를 실행하여 인증서의 상태를 확인합니다.

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# 인증서를 다른 계정으로 이전합니다.
<a name="transfer-cert"></a>

하나에 속하는 X.509 인증서는 다른 인증서로 전송할 AWS 계정 수 있습니다 AWS 계정.

**X.509 인증서를 한 인증서에서 AWS 계정 다른 인증서로 전송하려면**

1. [인증서 전송 시작](#transfer-cert-init)

   전송을 시작하기 전에 인증서를 비활성화하고 모든 정책과 사물에서 분리해야 합니다.

1. [인증서 전송 수락 또는 거부](#transfer-cert-accept)

   수신 계정은 전송된 인증서를 명시적으로 수락하거나 거부해야 합니다. 수신 계정에서 인증서를 수락한 후에는 사용하기 전에 인증서를 활성화해야 합니다.

1. [인증서 전송 취소](#transfer-cert-cancel)

   인증서가 수락되지 않은 경우 원래 계정에서 전송을 취소할 수 있습니다.

## 인증서 전송 시작
<a name="transfer-cert-init"></a>

[AWS IoT 콘솔](https://console.aws.amazon.com/iot/home) 또는를 사용하여 인증서를 다른 AWS 계정 로 전송하기 시작할 수 있습니다 AWS CLI.

### 인증서 전송 시작(콘솔)
<a name="transfer-cert-init-console"></a>

이 절차를 완료하려면 전송할 인증서의 ID가 필요합니다.

전송할 인증서가 있는 계정에서 이 절차를 수행하세요.

**인증서를 다른 로 전송하기 시작하려면 AWS 계정**

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

1. 왼쪽 탐색 창에서 **보안(Secure)**을 선택한 후 **인증서(Certificates)**를 선택합니다.

   전송하려는 **활성 상태** 또는 **비활성** 상태의 인증서를 선택하고 세부 정보 페이지를 엽니다.

1. 인증서의 **세부 정보** 페이지의 **작업** 메뉴에서 **비활성화** 옵션을 사용할 수 있는 경우 **비활성화** 옵션을 사용하여 인증서를 비활성화할 수 있습니다.

1. 인증서의 **세부 정보** 페이지의 왼쪽 메뉴에서 **정책**을 선택합니다.

1. 인증서의 **정책** 페이지에서 인증서에 연결된 정책이 있는 경우 정책의 옵션 메뉴를 열고 **분리**를 선택하여 각 정책을 분리합니다.

   계속하기 전에 인증서에는 정책이 연결되어 있으면 안 됩니다.

1. 인증서의 **정책** 페이지의 왼쪽 메뉴에서 **사물**을 선택합니다.

1. 인증서의 **사물** 페이지에서 인증서에 연결된 사물이 있는 경우 사물의 옵션 메뉴를 열고 **분리**를 선택하여 각 사물을 분리합니다.

   계속하기 전에 인증서에는 사물이 연결되어 있으면 안 됩니다.

1. 인증서의 **사물** 페이지의 왼쪽 메뉴에서 **세부 정보**를 선택합니다.

1. 인증서의 **세부 정보** 페이지의 **작업** 메뉴에서 **전송 시작**을 선택하고 **전송 시작** 대화 상자를 엽니다.

1. **전송 시작** 대화 상자에서 인증서를 수신할 계정의 AWS 계정 번호와 선택적 단축 메시지를 입력합니다.

1. **전송 시작**을 선택하여 인증서를 전송합니다.

콘솔에 전송의 성공 또는 실패를 나타내는 메시지가 표시됩니다. 전송이 시작된 경우 인증서의 상태가 **전송됨**으로 업데이트됩니다.

### 인증서 전송 시작(CLI)
<a name="transfer-cert-init-cli"></a>

이 절차를 완료하려면 전송하려는 인증서의 *certificateId* 및 *certificateArn*이 필요합니다.

전송할 인증서가 있는 계정에서 이 절차를 수행하세요.

**인증서를 다른 AWS 계정으로 이전하기 시작하려면**

1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) 명령을 사용하여 인증서를 비활성화합니다.

   ```
   aws iot update-certificate --certificate-id certificateId --new-status INACTIVE
   ```

1. 모든 정책을 분리합니다.

   1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html) 명령을 사용하여 인증서에 연결되어 있는 정책을 나열합니다.

      ```
      aws iot list-attached-policies --target certificateArn
      ```

   1. 연결된 각 정책에 대해 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html) 명령을 사용하여 정책을 분리합니다.

      ```
      aws iot detach-policy --target certificateArn --policy-name policy-name
      ```

1. 모든 사물을 분리합니다.

   1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html) 명령을 사용하여 인증서에 연결되어 있는 사물을 나열합니다.

      ```
      aws iot list-principal-things --principal certificateArn
      ```

   1. 연결된 각 사물에 대해 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html) 명령을 사용하여 사물을 분리합니다.

      ```
      aws iot detach-thing-principal --principal certificateArn --thing-name thing-name
      ```

1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html) 명령을 사용하여 인증서 전송을 시작합니다.

   ```
   aws iot transfer-certificate --certificate-id certificateId --target-aws-account account-id
   ```

## 인증서 전송 수락 또는 거부
<a name="transfer-cert-accept"></a>

[AWS IoT 콘솔](https://console.aws.amazon.com/iot/home) 또는를 사용하여 다른에서 전송 AWS 계정 AWS 계정 된 인증서를 수락하거나 거부할 수 있습니다 AWS CLI.

### 인증서 전송 수락 또는 거부(콘솔)
<a name="transfer-cert-accept-console"></a>

이 절차를 완료하려면 계정으로 전송한 인증서의 ID가 필요합니다.

전송된 인증서를 수신하는 계정에서 이 절차를 수행하세요.

**로 전송된 인증서를 수락하거나 거부하려면 AWS 계정**

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

1. 왼쪽 탐색 창에서 **보안(Secure)**을 선택한 후 **인증서(Certificates)**를 선택합니다.

   수락 또는 거부하려는 **전송 대기 중** 상태의 인증서를 선택하고 세부 정보 페이지를 엽니다.

1. 인증서의 **세부 정보** 페이지의 **작업** 메뉴에서
   + 인증서를 수락하려면 **전송 수락**을 선택합니다.
   + 인증서를 수락하지 않으려면 **전송 거부**를 선택합니다.

### 인증서 전송 수락 또는 거부(CLI)
<a name="transfer-cert-accept-cli"></a>

이 절차를 완료하려면 수락 또는 거부하려는 인증서 전송의 *certificateId*가 필요합니다.

전송된 인증서를 수신하는 계정에서 이 절차를 수행하세요.

**로 전송된 인증서를 수락하거나 거부하려면 AWS 계정**

1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html) 명령을 사용하여 인증서를 수락합니다.

   ```
   aws iot accept-certificate-transfer --certificate-id certificateId
   ```

1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html) 명령을 사용하여 인증서를 거부합니다.

   ```
   aws iot reject-certificate-transfer --certificate-id certificateId
   ```

## 인증서 전송 취소
<a name="transfer-cert-cancel"></a>

[AWS IoT 콘솔](https://console.aws.amazon.com/iot/home) 또는 AWS CLI을(를) 사용하여 수락하기 전에 인증서 전송을 취소할 수 있습니다.

### 인증서 전송 취소(콘솔)
<a name="transfer-cert-cancel-console"></a>

이 절차를 완료하려면 취소하려는 인증서 전송의 ID가 필요합니다.

인증서 전송을 시작한 계정에서 이 절차를 수행하세요.

**인증서 전송을 취소하려면**

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

1. 왼쪽 탐색 창에서 **보안(Secure)**을 선택한 후 **인증서(Certificates)**를 선택합니다.

   취소하려는 **전송됨** 상태의 인증서를 선택하고 옵션 메뉴를 엽니다.

1. 인증서의 옵션 메뉴에서 **전송 취소** 옵션을 선택하여 인증서 전송을 취소합니다.
**중요**  
**전송 취소** 옵션을 **취소** 옵션과 혼동하지 않도록 주의하세요.  
**전송 취소** 옵션은 인증서 전송을 취소하고 **취소** 옵션은 인증서를 불가역적으로 사용 불가능하게 만듭니다. AWS IoT.

### 인증서 전송 취소(CLI)
<a name="transfer-cert-cancel-cli"></a>

이 절차를 완료하려면 취소하려는 인증서 전송의 *certificateId*가 필요합니다.

인증서 전송을 시작한 계정에서 이 절차를 수행하세요.

[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html) 명령을 사용하여 인증서 전송을 취소합니다.

```
aws iot cancel-certificate-transfer --certificate-id certificateId
```

# 사용자 지정 클라이언트 인증서 검증
<a name="customize-client-auth"></a>

AWS IoT Core 는 X.509 클라이언트 인증서에 대한 사용자 지정 클라이언트 인증서 검증을 지원하여 클라이언트 인증 관리를 개선합니다. 이 인증서 검증 방법은 사전 인증 인증서 검사라고도 하며, 이 검사에서는 자체 기준(Lambda 함수에 정의)을 기반으로 클라이언트 인증서를 평가하고 클라이언트 인증서 또는 인증서의 서명 인증 기관(CA) 인증서를 취소하여 클라이언트가 AWS IoT Core에 연결되지 않도록 합니다. 예를 들어 [온라인 인증서 상태 프로토콜(OCSP)](https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol) 또는 [인증서 해지 목록(CRL)](https://en.wikipedia.org/wiki/Certificate_revocation_list) 엔드포인트를 지원하는 검증 기관과 비교하여 인증서의 상태를 검증하고 취소된 인증서가 있는 클라이언트에 대한 연결을 방지하는 자체 인증서 해지 검사를 생성할 수 있습니다. 클라이언트 인증서를 평가하는 데 사용되는 기준은 Lambda 함수(사전 인증 Lambda라고도 함)에 정의됩니다. 도메인 구성에서 엔드포인트 세트를 사용해야 하며 [인증 유형](protocols.md#connection-protocol-auth-mode)은 X.509 인증서여야 합니다. 또한 클라이언트는 연결할 때 [서버 이름 표시(SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) 확장을 제공해야 합니다 AWS IoT Core.

**참고**  
이 기능은 AWS GovCloud (US) 리전에서 지원되지 않습니다.

**Topics**
+ [1단계:에 X.509 클라이언트 인증서 등록 AWS IoT Core](#client-auth-cert-verification)
+ [2단계: Lambda 함수 생성](#customize-client-auth-lambda)
+ [3단계: Lambda 함수 AWS IoT 호출 권한 부여](#customize-client-configuration-grant-permission)
+ [4단계: 도메인에 대한 인증 구성 설정](#customize-client-configuration)

## 1단계:에 X.509 클라이언트 인증서 등록 AWS IoT Core
<a name="client-auth-cert-verification"></a>

아직 등록하지 않은 경우에 [X.509 클라이언트 인증서를](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) 등록하고 활성화합니다 AWS IoT Core. 그렇지 않은 경우 다음 단계로 건너뜁니다.

에 클라이언트 인증서를 등록하고 활성화하려면 다음 단계를 AWS IoT Core따릅니다.

1. [를 사용하여 직접 클라이언트 인증서를 생성하는 AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-create.html) 경우. 이러한 클라이언트 인증서는에 자동으로 등록됩니다 AWS IoT Core.

1. [자체 클라이언트 인증서를 생성하는](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-your-own.html) 경우 [다음 지침에 따라 인증서를 등록합니다 AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/register-device-cert.html).

1. 클라이언트 인증서를 활성화하려면 [다음 지침](https://docs.aws.amazon.com//iot/latest/developerguide/activate-or-deactivate-device-cert.html)을 따르세요.

## 2단계: Lambda 함수 생성
<a name="customize-client-auth-lambda"></a>

인증서 확인을 수행하고 구성된 엔드포인트에 대한 모든 클라이언트 연결 시도에 대해 호출되는 Lambda 함수를 생성해야 합니다. 이 Lambda 함수를 생성할 때는 [첫 번째 Lambda 함수 생성](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html)의 일반 지침을 따릅니다. 또한 Lambda 함수가 다음과 같이 예상 요청 및 응답 형식을 준수하는지 확인합니다.

**Lambda 함수 이벤트 예제**

```
{
	"connectionMetadata": {
		"id": "string"
	},
	"principalId": "string",
	"serverName": "string",
	"clientCertificateChain": [
		"string",
		"string"
	]
}
```

`connectionMetadata`  
클라이언트의 AWS IoT Core에 대한 연결과 관련된 메타데이터 또는 추가 정보입니다.

`principalId`  
TLS 연결에서 클라이언트와 연결된 위탁자 식별자입니다.

`serverName`  
[서버 이름 표시(SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) 호스트 이름 스트링입니다. AWS IoT Core 는 디바이스가 [SNI 확장](https://www.rfc-editor.org/rfc/rfc3546#section-3.1)을 Transport Layer Security (TLS) 프로토콜로 전송하고 `host_name` 필드에 전체 엔드포인트 주소를 제공하도록 요구합니다.

`clientCertificateChain`  
클라이언트의 X.509 인증서 체인을 나타내는 문자열 배열입니다.

**Lambda 함수 응답 예제**

```
{
	"isAuthenticated": "boolean"
}
```

`isAuthenticated`  
요청 인증 여부를 나타내는 부울 값입니다.

**참고**  
Lambda 응답에서 추가 인증 및 권한 부여를 진행하려면 `isAuthenticated`가 반드시 `true`여야 합니다. 그렇지 않으면 IoT 클라이언트 인증서를 비활성화하고 추가 인증 및 권한 부여를 위해 X.509 클라이언트 인증서를 사용한 사용자 지정 인증을 차단할 수 있습니다.

## 3단계: Lambda 함수 AWS IoT 호출 권한 부여
<a name="customize-client-configuration-grant-permission"></a>

Lambda 함수를 생성한 후 [add-permission](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html) CLI 명령을 사용하여 AWS IoT 에 호출 권한을 부여해야 합니다. 이 Lambda 함수는 구성된 엔드포인트에 연결할 때마다 간접적으로 호출됩니다. 자세한 내용은 [Lambda 함수 호출 권한 부여 AWS IoT 를 참조하세요](custom-auth-authorize.md).

## 4단계: 도메인에 대한 인증 구성 설정
<a name="customize-client-configuration"></a>

다음 섹션에서는 AWS CLI를 사용하여 사용자 지정 도메인에 대한 인증 구성을 설정하는 방법을 설명합니다.

### 도메인에 대한 클라이언트 인증서 구성 설정(CLI)
<a name="customize-client-auth-cli"></a>

도메인 구성이 없는 경우 [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html) CLI 명령을 사용하여 생성합니다. 도메인 구성이 이미 있는 경우 [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html) CLI 명령을 사용하여 도메인에 대한 클라이언트 인증서 구성을 업데이트합니다. 이전 단계에서 생성한 Lambda 함수의 ARN을 추가해야 합니다.

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config 'clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config '{"clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

`domain-configuration-name`  
도메인 구성의 이름입니다.

`authentication-type`  
도메인 구성의 인증 유형입니다. 자세한 내용은 [인증 유형 선택](protocols.md#connection-protocol-auth-mode)을 참조하세요.

`application-protocol`  
 AWS IoT Core와 통신하는 데 사용하는 디바이스의 애플리케이션 프로토콜입니다. 자세한 내용은 [애플리케이션 프로토콜 선택](protocols.md#protocol-selection)을 참조하세요.

`client-certificate-config`  
도메인의 클라이언트 인증 구성을 지정하는 객체입니다.

`clientCertificateCallbackArn`  
새 연결이 설정될 때 TLS 계층에서 AWS IoT 호출하는 Lambda 함수의 Amazon 리소스 이름(ARN)입니다. 사용자 지정 클라이언트 인증서 검증을 수행하도록 클라이언트 인증을 사용자 지정하려면 이전 단계에서 생성한 Lambda 함수의 ARN을 추가해야 합니다.

자세한 내용은 *AWS IoT API 참조*의 [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html) 및 [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)을 참조하세요. 도메인 구성에 대한 자세한 내용은 [Domain configurations](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html)를 참조하세요.

# IAM 사용자, 그룹 및 역할
<a name="iam-users-groups-roles"></a>

IAM 사용자, 그룹 및 역할은 AWS에서 자격 증명 및 인증을 관리하기 위한 표준 메커니즘입니다. SDK AWS 및를 사용하여 AWS IoT HTTP 인터페이스에 연결할 수 있습니다 AWS CLI.

또한 IAM 역할을 사용하면 AWS IoT 가 사용자를 대신하여 계정의 다른 AWS 리소스에 액세스할 수 있습니다. 예를 들어 디바이스가 DynamoDB 테이블에 상태를 게시하도록 하려면 IAM 역할을 통해가 Amazon DynamoDB와 상호 작용 AWS IoT 할 수 있습니다. 자세한 내용은 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)을 참조하세요.

HTTP를 통한 메시지 브로커 연결의 경우 서명 버전 4 서명 프로세스를 사용하여 사용자, 그룹 및 역할을 AWS IoT 인증합니다. 자세한 내용은 [AWS API 요청 서명을 참조하세요](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html).

에서 AWS 서명 버전 4를 사용하는 경우 AWS IoT클라이언트는 TLS 구현에서 다음을 지원해야 합니다.
+ TLS 1.2
+ SHA-256 RSA 인증서 서명 검증
+ TLS 암호 그룹 지원 섹션에서 암호 그룹 중 하나

자세한 내용은 [에 대한 자격 증명 및 액세스 관리 AWS IoT](security-iam.md) 단원을 참조하세요.

# Amazon Cognito 자격 증명
<a name="cognito-identities"></a>

Amazon Cognito 자격 증명을 사용하면 모바일 및 웹 애플리케이션에서 사용할 수 있는 제한된 임시 권한 AWS 자격 증명을 생성할 수 있습니다. Amazon Cognito 자격 증명을 사용하는 경우, 사용자의 고유 자격 증명을 생성하는 ID 풀을 생성하여 Login with Amazon, Facebook 및 Google과 같은 자격 증명 공급자를 사용하여 인증하는 ID 풀을 생성합니다. 자체 개발자 인증 자격 증명과 함께 Amazon Cognito 자격 증명을 사용할 수도 있습니다. 자세한 내용은 [Amazon Cognito 자격 증명](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)을 참조하세요.

Amazon Cognito 자격 증명을 사용하려면 IAM 역할과 연결된 Amazon Cognito ID 풀을 정의합니다. IAM 역할은 ID 풀의 ID에 서비스 호출 AWS 과 같은 AWS 리소스에 액세스할 수 있는 권한을 부여하는 IAM 정책과 연결됩니다.

Amazon Cognito 자격 증명은 인증되지 않은 자격 증명 및 인증된 자격 증명을 생성합니다. 인증되지 않은 자격 증명은 로그인하지 않고 앱을 사용하려는 모바일 또는 웹 애플리케이션의 게스트 사용자에게 사용됩니다. 인증되지 않은 사용자에게는 자격 증명 풀과 연결된 IAM 정책에 지정된 권한만 부여됩니다.

인증된 자격 증명을 사용하는 경우 자격 증명 풀에 연결된 IAM 정책 외에도 Amazon Cognito 자격 증명에 AWS IoT 정책을 연결해야 합니다. AWS IoT 정책을 연결하려면 [AttachPolicy](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachPolicy.html) API를 사용하고 AWS IoT 애플리케이션의 개별 사용자에게 권한을 부여합니다. AWS IoT 정책을 사용하여 특정 고객과 디바이스에 세분화된 권한을 할당할 수 있습니다.

인증된 사용자와 인증되지 않은 사용자의 자격 증명 유형은 서로 다릅니다. Amazon Cognito 자격 증명에 AWS IoT 정책을 연결하지 않으면 인증된 사용자가에서 권한 부여에 실패 AWS IoT 하고 AWS IoT 리소스 및 작업에 액세스할 수 없습니다. Amazon Cognito 자격 증명에 대한 정책을 생성하는 방법에 대한 자세한 내용은 [게시/구독 정책 예제](pub-sub-policy.md) 및 [Amazon Cognito 자격 증명으로 권한 부여](cog-iot-policies.md) 섹션을 참조하세요.

![\[Amazon Cognito 자격 증명을 사용하여 디바이스에 액세스하는 앱입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/device-cognito.png)


# 사용자 지정 인증 및 권한 부여
<a name="custom-authentication"></a>

 AWS IoT Core 를 사용하면 사용자 지정 권한 부여자를 정의하여 자체 클라이언트 인증 및 권한 부여를 관리할 수 있습니다. 이는에서 AWS IoT Core 기본적으로 지원하는 인증 메커니즘 이외의 인증 메커니즘을 사용해야 하는 경우에 유용합니다. (기본적으로 지원되는 메커니즘에 대한 자세한 내용은 [클라이언트 인증](client-authentication.md) 단원을 참조하세요).  

 예를 들어 필드의 기존 디바이스를 로 마이그레이션 AWS IoT Core 하고 이러한 디바이스가 사용자 지정 보유자 토큰 또는 MQTT 사용자 이름과 암호를 사용하여 인증하는 경우 새 자격 증명을 프로비저닝 AWS IoT Core 하지 않고도 로 마이그레이션할 수 있습니다. 가 AWS IoT Core 지원하는 모든 통신 프로토콜에서 사용자 지정 인증을 사용할 수 있습니다. AWS IoT Core 이(가) 지원하는 프로토콜 및 포트에 대한 자세한 내용은 [디바이스 통신 프로토콜](protocols.md) 단원을 참조하세요.

**Topics**
+ [사용자 지정 인증 워크플로 이해](custom-authorizer.md)
+ [사용자 지정 권한 부여자 생성 및 관리(CLI)](config-custom-auth.md)
+ [X.509 클라이언트 인증서를 사용한 사용자 지정 인증](custom-auth-509cert.md)
+ [사용자 지정 인증을 사용하여 AWS IoT Core 에 연결](custom-auth.md)
+ [Lambda 권한 부여자 문제 해결](custom-auth-troubleshooting.md)

# 사용자 지정 인증 워크플로 이해
<a name="custom-authorizer"></a>

사용자 지정 인증은 [권한 부여자 리소스](https://docs.aws.amazon.com/iot/latest/apireference/API_AuthorizerDescription.html)를 사용하여 클라이언트를 인증하고 권한을 부여하는 방법을 정의할 수 있도록 합니다.   각 권한 부여자에는 고객 관리형 Lambda 함수에 대한 참조, 디바이스 자격 증명을 검증하기 위한 공개 키 옵션 및 추가 구성 정보가 포함되어 있습니다. 다음 다이어그램은 AWS IoT Core에서 사용자 지정 인증에 대한 권한 부여 워크플로를 보여 줍니다.

![\[AWS IoT Core에서 사용자 지정 인증을 위한 사용자 지정 권한 부여 워크플로입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/custom-authentication.png)


## AWS IoT Core 사용자 지정 인증 및 권한 부여 워크플로
<a name="custom-authentication-workflow"></a>

다음 목록에서는 사용자 지정 인증 및 권한 부여 워크플로의 각 단계를 설명합니다.

1. 디바이스는 지원되는 중 하나를 사용하여 고객의 AWS IoT Core 데이터 엔드포인트에 연결합니다[디바이스 통신 프로토콜](protocols.md). 디바이스는 요청의 헤더 필드 또는 쿼리 파라미터(HTTP Publish 또는 WebSockets 프로토콜을 통한 MQTT의 경우) 중 하나에서, 또는 MQTT CONNECT 메시지의 사용자 이름 및 암호 필드(MQTT 및 WebSockets 프로토콜을 통한 MQTT의 경우)에서 자격 증명을 전달합니다.

1. AWS IoT Core 는 다음 두 가지 조건 중 하나를 확인합니다.
   + 수신되는 요청이 권한 부여자를 지정합니다.
   + 요청을 수신하는 AWS IoT Core 데이터 엔드포인트에는 기본 권한 부여자가 구성되어 있습니다.

   가 이러한 방법 AWS IoT Core 중 하나로 권한 부여자를 AWS IoT Core 찾으면는 권한 부여자와 연결된 Lambda 함수를 트리거합니다.

1.  (선택 사항) 토큰 서명을 활성화한 경우는 Lambda 함수를 트리거하기 전에 권한 부여자에 저장된 퍼블릭 키를 사용하여 요청 서명을 AWS IoT Core 확인합니다. 유효성 검사에 실패하면 AWS IoT Core 이(가) Lambda 함수를 호출하지 않고 요청을 중지합니다.  

1. Lambda 함수는 요청에서 자격 증명 및 연결 메타데이터를 수신하고 인증 결정을 내립니다.

1. Lambda 함수는 인증 결정 결과와 연결에서 허용되는 작업을 지정하는 AWS IoT Core 정책 문서를 반환합니다. 또한 Lambda 함수는가 Lambda 함수를 호출하여 요청의 자격 증명을 AWS IoT Core 재검증하는 빈도를 지정하는 정보도 반환합니다.

1. AWS IoT Core 는 Lambda 함수에서 수신한 정책을 기준으로 연결에 대한 활동을 평가합니다.

1. 연결이 설정되고 사용자 지정 권한 부여자 Lambda가 처음 호출되면 MQTT 작업 없이 유휴 연결에서 다음 간접 호출을 최대 5분 동안 지연할 수 있습니다. 그런 다음 후속 간접 호출은 사용자 지정 권한 부여자 Lambda의 새로 고침 간격을 따릅니다. 이 접근 방식은의 Lambda 동시성 제한을 초과할 수 있는 과도한 호출을 방지할 수 있습니다 AWS 계정.

## 스케일 아웃 고려 사항
<a name="custom-authentication-scaling"></a>

 Lambda 함수는 권한 부여자에 대한 인증 및 권한 부여를 처리하므로 동시 실행 속도와 같은 Lambda 요금 및 서비스 제한이 적용됩니다. Lambda 요금에 대한 자세한 내용은 [Lambda 요금](https://aws.amazon.com/lambda/pricing/) 단원을 참조하세요. Lambda 함수 응답에서 `refreshAfterInSeconds` 및 `disconnectAfterInSeconds` 파라미터를 조정하여 Lambda 함수의 로드를 관리할 수 있습니다. Lambda 함수 응답의 내용에 대한 자세한 내용은 [Lambda 함수 정의](custom-auth-lambda.md) 단원을 참조하세요.

**참고**  
서명을 활성화한 상태로 두면 인식할 수 없는 클라이언트가 Lambda를 과도하게 트리거하는 것을 방지할 수 있습니다. 권한 부여자의 로그인을 비활성화하기 전에 이 점을 고려하세요.

**참고**  
사용자 지정 권한 부여자에 대한 Lambda 함수 제한 시간은 5초입니다.

# 사용자 지정 권한 부여자 생성 및 관리(CLI)
<a name="config-custom-auth"></a>

AWS IoT Core 는 사용자 지정 권한 부여자를 사용하여 사용자 지정 인증 및 권한 부여 체계를 구현합니다. 사용자 지정 권한 부여자는 특정 요구 사항에 따라 규칙과 정책을 정의하고 구현할 수 있는 유연성을 제공하는 AWS IoT Core 리소스입니다. 단계별 지침에 따라 사용자 지정 권한 부여자를 생성하려면 [Tutorial: Creating a custom authorizer for AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/custom-auth-tutorial.html)를 참조하세요.

각 권한 부여자는 다음과 같은 구성 요소로 이루어집니다.
+  *이름*: 권한 부여자를 식별하는 고유한 사용자 정의 문자열입니다.
+  *ARN Lambda 함수*: 권한 부여 및 인증 논리를 구현하는 Lambda 함수의 Amazon 리소스 이름(ARN)입니다.  
+  *토큰 키 이름*: 서명 유효성 검사를 수행하기 위해 HTTP 헤더, 쿼리 파라미터 또는 MQTT CONNECT 사용자 이름에서 토큰을 추출하는 데 사용되는 키 이름입니다. 권한 부여자에서 서명이 활성화된 경우 이 값이 필요합니다.
+  *서명 비활성화 플래그(선택 사항)*: 자격 증명에서 서명 요구 사항을 사용하지 않도록 설정할지 여부를 지정하는 부울 값입니다. 이 기능은 MQTT 사용자 이름 및 암호를 사용하는 인증 스키마와 같이 자격 증명에 서명하는 것이 의미가 없는 시나리오에 유용합니다. 기본값은 `false`(으)로 설정되어 있으므로 기본적으로 서명이 활성화됩니다.
+  *토큰 서명 공개 키*: AWS IoT Core 이(가) 토큰 서명의 유효성을 검사하는 데 사용하는 퍼블릭 키입니다. 최소 길이는 2,048비트입니다. 권한 부여자에서 서명이 활성화된 경우 이 값이 필요합니다.  

Lambda는 Lambda 함수가 실행되는 횟수와 함수의 코드가 실행되는 데 걸리는 시간에 대해 요금을 청구합니다. Lambda 요금에 대한 자세한 내용은 [Lambda 요금](https://aws.amazon.com/lambda/pricing/)을 참조하세요. Lambda 함수에 대한 자세한 내용은 [Lambda 개발자 가이드](https://docs.aws.amazon.com/lambda/latest/dg/)를 참조하세요.

**참고**  
서명을 활성화한 상태로 두면 인식할 수 없는 클라이언트가 Lambda를 과도하게 트리거하는 것을 방지할 수 있습니다. 권한 부여자의 로그인을 비활성화하기 전에 이 점을 고려하세요.

**참고**  
사용자 지정 권한 부여자에 대한 Lambda 함수 제한 시간은 5초입니다.

**Topics**
+ [Lambda 함수 정의](custom-auth-lambda.md)
+ [권한 부여자 생성](custom-auth-create-authorizer.md)
+ [Lambda 함수 AWS IoT 호출 권한 부여](custom-auth-authorize.md)
+ [권한 부여자 테스트](custom-auth-testing.md)
+ [사용자 지정 권한 부여자 관리](custom-auth-manage.md)

# Lambda 함수 정의
<a name="custom-auth-lambda"></a>

 가 권한 부여자를 AWS IoT Core 호출하면 다음 JSON 객체가 포함된 이벤트와 함께 권한 부여자와 연결된 Lambda가 트리거됩니다. 예제 JSON 객체에는 가능한 모든 필드가 포함되어 있습니다. 연결 요청과 관련이 없는 필드는 포함되지 않습니다.

```
{
    "token" :"aToken",
    "signatureVerified": Boolean, // Indicates whether the device gateway has validated the signature.
    "protocols": ["tls", "http", "mqtt"], // Indicates which protocols to expect for the request.
    "protocolData": {
        "tls" : {
            "serverName": "serverName" // The server name indication (SNI) host_name string.
        },
        "http": {
            "headers": {
                "#{name}": "#{value}"
            },
            "queryString": "?#{name}=#{value}"
        },
        "mqtt": {
            "username": "myUserName",
            "password": "myPassword", // A base64-encoded string.
            "clientId": "myClientId" // Included in the event only when the device sends the value.
        }
    },
    "connectionMetadata": {
        "id": UUID // The connection ID. You can use this for logging.
    },
}
```

 Lambda 함수는 이 정보를 사용하여 들어오는 연결을 인증하고 연결에 허용되는 작업을 결정해야 합니다. 함수는 다음 값을 포함하는 응답을 전송해야 합니다.
+  `isAuthenticated`: 요청 인증 여부를 나타내는 부울 값입니다.
+  `principalId`: 사용자 지정 권한 부여 요청에서 전송되는 토큰의 식별자 역할을 하는 영숫자 문자열입니다. 값은 1\$1128자의 영숫자 문자열이어야 하며 정규식(regex) 패턴 `([a-zA-Z0-9]){1,128}`과 일치해야 합니다. 영숫자가 아닌 특수 문자는 `principalId`에서와 함께 사용할 수 없습니다 AWS IoT Core. 에 영숫자가 아닌 특수 문자가 허용되는 경우 다른 AWS 서비스에 대한 설명서를 참조하세요`principalId`.
+  `policyDocuments`: JSON 형식의 AWS IoT Core 정책 문서 목록 AWS IoT Core 정책 생성에 대한 자세한 내용은 섹션을 참조하세요[AWS IoT Core 정책](iot-policies.md). 정책 문서의 최대 수는 10개의 정책 문서입니다. 각 정책 문서는 최대 2,048자를 포함할 수 있습니다.
+  `disconnectAfterInSeconds`: AWS IoT Core 게이트웨이에 대한 연결의 최대 지속 시간(초)을 지정하는 정수입니다. 최소값은 300초이고 최대값은 86,400초입니다. 기본값은 86,400입니다.
**참고**  
`disconnectAfterInSeconds`(Lambda 함수에서 반환됨) 값은 연결이 설정될 때 설정됩니다. 후속 정책 새로 고침 Lambda 간접 호출 중에는 이 값을 수정할 수 없습니다.
+  `refreshAfterInSeconds`: 정책 새로 고침 사이의 간격을 지정하는 정수입니다. 이 간격이 경과하면 AWS IoT Core 은(는) Lambda 함수를 호출하여 정책 새로 고침을 허용합니다. 최소값은 300초이고 최대값은 86,400초입니다.

  다음 JSON 객체에는 Lambda 함수가 전송할 수 있는 응답의 예가 들어 있습니다.

 **\$1 "isAuthenticated":true, //A Boolean that determines whether client can connect. "principalId": "xxxxxxxx",  //A string that identifies the connection in logs. "disconnectAfterInSeconds": 86400,  "refreshAfterInSeconds": 300,   "policyDocuments": [       \$1         "Version": "2012-10-17",         "Statement": [            \$1               "Action": "iot:Publish",               "Effect": "Allow",               "Resource": "arn:aws:iot:us-east-1:<your\$1aws\$1account\$1id>:topic/customauthtesting"             \$1          ]        \$1     ] \$1**

 `policyDocument` 값에는 유효한 AWS IoT Core 정책 문서가 포함되어야 합니다. AWS IoT Core 정책에 대한 자세한 내용은 섹션을 참조하세요[AWS IoT Core 정책](iot-policies.md).  MQTT over TLS 및 MQTT over WebSockets 연결에서 `refreshAfterInSeconds` 필드 값에 지정된 간격 동안이 정책을 AWS IoT Core 캐시합니다. HTTP 연결의 경우 디바이스가 HTTP 지속 연결(HTTP 연결 유지 또는 HTTP 연결 재사용이라고도 함)을 사용하지 않는 한 모든 권한 부여 요청에 대해 Lambda 함수가 호출됩니다. 권한 부여자를 구성할 때 캐싱을 사용하도록 선택할 수 있습니다. 이 간격 동안는 Lambda 함수를 다시 트리거하지 않고이 캐시된 정책에 대해 설정된 연결의 작업을 AWS IoT Core 승인합니다. 사용자 지정 인증 중에 오류가 발생하면는 연결을 AWS IoT Core 종료합니다. AWS IoT Core 또한 `disconnectAfterInSeconds`파라미터에 지정된 값보다 오래 열려 있으면 연결을 종료합니다.

 다음 JavaScript에는 값이 인 MQTT Connect 메시지에서 암호를 찾고 이름이 인 클라이언트 AWS IoT Core 와 연결하고 동일한 클라이언트 이름이 포함된 주제에 `myClientName` 게시할 수 있는 권한을 부여하는 정책을 `test` 반환하는 샘플 Node.js Lambda 함수가 포함되어 있습니다. 예상된 암호를 찾지 못하면 이 두 작업을 거부하는 정책을 반환합니다.

```
// A simple Lambda function for an authorizer. It demonstrates 
// how to parse an MQTT password and generate a response.

exports.handler = function(event, context, callback) { 
    var uname = event.protocolData.mqtt.username;
    var pwd = event.protocolData.mqtt.password;
    var buff = new Buffer(pwd, 'base64');
    var passwd = buff.toString('ascii');
    switch (passwd) { 
        case 'test': 
            callback(null, generateAuthResponse(passwd, 'Allow')); 
            break;
        default: 
            callback(null, generateAuthResponse(passwd, 'Deny'));  
    }
};

// Helper function to generate the authorization response.
var generateAuthResponse = function(token, effect) { 
    var authResponse = {}; 
    authResponse.isAuthenticated = true; 
    authResponse.principalId = 'TEST123'; 
    
    var policyDocument = {}; 
    policyDocument.Version = '2012-10-17';		 	 	 
    policyDocument.Statement = []; 
    var publishStatement = {}; 
    var connectStatement = {};
    connectStatement.Action = ["iot:Connect"];
    connectStatement.Effect = effect;
    connectStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:client/myClientName"];
    publishStatement.Action = ["iot:Publish"]; 
    publishStatement.Effect = effect; 
    publishStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"]; 
    policyDocument.Statement[0] = connectStatement;
    policyDocument.Statement[1] = publishStatement; 
    authResponse.policyDocuments = [policyDocument]; 
    authResponse.disconnectAfterInSeconds = 3600; 
    authResponse.refreshAfterInSeconds = 300;
    
    return authResponse; 
}
```

 앞의 Lambda 함수는 MQTT Connect 메시지에서 `test`의 예상 암호를 수신하면 다음 JSON 값을 반환합니다. `password` 및 `principalId` 속성의 값은 MQTT Connect 메시지의 값이 됩니다.

```
{
  "password": "password",
  "isAuthenticated": true,
  "principalId": "principalId",
  "policyDocuments": [
    {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Action": "iot:Connect",
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Action": "iot:Publish",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
        },
        {
          "Action": "iot:Subscribe",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topicfilter/telemetry/${iot:ClientId}"
        },
        {
          "Action": "iot:Receive",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
        }
      ]
    }
  ],
  "disconnectAfterInSeconds": 3600,
  "refreshAfterInSeconds": 300
}
```

# 권한 부여자 생성
<a name="custom-auth-create-authorizer"></a>

 [CreateAuthorizer API](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateAuthorizer.html)를 사용하여 권한 부여자를 생성할 수 있습니다. 다음 예에서는 이 명령에 대해 설명합니다.

```
aws iot create-authorizer
--authorizer-name MyAuthorizer
--authorizer-function-arn arn:aws:lambda:us-west-2:<account_id>:function:MyAuthorizerFunction  //The ARN of the Lambda function.
[--token-key-name MyAuthorizerToken //The key used to extract the token from headers.
[--token-signing-public-keys FirstKey=
 "-----BEGIN PUBLIC KEY-----
  [...insert your public key here...] 
  -----END PUBLIC KEY-----"
[--status ACTIVE]
[--tags <value>]
[--signing-disabled | --no-signing-disabled]
```

`signing-disabled` 파라미터를 사용하여 권한 부여자를 호출할 때마다 서명 유효성 검사를 옵트아웃합니다. 필요한 경우가 아니면 서명을 비활성화하지 않는 것이 좋습니다. 서명 유효성 검사는 알 수 없는 디바이스에서 Lambda 함수를 과도하게 호출하지 않도록 보호합니다. 생성한 후에는 권한 부여자의 `signing-disabled` 상태를 업데이트 할 수 없습니다. 이 동작을 변경하려면 `signing-disabled` 파라미터에 대해 또 다른 값의 사용자 지정 권한 부여자를 생성해야 합니다.

`tokenKeyName` 및 `tokenSigningPublicKeys` 파라미터의 값은 서명을 사용하지 않도록 설정한 경우 선택 사항입니다. 서명이 활성화된 경우 필수 값입니다.

Lambda 함수와 사용자 지정 권한 부여자를 생성한 후에는 사용자를 대신하여 함수를 호출할 수 있는 AWS IoT Core 서비스 권한을 명시적으로 부여해야 합니다. 다음 명령을 사용하여이 작업을 수행할 수 있습니다.

**참고**  
기본 IoT 엔드포인트는 Lambda 함수와 함께 사용자 지정 권한 부여자를 사용하도록 지원하지 않을 수 있습니다. 그 대신, 도메인 구성을 사용하여 새 엔드포인트를 정의한 다음, 사용자 지정 권한 부여자에 대해 해당 엔드포인트를 지정할 수 있습니다.

```
aws lambda add-permission --function-name <lambda_function_name>
--principal iot.amazonaws.com --source-arn <authorizer_arn>
--statement-id Id-123 --action "lambda:InvokeFunction"
```

# Lambda 함수 AWS IoT 호출 권한 부여
<a name="custom-auth-authorize"></a>

이 섹션에서는 방금 생성한 사용자 지정 권한 부여자 리소스에 Lambda 함수를 실행할 수 있는 권한을 부여합니다. 권한을 부여하려면 [add-permission](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html) CLI 명령을 사용할 수 있습니다.

**를 사용하여 Lambda 함수에 권한 부여 AWS CLI**

1. 값을 삽입한 후 다음 명령을 입력합니다. 참고: `statement-id` 값은 고유해야 합니다. `Id-1234`을(를) 정확한 값으로 바꿉니다. 그렇지 않으면 `ResourceConflictException` 오류가 발생할 수 있습니다.

   ```
   aws lambda add-permission  \
   --function-name "custom-auth-function" \
   --principal "iot.amazonaws.com" \
   --action "lambda:InvokeFunction" \
   --statement-id "Id-1234" \
   --source-arn authorizerArn
   ```

1. 명령이 성공하면 이 예제와 같은 권한 문이 반환됩니다. 다음 단원을 계속하여 사용자 지정 권한 부여자를 테스트할 수 있습니다.

   ```
   {
       "Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\"}}}"
   }
   ```

   명령이 성공하지 못하면 이 예제와 같은 오류가 반환됩니다. 계속하기 전에 오류를 검토하고 수정해야 합니다.

   ```
   An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer
   mission on resource: arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function
   ```

# 권한 부여자 테스트
<a name="custom-auth-testing"></a>

 [TestInvokeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_TestInvokeAuthorizer.html) API를 사용하여 권한 부여자의 호출 및 반환 값을 테스트합니다. 이 API를 사용하면 권한 부여자에서 프로토콜 메타데이터를 지정하고 서명 유효성 검사를 테스트할 수 있습니다.

다음 탭은를 사용하여 권한 부여자를 테스트 AWS CLI 하는 방법을 보여줍니다.

------
#### [ Unix-like ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER \
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------
#### [ Windows CMD ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER ^
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

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

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER `
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------

`token-signature` 파라미터의 값은 서명된 토큰입니다. 이 값을 얻는 방법을 알아보려면 [토큰에 서명하기](custom-auth.md#custom-auth-token-signature) 단원을 참조하세요.

권한 부여자가 사용자 이름과 암호를 얻은 경우 `--mqtt-context` 파라미터를 사용하여 이 정보를 전달할 수 있습니다. 다음 탭은 `TestInvokeAuthorizer` API를 사용하여 사용자 이름, 암호 및 클라이언트 이름이 포함된 JSON 객체를 사용자 지정 권한 부여자에게 전송하는 방법을 보여줍니다.

------
#### [ Unix-like ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  \
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------
#### [ Windows CMD ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  ^
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

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

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  `
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------

암호는 base64 인코딩해야 합니다. 다음 예제에서는 Unix 계열 환경에서 암호를 인코딩하는 방법을 보여 줍니다.

```
echo -n PASSWORD | base64
```

# 사용자 지정 권한 부여자 관리
<a name="custom-auth-manage"></a>

 다음 API를 사용하여 권한 부여자를 관리할 수 있습니다.
+ [ListAuthorizers](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuthorizers.html): 계정에 속한 모든 권한 부여자를 표시합니다.
+  [DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html): 지정한 권한 부여자의 속성을 표시합니다. 이러한 값에는 생성 날짜, 마지막 수정 날짜 및 기타 속성이 포함됩니다.
+ [SetDefaultAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_SetDefaultAuthorizer.html): AWS IoT Core 데이터 엔드포인트의 기본 권한 부여자를 지정합니다. 디바이스가 AWS IoT Core 자격 증명을 전달하지 않고 권한 부여자를 지정하지 않은 경우이 권한 부여자를 AWS IoT Core 사용합니다. 자격 AWS IoT Core 증명 사용에 대한 자세한 내용은 섹션을 참조하세요[클라이언트 인증](client-authentication.md).
+ [UpdateAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateAuthorizer.html): 지정된 권한 부여자의 상태, 토큰 키 이름 또는 퍼블릭 키를 변경합니다.
+  [DeleteAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteAuthorizer.html): 지정된 권한 부여자를 삭제합니다.

**참고**  
 권한 부여자의 서명 요구 사항은 업데이트할 수 없습니다. 즉, 필요한 기존 권한 부여자에서 로그인을 비활성화할 수 없습니다. 또한 필요하지 않은 기존 권한 부여자에는 로그인을 요구할 수 없습니다.

# X.509 클라이언트 인증서를 사용한 사용자 지정 인증
<a name="custom-auth-509cert"></a>

디바이스를 연결할 때 AWS IoT Core여러 [인증 유형을](protocols.md#connection-protocol-auth-mode) 사용할 수 있습니다. 클라이언트 및 디바이스 연결을 인증하는 데 사용할 수 있는 [X.509 클라이언트 인증서](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html)를 사용하거나 사용자 [지정 권한 부여자](https://docs.aws.amazon.com//iot/latest/developerguide/custom-authentication.html)를 정의하여 자체 클라이언트 인증 및 권한 부여 로직을 관리할 수 있습니다. 이 주제에서는 X.509 클라이언트 인증서와 함께 사용자 지정 인증을 사용하는 방법을 다룹니다.

X.509 인증서를 사용하여 디바이스를 이미 인증하고 추가 검증 및 사용자 지정 인증을 수행하려는 경우 X.509 인증서를 사용하여 사용자 지정 인증을 사용하는 것이 도움이 될 수 있습니다. 예를 들어 X.509 클라이언트 인증서에 일련 번호와 같은 디바이스의 데이터를 저장하는 경우 X.509 클라이언트 인증서를 AWS IoT Core 인증한 후 사용자 지정 권한 부여자를 사용하여 인증서의 CommonName 필드에 저장된 정보를 기반으로 특정 디바이스를 식별할 수 있습니다. X.509 인증서와 함께 사용자 지정 인증을 사용하면 디바이스를에 연결할 때 디바이스 보안 관리를 개선하고 인증 및 권한 부여 로직을 보다 유연하게 관리할 수 있습니다. AWS IoT Core 는 X.509 인증서 및 [MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html) 프로토콜과 [HTTPS](https://docs.aws.amazon.com//iot/latest/developerguide/http.html) 프로토콜 모두에서 작동하는 사용자 지정 권한 부여자 인증 유형을 사용하여 X.509 인증서를 사용한 사용자 지정 인증을 AWS IoT Core 지원합니다. AWS IoT Core 디바이스 엔드포인트가 지원하는 인증 유형 및 애플리케이션 프로토콜에 대한 자세한 내용은 [Device communication protocols](https://docs.aws.amazon.com//iot/latest/developerguide/protocols.html) 섹션을 참조하세요.

**참고**  
X.509 클라이언트 인증서를 사용한 사용자 지정 인증은 AWS GovCloud (US) 리전에서 지원되지 않습니다.

**중요**  
[도메인 구성](iot-custom-endpoints-configurable.md) 을 사용하여 생성된 엔드포인트를 사용해야 합니다. 또한 클라이언트는 연결할 때 [서버 이름 표시(SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) 확장을 제공해야 합니다 AWS IoT Core.

**Topics**
+ [1단계:에 X.509 클라이언트 인증서 등록 AWS IoT Core](#custom-auth-509cert-client)
+ [2단계: Lambda 함수 생성](#custom-auth-509cert-lambda)
+ [3단계: 사용자 지정 권한 부여자 생성](#custom-auth-509cert-authorizer)
+ [4단계: 도메인 구성에서 인증 유형 및 애플리케이션 프로토콜 설정](#custom-auth-509cert-domainconfig)

## 1단계:에 X.509 클라이언트 인증서 등록 AWS IoT Core
<a name="custom-auth-509cert-client"></a>

아직 등록하지 않은 경우에 [X.509 클라이언트 인증서를](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) 등록하고 활성화합니다 AWS IoT Core. 그렇지 않은 경우 다음 단계로 건너뜁니다.

에 클라이언트 인증서를 등록하고 활성화하려면 다음 단계를 AWS IoT Core따릅니다.

1. [를 사용하여 직접 클라이언트 인증서를 생성하는 AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-create.html) 경우. 이러한 클라이언트 인증서는에 자동으로 등록됩니다 AWS IoT Core.

1. [자체 클라이언트 인증서를 생성하는](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-your-own.html) 경우 [다음 지침에 따라 인증서를 등록합니다 AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/register-device-cert.html).

1. 클라이언트 인증서를 활성화하려면 [다음 지침](https://docs.aws.amazon.com//iot/latest/developerguide/activate-or-deactivate-device-cert.html)을 따르세요.

## 2단계: Lambda 함수 생성
<a name="custom-auth-509cert-lambda"></a>

AWS IoT Core 는 사용자 지정 권한 부여자를 사용하여 사용자 지정 인증 및 권한 부여 체계를 구현합니다. 사용자 지정 권한 부여자는 디바이스가 인증되었는지 여부와 디바이스가 수행할 수 있는 작업을 결정하는 Lambda 함수와 연결됩니다. 디바이스가에 연결되면 권한 부여자 이름 및 연결된 Lambda 함수를 포함한 권한 부여자 세부 정보를 AWS IoT Core AWS IoT Core 검색하고 Lambda 함수를 호출합니다. Lambda 함수는 디바이스의 X.509 클라이언트 인증서 데이터가 포함된 JSON 객체가 포함된 이벤트를 수신합니다. Lambda 함수는 이 이벤트 JSON 객체를 사용하여 인증 요청을 평가하고 수행할 작업을 결정한 다음 응답을 다시 보냅니다.

### Lambda 함수 이벤트 예제
<a name="custom-auth-509cert-event"></a>

다음 예제 JSON 객체에는 포함할 수 있는 모든 필드가 포함되어 있습니다. 실제 JSON 객체에는 특정 연결 요청과 관련된 필드만 포함됩니다.

```
{
	"token": "aToken",
	"signatureVerified": true,
	"protocols": [
		"tls",
		"mqtt"
	],
	"protocolData": {
		"tls": {
			"serverName": "serverName",
			"x509CertificatePem": "x509CertificatePem",
			"principalId": "principalId"
		},
		"mqtt": {
			"clientId": "myClientId",
                     "username": "myUserName",
                     "password": "myPassword"
		}
	},
	"connectionMetadata": {
		"id": "UUID"
	}
}
```

`signatureVerified`  
권한 부여자의 Lambda 함수를 호출하기 전에 권한 부여자에 구성된 토큰 서명이 확인되는지 여부를 나타내는 부울 값입니다. 권한 부여자가 토큰 서명을 비활성화하도록 구성된 경우 이 필드는 거짓입니다.

`protocols`  
요청에 대해 예상할 프로토콜이 포함된 배열입니다.

`protocolData`  
연결에 사용되는 프로토콜의 정보가 포함된 객체입니다. 인증, 권한 부여 등에 유용할 수 있는 프로토콜별 세부 정보를 제공합니다.  
`tls` - 이 객체는 TLS(Transport Layer Security) 프로토콜과 관련된 정보를 보유합니다.  
+ `serverName` - [서버 이름 표시(SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) 호스트 이름 스트링입니다. AWS IoT Core 는 디바이스가 [SNI 확장](https://www.rfc-editor.org/rfc/rfc3546#section-3.1)을 Transport Layer Security(TLS) 프로토콜로 전송하고 `host_name` 필드에 전체 엔드포인트 주소를 제공하도록 요구합니다.
+ `x509CertificatePem` - TLS 연결에서 클라이언트 인증에 사용되는 PEM 형식의 X.509 인증서입니다.
+ `principalId` - TLS 연결에서 클라이언트와 연결된 위탁자 식별자입니다.
`mqtt` - 이 객체에는 MQTT 프로토콜과 관련된 정보가 들어 있습니다.  
+ `clientId` - 디바이스가 이 값을 보내는 경우에만 문자열을 포함해야 합니다.
+ `username` - MQTT Connect 패킷에 제공된 사용자 이름입니다.
+ `password` - MQTT Connect 패킷에 제공된 암호입니다.

`connectionMetadata`  
연결의 메타데이터입니다.  
`id` - 로깅 및 문제 해결에 사용할 수 있는 연결 ID입니다.

**참고**  
이 경우 JSON 객체 `x509CertificatePem` 및 `principalId`는 요청의 두 가지 새 필드입니다. `principalId`의 값은 `certificateId`의 값과 동일합니다. 자세한 내용은 [인증서](https://docs.aws.amazon.com//iot/latest/apireference/API_Certificate.html)를 참조하세요.

### Lambda 함수 응답 예제
<a name="custom-auth-509cert-response"></a>

Lambda 함수는 이벤트 JSON 객체의 정보를 사용하여 수신 연결을 인증하고 연결에서 허용되는 작업을 결정해야 합니다.

다음 JSON 객체에는 Lambda 함수가 전송할 수 있는 응답의 예가 들어 있습니다.

```
{
	"isAuthenticated": true,
	"principalId": "xxxxxxxx",
	"disconnectAfterInSeconds": 86400,
	"refreshAfterInSeconds": 300,
	"policyDocuments": [
		{
			"Version": "2012-10-17",		 	 	 
			"Statement": [
				{
					"Effect": "Allow",
					"Action": "iot:Publish",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/customauthtesting"
				}
			]
		}
	]
}
```

이 예제에서는 이 함수가 다음 값을 포함하는 응답을 보내야 합니다.

`isAuthenticated`  
요청 인증 여부를 나타내는 부울 값입니다.

`principalId`  
사용자 지정 권한 부여 요청에서 전송되는 토큰의 식별자 역할을 하는 영숫자 문자열입니다. 값은 반드시 1\$1128개 글자의 영숫자 문자열이어야 합니다. 로그에서 연결을 식별합니다. `principalId` 값은 이벤트 JSON 객체(즉, X.509 인증서의 certificateId)의 `principalId` 값과 동일해야 합니다.

`policyDocuments`  
JSON 형식의 AWS IoT Core 정책 문서 목록입니다. 값은 선택 사항이며 [사물 정책 변수](https://docs.aws.amazon.com//iot/latest/developerguide/thing-policy-variables.html) 및 [인증서 정책 변수](https://docs.aws.amazon.com//iot/latest/developerguide/cert-policy-variables.html)를 지원합니다. 정책 문서의 최대 수는 10개입니다. 각 정책 문서는 최대 2,048자를 포함할 수 있습니다. 클라이언트 인증서와 Lambda 함수에 여러 정책이 연결되어 있는 경우 권한은 모든 정책의 모음입니다. AWS IoT Core 정책 생성에 대한 자세한 내용은 [정책을](https://docs.aws.amazon.com//iot/latest/developerguide/iot-policies.html) 참조하세요.

`disconnectAfterInSeconds`  
 AWS IoT Core 게이트웨이에 대한 연결의 최대 지속 시간(초)을 지정하는 정수입니다. 최솟값은 300초이고 최댓값은 86,400초입니다. `disconnectAfterInSeconds`는 연결 수명 동안 사용되며 연속 정책 새로 고침 시 새로 고쳐지지 않습니다.

`refreshAfterInSeconds`  
정책 새로 고침 사이의 간격을 지정하는 정수입니다. 이 간격이 경과하면가 Lambda 함수를 AWS IoT Core 호출하여 정책 새로 고침을 허용합니다. 최소값은 300초이고 최대값은 86,400초입니다.

### Lambda 함수 예제
<a name="custom-auth-509cert-js-example"></a>

다음은 샘플 Node.js Lambda 함수입니다. 이 함수는 클라이언트의 X.509 인증서를 검사하고 일련 번호, 지문 및 주제 이름과 같은 관련 정보를 추출합니다. 추출된 정보가 예상 값과 일치하면 클라이언트에 연결할 수 있는 액세스 권한이 부여됩니다. 이 메커니즘은 유효한 인증서가 있는 승인된 클라이언트만 연결을 설정할 수 있도록 합니다.

```
const crypto = require('crypto');

exports.handler = async (event) => {
    
    // Extract the certificate PEM from the event
    const certPem = event.protocolData.tls.x509CertificatePem;
    
    // Parse the certificate using Node's crypto module
    const cert = new crypto.X509Certificate(certPem);
    
    var effect = "Deny";
    // Allow permissions only for a particular certificate serial, fingerprint, and subject
    if (cert.serialNumber === "7F8D2E4B9C1A5036DE8F7C4B2A91E5D80463BC9A1257" // This is a random serial
       && cert.fingerprint === "F2:9A:C4:1D:B5:E7:08:3F:6B:D0:4E:92:A7:C1:5B:8D:16:0F:E3:7A" // This is a random fingerprint
       && cert.subject === "allow.example.com") {
      effect = "Allow";
    }
    
    return generateAuthResponse(event.protocolData.tls.principalId, effect);
};


// Helper function to generate the authorization response.
function generateAuthResponse(principalId, effect) {
    const authResponse = {
        isAuthenticated: true,
        principalId,
        disconnectAfterInSeconds: 3600,
        refreshAfterInSeconds: 300,
        policyDocuments: [
          {
            Version: "2012-10-17",		 	 	 
            Statement: [
              {
                Action: ["iot:Connect"],
                Effect: effect,
                Resource: [
                  "arn:aws:iot:us-east-1:123456789012:client/myClientName"
                ]
              },
              {
                Action: ["iot:Publish"],
                Effect: effect,
                Resource: [
                  "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
                ]
              },
              {
                Action: ["iot:Subscribe"],
                Effect: effect,
                Resource: [
                   "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName"
                ]
              },
              {
                Action: ["iot:Receive"],
                Effect: effect,
                Resource: [
                   "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
                ]
              }
            ]
          }
        ]
      };

  return authResponse;
}
```

이전 Lambda 함수는 예상 직렬, 지문 및 제목이 포함된 인증서를 수신하면 다음 JSON을 반환합니다. `x509CertificatePem`의 값은 TLS 핸드셰이크에 제공된 클라이언트 인증서입니다. 자세한 내용은 [Defining your Lambda function](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html#custom-auth-lambda)을 참조하세요.

```
{
	"isAuthenticated": true,
	"principalId": "principalId in the event JSON object",
	"policyDocuments": [
		{
			"Version": "2012-10-17",		 	 	 
			"Statement": [
				{
					"Action": "iot:Connect",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:client/myClientName"
				},
				{
					"Action": "iot:Publish",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
				},
				{
					"Action": "iot:Subscribe",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName"
				},
				{
					"Action": "iot:Receive",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
				}
			]
		}
	],
	"disconnectAfterInSeconds": 3600,
	"refreshAfterInSeconds": 300
}
```

## 3단계: 사용자 지정 권한 부여자 생성
<a name="custom-auth-509cert-authorizer"></a>

[Lambda 함수 를 정의](#custom-auth-509cert-lambda)한 후 사용자 지정 권한 부여자를 생성하여 자체 클라이언트 인증 및 권한 부여 로직을 관리합니다. [3단계: 사용자 지정 권한 부여자 리소스 생성 및 권한 부여](https://docs.aws.amazon.com//iot/latest/developerguide/custom-auth-tutorial.html#custom-auth-tutorial-authorizer)의 세부 지침을 따를 수 있습니다. 자세한 내용은 [권한 부여자 생성](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html)을 참조하세요.

사용자 지정 권한 부여자를 생성하는 과정에서 Lambda 함수를 생성한 후 이를 호출할 수 있는 AWS IoT 권한을 부여해야 합니다. 자세한 지침은 [Lambda 함수 호출 권한 부여 AWS IoT 를 참조하세요](custom-auth-authorize.md).

## 4단계: 도메인 구성에서 인증 유형 및 애플리케이션 프로토콜 설정
<a name="custom-auth-509cert-domainconfig"></a>

X.509 클라이언트 인증서로 사용자 지정 인증을 사용하여 디바이스를 인증하려면 도메인 구성에서 인증 유형 및 애플리케이션 프로토콜을 설정하고 SNI 확장을 전송해야 합니다. `authenticationType`의 값은 `CUSTOM_AUTH_X509`이어야 하며, `applicationProtocol`의 값은 `SECURE_MQTT` 또는 `HTTPS`일 수 있습니다.

### 도메인 구성에서 인증 유형 및 애플리케이션 프로토콜 설정(CLI)
<a name="custom-auth-509cert-cli"></a>

도메인 구성이 없는 경우 [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html) 명령을 사용하여 생성합니다. `authenticationType`의 값은 `CUSTOM_AUTH_X509`이어야 하며, `applicationProtocol`의 값은 `SECURE_MQTT` 또는 `HTTPS`일 수 있습니다.

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type CUSTOM_AUTH_X509 \  
    --application-protocol SECURE_MQTT \ 
    --authorizer-config '{
        "defaultAuthorizerName": my-custom-authorizer
    }'
```

도메인 구성이 이미 있는 경우 필요한 경우 [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html) 명령 업데이트 `authenticationType` 및 `applicationProtocol`를 사용합니다. 기본 엔드포인트`iot:Data-ATS`()에서는 인증 유형 또는 프로토콜을 변경할 수 없습니다.

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type CUSTOM_AUTH_X509 \  
    --application-protocol SECURE_MQTT \
    --authorizer-config '{
        "defaultAuthorizerName": my-custom-authorizer
    }'
```

`domain-configuration-name`  
도메인 구성의 이름입니다.

`authentication-type`  
도메인 구성의 인증 유형입니다. 자세한 내용은 [인증 유형 선택](protocols.md#connection-protocol-auth-mode)을 참조하세요.

`application-protocol`  
 AWS IoT Core와 통신하는 데 사용하는 디바이스의 애플리케이션 프로토콜입니다. 자세한 내용은 [애플리케이션 프로토콜 선택](protocols.md#protocol-selection)을 참조하세요.

`--authorizer-config`  
도메인 구성에서 권한 부여자 구성을 지정하는 객체입니다.

`defaultAuthorizerName`  
도메인 구성에 대한 권한 부여자의 이름입니다.

자세한 내용은 *AWS IoT API 참조*의 [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html) 및 [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)을 참조하세요. 도메인 구성에 대한 자세한 내용은 [Domain configurations](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html)를 참조하세요.

# 사용자 지정 인증을 사용하여 AWS IoT Core 에 연결
<a name="custom-auth"></a>

 디바이스는 AWS IoT Core 에서 디바이스 메시징을 AWS IoT Core 지원하는 모든 프로토콜에서 사용자 지정 인증을 사용하여에 연결할 수 있습니다. 지원되는 통신 프로토콜에 대한 자세한 내용은 [디바이스 통신 프로토콜](protocols.md) 단원을 참조하세요.   권한 부여자 Lambda 함수에 전달하는 연결 데이터는 사용하는 프로토콜에 따라 다릅니다. 권한 부여자 Lambda 함수를 만드는 방법에 대한 자세한 내용은 [Lambda 함수 정의](custom-auth-lambda.md) 단원을 참조하세요. 다음 단원에서는 지원되는 각 프로토콜을 사용하여 인증에 연결하는 방법을 설명합니다.

## HTTPS
<a name="custom-auth-http"></a>

[HTTP 게시 API](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_Publish.html)를 사용하여 AWS IoT Core 로 데이터를 전송하는 디바이스는 HTTP POST 요청의 요청 헤더 또는 쿼리 파라미터를 통해 자격 증명을 전달할 수 있습니다. 디바이스는 `x-amz-customauthorizer-name` 헤더 또는 쿼리 파라미터를 사용하여 호출할 권한 부여자를 지정할 수 있습니다. 권한 부여자에서 토큰 서명을 활성화한 경우 요청 헤더 또는 쿼리 파라미터 중 하나에서 `token-key-name` 및 `x-amz-customauthorizer-signature`을(를) 전달해야 합니다. 참고: 브라우저에서 JavaScript를 사용할 경우 `token-signature` 값은 URL로 인코딩해야 합니다.

**참고**  
HTTPS 프로토콜의 고객 권한 부여자는 게시 작업만 지원합니다. HTTPS 프로토콜에 대한 자세한 내용은 [디바이스 통신 프로토콜](protocols.md) 섹션을 참조하세요.

다음 예제 요청은 요청 헤더와 쿼리 파라미터 모두에서 이러한 파라미터를 전달하는 방법을 보여 줍니다.

```
//Passing credentials via headers
POST /topics/topic?qos=qos HTTP/1.1
Host: your-endpoint 
x-amz-customauthorizer-signature: token-signature
token-key-name: token-value 
x-amz-customauthorizer-name: authorizer-name

//Passing credentials via query parameters
POST /topics/topic?qos=qos&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value HTTP/1.1
```

## MQTT
<a name="custom-auth-mqtt"></a>

 MQTT 연결을 사용하여 AWS IoT Core 에 연결하는 디바이스는 MQTT 메시지의 `username` 및 `password` 필드를 통해 자격 증명을 전달할 수 있습니다. `username` 값에는 추가 값(토큰, 서명 및 권한 부여자 이름 포함)을 권한 부여자에게 전달하는 쿼리 문자열이 선택적으로 포함될 수도 있습니다. `username` 및 `password` 값 대신 토큰 기반 인증 체계를 사용하려는 경우 이 쿼리 문자열을 사용할 수 있습니다.  

**참고**  
 암호 필드의 데이터는 base64로 인코딩됩니다 AWS IoT Core. 디코딩은 Lambda 함수로 해야 합니다.

 다음 예제는 토큰 및 서명을 지정하는 추가 파라미터가 포함된 `username` 문자열을 포함합니다.  

```
username?x-amz-customauthorizer-name=authorizer-name&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value
```

권한 부여자를 호출하려면 MQTT 및 사용자 지정 인증을 사용하여 AWS IoT Core 에 연결하는 디바이스가 포트 443에서 연결되어야 합니다. 또한 값이 인 Application Layer Protocol Negotiation(ALPN) TLS 확장`mqtt`과 AWS IoT Core 데이터 엔드포인트의 호스트 이름이 있는 Server Name Indication(SNI) 확장을 전달해야 합니다. 잠재적 오류를 방지하기 위해 `x-amz-customauthorizer-signature` 값은 URL 인코딩을 해야 합니다. 또한 `x-amz-customauthorizer-name` 및 `token-key-name` 값을 URL 인코딩하는 것을 적극 권장합니다. 이러한 값에 대한 자세한 정보는 [디바이스 통신 프로토콜](protocols.md) 섹션을 참조하세요. V2 [AWS IoT 디바이스 SDK, 모바일 SDK 및 AWS IoT 디바이스 클라이언트](iot-sdks.md)는 이 두 확장을 모두 구성할 수 있습니다. 

## WebSocket을 통한 MQTT
<a name="custom-auth-websockets"></a>

 MQTT over WebSockets AWS IoT Core 을 사용하여에 연결하는 디바이스는 다음 두 가지 방법 중 하나로 자격 증명을 전달할 수 있습니다.
+ WebSockets 연결 설정을 위해 HTTP 업그레이드 요청의 요청 헤더 또는 쿼리 파라미터를 통해.
+ MQTT 연결 메시지의 `username` 및 `password` 필드를 통해.

 MQTT 연결 메시지를 통해 자격 증명을 전달하면 ALPN 및 SNI TLS 확장이 필요합니다. 이러한 확장에 대한 자세한 내용은 [MQTT](#custom-auth-mqtt) 단원을 참조하세요. 다음 예에서는 HTTP 업그레이드 요청을 통해 자격 증명을 전달하는 방법을 보여 줍니다.

```
GET /mqtt HTTP/1.1
Host: your-endpoint 
Upgrade: WebSocket 
Connection: Upgrade 
x-amz-customauthorizer-signature: token-signature
token-key-name: token-value 
sec-WebSocket-Key: any random base64 value 
sec-websocket-protocol: mqtt 
sec-WebSocket-Version: websocket version
```

## 토큰에 서명하기
<a name="custom-auth-token-signature"></a>

`create-authorizer` 호출에서 사용한 퍼블릭-프라이빗 키 페어의 프라이빗 키를 사용하여 토큰에 서명해야 합니다. 다음 예제에서는 UNIX 계열 명령과 JavaScript를 사용하여 토큰 서명을 생성하는 방법을 보여줍니다. 이들은 SHA-256 해시 알고리즘을 사용하여 서명을 인코딩합니다.

------
#### [ Command line ]

```
echo -n TOKEN_VALUE | openssl dgst -sha256 -sign PEM encoded RSA private key | openssl base64
```

------
#### [ JavaScript ]

```
const crypto = require('crypto')

const key = "PEM encoded RSA private key"

const k = crypto.createPrivateKey(key)
let sign = crypto.createSign('SHA256')
sign.write(t)
sign.end()
const s = sign.sign(k, 'base64')
```

------

# Lambda 권한 부여자 문제 해결
<a name="custom-auth-troubleshooting"></a>

 이 주제에서는 사용자 지정 인증 워크플로에서 문제를 일으킬 수 있는 일반적인 문제와 이를 해결하기 위한 단계를 안내합니다. 문제를 가장 효과적으로 해결하려면에 대해 CloudWatch 로그를 활성화 AWS IoT Core 하고 로그 수준을 **DEBUG**로 설정합니다. AWS IoT Core 콘솔([https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/))에서 CloudWatch 로그를 활성화할 수 있습니다. AWS IoT Core에 대해 로그를 활성화 및 구성하는 자세한 내용은 [AWS IoT 로깅 구성](configure-logging.md) 단원을 참조하세요.

**참고**  
로그 수준을 장기간 **디버그** 상태로 두면 CloudWatch에서 많은 양의 로깅 데이터를 저장할 것이고, 이렇게 하면 CloudWatch 요금이 증가할 수 있습니다. 특정 사물 그룹의 디바이스에 대해서만 상세도를 높이도록 리소스 기반 로깅을 사용하는 것이 좋습니다. 리소스 기반 로깅에 대한 자세한 내용은 [AWS IoT 로깅 구성](configure-logging.md) 단원을 참조하세요. 또한 문제 해결이 완료되면 로그 수준의 상세도를 낮추세요.

문제 해결을 시작하기 전에 사용자 지정 인증 프로세스를 자세히 볼 수 있도록 [사용자 지정 인증 워크플로 이해](custom-authorizer.md)을(를) 검토합니다. 이렇게 하면 문제의 원인을 찾을 위치를 파악하는 데 도움이 됩니다.

이 주제에서는 다음과 같은 두 가지 조사 영역에 대해 설명합니다.
+ 권한 부여자의 Lambda 함수와 관련된 문제.
+ 디바이스와 관련된 문제.

## 권한 부여자의 Lambda 함수에서 문제 확인
<a name="custom-auth-troubleshooting-lambda"></a>

장치의 연결 시도가 Lambda 함수를 호출하는지 확인하려면 다음 단계를 수행하세요.

1. 권한 부여자와 연결된 Lambda 함수를 확인합니다.

   [DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html) API를 호출하거나 AWS IoT Core 콘솔의 **보안** 단원에서 원하는 권한 부여자를 클릭하여 수행합니다.

1. Lambda 함수의 호출 지표를 확인합니다. 이렇게 하려면 다음 단계를 수행하세요.

   1.  AWS Lambda 콘솔([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/))을 열고 권한 부여자와 연결된 함수를 선택합니다.

   1. **모니터링** 탭을 선택하고 문제와 관련된 시간 프레임에 대한 지표를 봅니다.

1. 호출이 표시되지 않으면 AWS IoT Core 에 Lambda 함수를 호출할 권한이 있는지 확인합니다. 호출이 표시되면 다음 단계로 건너뜁니다. Lambda 함수에 필요한 권한이 있는지 확인하려면 다음 단계를 수행하세요.

   1.  AWS Lambda 콘솔에서 함수에 대한 **권한** 탭을 선택합니다.

   1. 페이지 하단에서 **리소스 기반 정책** 단원을 찾습니다. Lambda 함수에 필요한 권한이 있는 경우 정책은 다음 예와 같습니다.  
****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Id": "default",
        "Statement": [
          {
            "Sid": "Id123",
            "Effect": "Allow",
            "Principal": {
              "Service": "iot.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-1:111111111111:function:FunctionName",
            "Condition": {
              "ArnLike": {
                "AWS:SourceArn": "arn:aws:iot:us-east-1:111111111111:authorizer/AuthorizerName"
              },
              "StringEquals": {
                "AWS:SourceAccount": "111111111111"
              }
            }
          }
        ]
      }
      ```

   1. 이 정책은 AWS IoT Core 보안 주체에게 함수에 대한 `InvokeFunction` 권한을 부여합니다. 표시되지 않으면 [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html) API를 사용하여 추가해야 합니다. 다음 예에서는 AWS CLI을(를) 사용하여 이 작업을 수행하는 방법을 보여줍니다. 

      ```
      aws lambda add-permission --function-name FunctionName --principal iot.amazonaws.com --source-arn AuthorizerARn --statement-id Id-123 --action "lambda:InvokeFunction"
      ```

1. 호출이 표시되면 오류가 없는지 확인합니다. 오류는 Lambda 함수가에서 AWS IoT Core 전송한 연결 이벤트를 제대로 처리하지 못하고 있음을 나타낼 수 있습니다.

   Lambda 함수에서 이벤트를 처리하는 방법에 대한 자세한 내용은 [Lambda 함수 정의](custom-auth-lambda.md) 단원을 참조하세요. AWS Lambda 콘솔([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/))의 테스트 기능을 사용하여 함수의 테스트 값을 하드 코딩하여 함수가 이벤트를 올바르게 처리하고 있는지 확인할 수 있습니다.

1. 오류 없이 호출이 표시되지만 디바이스가 연결할 수 없거나 메시지를 게시, 구독 및 수신할 수 없는 경우 Lambda 함수가 반환하는 정책이 디바이스가 수행하려는 작업에 대한 권한을 부여하지 않는 문제일 수 있습니다. 함수가 반환하는 정책에 문제가 있는지 확인하려면 다음 단계를 수행하세요.

   1. Amazon CloudWatch Logs Insights 쿼리를 사용하여 짧은 기간 동안 로그를 스캔하여 실패를 확인합니다. 다음 예제 쿼리는 타임스탬프별로 이벤트를 정렬하고 실패를 찾습니다.

      ```
      display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"    
      ```

   1. Lambda 함수를 업데이트하여 반환되는 데이터와 함수 AWS IoT Core 를 트리거하는 이벤트를 로깅합니다. 이러한 로그를 사용하여 함수가 만드는 정책을 검사할 수 있습니다.

1. 오류 없이 호출이 표시되지만 디바이스가 연결할 수 없거나 메시지를 게시, 구독 및 수신할 수 없는 경우 Lambda 함수가 제한 시간을 초과했기 때문일 수 있습니다. 사용자 지정 권한 부여자에 대한 Lambda 함수 제한 시간은 5초입니다. CloudWatch 로그 또는 지표에서 함수 기간을 확인할 수 있습니다.

## 디바이스 문제 조사
<a name="custom-auth-troubleshooting-investigate"></a>

Lambda 함수를 호출하거나 함수가 반환하는 정책에 문제가 없으면 디바이스의 연결 시도에 문제가 있는지 확인합니다. 잘못된 연결 요청으로 인해가 권한 부여자를 트리거 AWS IoT Core 하지 않을 수 있습니다. TLS 및 애플리케이션 계층 모두에서 연결 문제가 발생할 수 있습니다.

**가능한 TLS 계층 문제:**
+ 고객은 모든 사용자 지정 인증 요청에서 호스트 이름 헤더(HTTP, WebSockets을 통한 MQTT) 또는 서버 이름 표시 TLS 확장(HTTP, WebSockets을 통한 MQTT, MQTT)을 전달해야 합니다. 두 경우 모두 전달된 값은 계정의 AWS IoT Core 데이터 엔드포인트 중 하나와 일치해야 합니다. 이러한 엔드포인트는 다음 CLI 명령을 수행할 때 반환되는 엔드포인트입니다.
  + `aws iot describe-endpoint --endpoint-type iot:Data-ATS`
  + `aws iot describe-endpoint --endpoint-type iot:Data`(레거시 VeriSign 엔드포인트용)
+ MQTT 연결에서 사용자 지정 인증을 사용하는 디바이스가 `mqtt` 값의 ALPN(Application Layer Protocol Negotiation) TLS 확장을 전달해야 합니다.
+ 사용자 지정 인증은 현재 포트 443에서만 사용할 수 있습니다.

**가능한 애플리케이션 계층 문제:**
+ 서명이 활성화된 경우(`signingDisabled` 필드가 false인 경우) 다음 서명 문제를 찾습니다.
  + 토큰 서명을 `x-amz-customauthorizer-signature` 헤더 또는 쿼리 문자열 파라미터로 전달하고 있는지 확인합니다.
  + 서비스가 토큰이 아닌 다른 값에 서명하고 있지 않은지 확인합니다.
  + 권한 지정자의 `token-key-name` 필드에 지정한 헤더 또는 쿼리 파라미터로 토큰을 전달하는지 확인합니다.
+ `x-amz-customauthorizer-name` 헤더 또는 쿼리 문자열 파라미터로 전달한 권한 부여자 이름이 유효하거나 계정에 대해 기본 권한 부여자가 정의되어 있어야 합니다.