

지원 종료 공지: 2026년 10월 7일에는에 대한 지원을 중단할 AWS 예정입니다 AWS IoT Greengrass Version 1. 2026년 10월 7일 이후에는 더 이상 AWS IoT Greengrass V1 리소스에 액세스할 수 없습니다. 자세한 내용은 [에서 마이그레이션 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)을 참조하세요.

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

# AWS IoT Greengrass 코어에 보안 암호 배포
<a name="secrets"></a>

이 기능은 AWS IoT Greengrass 코어 v1.7 이상에서 사용할 수 있습니다.

AWS IoT Greengrass 를 사용하면 암호, 토큰 또는 기타 보안 암호의 하드 코딩 없이 Greengrass 디바이스의 서비스 및 애플리케이션으로 인증할 수 있습니다.

AWS Secrets Manager 는 클라우드에서 보안 암호를 안전하게 저장하고 관리하는 데 사용할 수 있는 서비스입니다. AWS IoT Greengrass 는 Secrets Manager를 Greengrass 코어 디바이스로 확장하므로 [커넥터](connectors.md)와 Lambda 함수가 로컬 보안 암호를 사용하여 서비스 및 애플리케이션과 상호 작용할 수 있습니다. 예를 들어, Twilio 알림 커넥터는 로컬로 저장된 인증 토큰을 사용합니다.

보안 암호를 Greengrass 그룹에 통합하려면 Secrets Manager 보안 암호를 참조하는 그룹 리소스를 생성합니다. 이 *암호 리소스*는 ARN을 통해 클라우드 암호를 참조합니다. 암호 리소스의 생성, 관리, 사용 방법을 알아보려면 [암호 리소스 작업](secrets-using.md)을 참조하십시오.

AWS IoT Greengrass 는 전송 중 및 저장 시 보안 암호를 암호화합니다. 그룹 배포 중에는 Secrets Manager에서 보안 암호를 AWS IoT Greengrass 가져오고 Greengrass 코어에 암호화된 로컬 복사본을 생성합니다. Secrets Manager에서 클라우드 암호를 교체한 후 그룹을 다시 배포하여 업데이트된 값을 코어에 전파합니다.

다음 다이어그램에서는 암호를 코어에 배포하는 프로세스를 자세히 보여줍니다. 암호는 전송 및 저장 상태에서 암호화됩니다.

![\[AWS IoT Greengrass 는에서 보안 암호를 가져 AWS Secrets Manager 와 코어 디바이스에 보안 암호 리소스로 배포합니다.이 리소스는 커넥터 및 Lambda 함수에서 사용할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/deploy-local-secret.png)


 AWS IoT Greengrass 를 사용하여 보안 암호를 로컬에 저장하면 다음과 같은 이점이 있습니다.
+ **코드에서 분리됨(하드 코딩되지 않음).** 중앙에서 관리되는 자격 증명을 지원하며 민감한 데이터를 손상 위험으로부터 보호할 수 있습니다.
+ **오프라인 시나리오에 사용할 수 있습니다.** 인터넷 연결이 끊어진 상태에서 커넥터와 함수가 로컬 서비스 및 소프트웨어에 안전하게 액세스할 수 있습니다.
+ **암호에 제어된 액세스.** 그룹에서 승인된 커넥터와 함수만 암호에 액세스할 수 있습니다. AWS IoT Greengrass 는 프라이빗 키 암호화를 사용하여 암호를 보호합니다. 암호는 전송 및 저장 상태에서 암호화됩니다. 자세한 내용은 [암호 암호화](#secrets-encryption) 단원을 참조하십시오.
+ **제어된 회전.** Secrets Manager에서 암호를 교체한 후 Greengrass 그룹을 다시 배포하여 암호의 로컬 사본을 업데이트합니다. 자세한 내용은 [보안 암호 생성 및 관리](secrets-using.md#secrets-create-manage) 단원을 참조하십시오.
**중요**  
AWS IoT Greengrass 는 클라우드 버전이 교체된 후 로컬 보안 암호의 값을 자동으로 업데이트하지 않습니다. 로컬 값을 업데이트하려면 그룹을 다시 배포해야 합니다.

## 암호 암호화
<a name="secrets-encryption"></a>

AWS IoT Greengrass 는 전송 중 및 저장 시 보안 암호를 암호화합니다.

**중요**  
사용자 정의한 Lambda 함수에서 보안 암호를 안전하게 취급해야 하고, 보안 암호에 저장된 기밀 데이터를 로그에 기록하지 말아야 합니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [Lambda 함수 로깅 및 디버깅의 위험 완화](https://docs.aws.amazon.com/secretsmanager/latest/userguide/best-practices.html#best-practice_lamda-debug-statements)를 참조하십시오. 이 설명서에서는 특별히 교체 기능을 언급하지만 권장 사항은 Greengrass Lambda 함수에도 적용됩니다.

**전송 중 데이터 암호화**  
AWS IoT Greengrass 는 TLS(전송 계층 보안)를 사용하여 인터넷 및 로컬 네트워크를 통한 모든 통신을 암호화합니다. 그러면 Secrets Manager에서 암호를 검색하여 코어에 배포하는 과정에서 전송 중인 암호가 보호됩니다. 지원되는 TLS 암호 그룹은 [TLS 암호 그룹 지원](gg-sec.md#gg-cipher-suites) 섹션을 참조하십시오.

**저장된 데이터 암호화**  
AWS IoT Greengrass 는 코어에 저장된 보안 암호의 암호화를 [`config.json`](gg-core.md#config-json) 위해에 지정된 프라이빗 키를 사용합니다. 이 때문에 로컬 암호를 보호하려면 프라이빗 키의 보안 스토리지가 필요합니다. AWS [ 공동 책임 모델에서](https://aws.amazon.com/compliance/shared-responsibility-model/) 코어 디바이스에 프라이빗 키를 안전하게 저장하는 것은 고객의 책임입니다.  
AWS IoT Greengrass 는 두 가지 프라이빗 키 스토리지 모드를 지원합니다.  
+ 하드웨어 보안 모듈 사용 자세한 내용은 [하드웨어 보안 통합](hardware-security.md) 단원을 참조하십시오.
**참고**  
현재는 하드웨어 기반 프라이빗 키를 사용할 때 로컬 보안 암호의 암호화 및 복호화를 위한 [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) 패딩 메커니즘만 AWS IoT Greengrass 지원합니다. 공급업체에서 제공한 지침에 따라 하드웨어 기반 프라이빗 키를 수동으로 생성하는 경우 PKCS\$11 v1.5를 선택해야 합니다. AWS IoT Greengrass Optimal Asymmetric Encryption Padding(OAEP)을 지원하지 않습니다.
+ 파일 시스템 권한 사용(기본값)
프라이빗 키는 로컬 암호를 암호화하는 데 사용되는 데이터 키를 보호하는 데 사용됩니다. 데이터 키는 각 그룹 배포로 교체됩니다.  
 AWS IoT Greengrass 코어는 프라이빗 키에 액세스할 수 있는 유일한 엔터티입니다. 암호 리소스와 연계된 Greengrass 커넥터 또는 Lambda 함수는 코어에서 암호의 값을 가져옵니다.

## 요구 사항
<a name="secrets-reqs"></a>

로컬 암호 지원을 위한 요구 사항은 다음과 같습니다.
+  AWS IoT Greengrass 코어 v1.7 이상을 사용해야 합니다.
+ 로컬 보안 암호의 값을 가져오려면 사용자 정의 Lambda 함수가 AWS IoT Greengrass 코어 SDK v1.3.0 이상을 사용해야 합니다.
+ 로컬 암호 암호화에 사용되는 프라이빗 키를 Greengrass 구성 파일에서 지정해야 합니다. 기본적으로는 파일 시스템에 저장된 코어 프라이빗 키를 AWS IoT Greengrass 사용합니다. 사용자 본인의 프라이빗 키를 제공하려면 [암호 암호화를 위한 프라이빗 키 지정](#secrets-config-private-key) 섹션을 참조하십시오. RSA 키 유형만 지원됩니다.
**참고**  
현재는 하드웨어 기반 프라이빗 키를 사용할 때 로컬 보안 암호의 암호화 및 복호화를 위한 [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) 패딩 메커니즘만 AWS IoT Greengrass 지원합니다. 공급업체에서 제공한 지침에 따라 하드웨어 기반 프라이빗 키를 수동으로 생성하는 경우 PKCS\$11 v1.5를 선택해야 합니다. AWS IoT Greengrass Optimal Asymmetric Encryption Padding(OAEP)을 지원하지 않습니다.
+ AWS IoT Greengrass 에 보안 암호 값을 가져올 수 있는 권한이 부여되어야 합니다. 이렇게 AWS IoT Greengrass 하면가 그룹 배포 중에 값을 가져올 수 있습니다. 기본 Greengrass 서비스 역할을 사용하는 경우는 AWS IoT Greengrass 이미 *이름이 greengrass-*로 시작하는 보안 암호에 액세스할 수 있습니다. 액세스를 사용자 지정하려면 [AWS IoT Greengrass 가 보안 암호 값을 가져오도록 허용](#secrets-config-service-role)을 참조하십시오.
**참고**  
권한을 사용자 지정하더라도이 명명 규칙을 사용하여에 액세스할 AWS IoT Greengrass 수 있는 보안 암호를 식별하는 것이 좋습니다. 콘솔은 다른 권한을 사용하여 보안 암호를 읽으므로 콘솔에서 가져올 권한이 AWS IoT Greengrass 없는 보안 암호를 선택할 수 있습니다. 명명 규칙을 사용하면 배포 오류가 발생하는 권한 충돌을 방지할 수 있습니다.

## 암호 암호화를 위한 프라이빗 키 지정
<a name="secrets-config-private-key"></a>

이 절차에서는 로컬 보안 암호화에 사용되는 프라이빗 키의 경로를 제공합니다. 이는 최소 2048비트 길이의 RSA 키여야 합니다. AWS IoT Greengrass 코어에 사용되는 프라이빗 키에 대한 자세한 내용은 섹션을 참조하세요[AWS IoT Greengrass 코어 보안 주체](gg-sec.md#gg-principals).

AWS IoT Greengrass 는 하드웨어 기반 또는 파일 시스템 기반(기본값)의 두 가지 프라이빗 키 스토리지 모드를 지원합니다. 자세한 내용은 [암호 암호화](#secrets-encryption) 단원을 참조하십시오.

파일 시스템에서 코어 프라이빗 키를 사용하는 기본 구성을 변경하려는 경우에만 **이 절차를 따르십시오**. 이 단계는 시작하기 저습서의 [모듈 2](module2.md)에 설명된 대로 그룹 및 코어를 생성했다는 가정하에 작성되었습니다.

1. `/greengrass-root/config` 디렉터리에 있는 [`config.json`](gg-core.md#config-json) 파일은 여십시오.
**참고**  
*greengrass-root*는 AWS IoT Greengrass 코어 소프트웨어가 디바이스에 설치된 경로를 나타냅니다. 일반적으로 이는 `/greengrass` 디렉터리입니다.

1. `crypto.principals.SecretsManager` 객체에서 `privateKeyPath` 속성에 프라이빗 키의 경로를 입력합니다.
   + 프라이빗 키가 파일 시스템에 저장된 경우 키의 절대 경로를 지정합니다. 예:

     ```
     "SecretsManager" : {
       "privateKeyPath" : "file:///somepath/hash.private.key"
     }
     ```
   + 프라이빗 키가 HSM(하드웨어 보안 모듈)에 저장되는 경우, [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) URI 체계를 사용해 경로를 지정합니다. 예:

     ```
     "SecretsManager" : {
       "privateKeyPath" : "pkcs11:object=private-key-label;type=private"
     }
     ```

     자세한 내용은 [AWS IoT Greengrass 코어에 대한 하드웨어 보안 구성](hardware-security.md#configure-hardware-security) 단원을 참조하십시오.
**참고**  
현재는 하드웨어 기반 프라이빗 키를 사용할 때 로컬 보안 암호의 암호화 및 복호화를 위한 [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) 패딩 메커니즘만 AWS IoT Greengrass 지원합니다. 공급업체에서 제공한 지침에 따라 하드웨어 기반 프라이빗 키를 수동으로 생성하는 경우 PKCS\$11 v1.5를 선택해야 합니다. AWS IoT Greengrass Optimal Asymmetric Encryption Padding(OAEP)을 지원하지 않습니다.

## AWS IoT Greengrass 가 보안 암호 값을 가져오도록 허용
<a name="secrets-config-service-role"></a>

이 절차에서는가 보안 암호 값을 AWS IoT Greengrass 가져오도록 허용하는 인라인 정책을 Greengrass 서비스 역할에 추가합니다.

보안 암호에 AWS IoT Greengrass 사용자 지정 권한을 부여하거나 Greengrass 서비스 역할에 `AWSGreengrassResourceAccessRolePolicy` 관리형 정책이 포함되지 않은 **경우에만이 절차를 따르**세요.는 *이름이 greengrass-*로 시작하는 보안 암호에 대한 액세스 권한을 `AWSGreengrassResourceAccessRolePolicy` 부여합니다.

1. 다음 CLI 명령을 실행해 Greengrass 서비스 역할의 ARN을 가져옵니다.

   ```
   aws greengrass get-service-role-for-account --region region
   ```

   반환되는 ARN에는 역할 이름이 포함되어 있습니다.

   ```
   {
     "AssociatedAt": "time-stamp",
     "RoleArn": "arn:aws:iam::account-id:role/service-role/role-name"
   }
   ```

   다음 단계에서는 ARN 또는 이름을 사용합니다.

1. `secretsmanager:GetSecretValue` 작업을 허용하는 인라인 정책을 추가합니다. 지침은 *IAM 사용 설명서*의 [IAM 정책 추가 및 제거](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)를 참조하십시오.

   암호를 명시적으로 나열하거나 와일드카드 `*` 이름 지정 체계를 사용하여 세분화된 액세스 권한을 부여하거나 버전이 지정되거나 태그 지정된 암호에 대한 조건부 액세스를 허용할 수 있습니다. 예를 들어 다음 정책은가 지정된 보안 암호만 읽 AWS IoT Greengrass 도록 허용합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "secretsmanager:GetSecretValue"
               ],
               "Resource": [
               "arn:aws:secretsmanager:us-east-1:123456789012:secret:greengrass-SecretA-abc",
       "arn:aws:secretsmanager:us-east-1:123456789012:secret:greengrass-SecretB-xyz"
               ]
           }
       ]
   }
   ```

------
**참고**  
고객 관리형 AWS KMS 키를 사용하여 보안 암호를 암호화하는 경우 Greengrass 서비스 역할도 `kms:Decrypt` 작업을 허용해야 합니다.

Secrets Manager의 IAM 정책에 대한 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [AWS Secrets Manager에 대한 인증 및 액세스 제어](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html) 및 [AWS Secrets Manager에 대한 IAM 정책 또는 보안 정책에서 사용할 수 있는 작업, 리소스 및 컨텍스트 키](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html)를 참조하십시오.

## 다음 사항도 참조하세요.
<a name="secrets-seealso"></a>
+ *AWS Secrets Manager 사용 설명서*의 [란 무엇입니까 AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 
+ [PKCS \$11: RSA 암호화 버전1.5](https://tools.ietf.org/html/rfc2313)

# 암호 리소스 작업
<a name="secrets-using"></a>

AWS IoT Greengrass 는 *보안 암호 리소스를* 사용하여의 보안 암호를 AWS Secrets Manager Greengrass 그룹에 통합합니다. 암호 리소스는 Secrets Manager의 암호에 대한 참조입니다. 자세한 내용은 [AWS IoT Greengrass 코어에 보안 암호 배포](secrets.md) 단원을 참조하십시오.

 AWS IoT Greengrass 코어 디바이스에서 커넥터와 Lambda 함수는 암호, 토큰 또는 기타 자격 증명을 하드 코딩하지 않고도 보안 암호 리소스를 사용하여 서비스 및 애플리케이션으로 인증할 수 있습니다.

## 보안 암호 생성 및 관리
<a name="secrets-create-manage"></a>

Greengrass 그룹에서 암호 리소스는 Secrets Manager 암호의 ARN을 참조합니다. 암호 리소스가 코어에 배포되면 암호의 값이 암호화되어 연계된 커넥터 및 Lambda 함수에 사용할 수 있게 됩니다. 자세한 내용은 [암호 암호화](secrets.md#secrets-encryption) 단원을 참조하십시오.

Secrets Manager을 사용하여 암호의 클라우드 버전을 생성하고 관리합니다. AWS IoT Greengrass 를 사용하여 보안 암호 리소스를 생성, 관리 및 배포합니다.

**중요**  
Secrets Manager에서 암호 교체 모범 사례를 따르는 것이 좋습니다. 그런 다음 Greengrass 그룹을 배포하여 암호의 로컬 사본을 업데이트합니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [AWS Secrets Manager 보안 암호 교체를 참조하세요](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html).

**Greengrass 코어에서 암호를 사용할 수 있도록 지정하려면**

1. Secrets Manager에서 보안 암호를 생성합니다. 이 암호는 Secrets Manager에서 중앙 집중식으로 저장되고 관리되는 클라우드 버전 암호입니다. 관리 작업에는 암호 값 교체와 리소스 정책 적용이 포함됩니다.

1. 에서 보안 암호 리소스를 생성합니다 AWS IoT Greengrass. 암호 리소스는 ARN을 통해 클라우드 암호를 참조하는 그룹 리소스의 한 유형입니다. 암호를 그룹당 한 번만 참조할 수 있습니다.

1. 커넥터 또는 Lambda 함수를 구성합니다. 해당 파라미터 또는 속성을 지정하여 리소스를 커넥터 또는 함수와 연계해야 합니다. 그러면 함수를 사용하여 로컬로 배포된 암호 리소스의 값을 가져올 수 있습니다. 자세한 내용은 [커넥터 및 Lambda 함수에서 로컬 암호 사용](#secrets-access) 단원을 참조하십시오.

1. Greengrass 그룹을 배포합니다. 배포 중에 AWS IoT Greengrass 는 클라우드 암호 값을 가져오고 코어에서 로컬 암호를 생성하거나 업데이트합니다.

Secrets Manager는 보안 암호 값을 검색할 AWS CloudTrail 때마다 AWS IoT Greengrass 이벤트를 로깅 AWS IoT Greengrass 합니다. 로컬 보안 암호의 배포 또는 사용과 관련된 이벤트는 로깅하지 않습니다. Secrets Manager 로깅에 대한 자세한 내용은 *AWS Secrets Manager 사용 설명서*[의 AWS Secrets Manager 보안 암호 사용 모니터링을 참조하세요](https://docs.aws.amazon.com/secretsmanager/latest/userguide/monitoring.html).

### 암호 리소스에 스테이징 레이블 포함
<a name="secret-resources-labels"></a>

Secrets Manager는 스테이징 레이블을 사용하여 암호 값의 특정 버전을 식별합니다. 스테이징 레이블은 시스템에서 정의하거나 사용자가 정의할 수 있습니다. Secrets Manager는 비밀 값의 최신 버전에 `AWSCURRENT` 레이블을 지정합니다. 스테이징 레이블은 일반적으로 암호 교체를 관리하는 데 사용됩니다. Secrets Manager 버전 관리에 대한 자세한 정보는 **AWS Secrets Manager 사용 설명서의 [AWS Secrets Manager의 주요 개념 및 용어](https://docs.aws.amazon.com/secretsmanager/latest/userguide/terms-concepts.html)를 참조하세요.

암호 리소스는 항상 `AWSCURRENT` 스테이징 레이블을 포함하며, Lambda 함수 또는 커넥터에 필요한 경우 다른 스테이징 레이블을 선택적으로 포함할 수 있습니다. 그룹 배포 중에는 그룹에서 참조되는 스테이징 레이블의 값을 AWS IoT Greengrass 검색한 다음 코어에서 해당 값을 생성하거나 업데이트합니다.

### 암호 리소스 생성 및 관리(콘솔)
<a name="create-manage-secret-resource-console"></a>

#### 암호 리소스 생성(콘솔)
<a name="create-manage-secret-resource-console-create"></a>

 AWS IoT Greengrass 콘솔에서 그룹 리소스 페이지의 **보안** 암호 탭에서 보안 암호 **리소스를** 생성하고 관리합니다. 암호 리소스를 생성하여 그룹에 추가하는 방법을 설명하는 자습서는 [암호 리소스 생성 방법(콘솔)](secrets-console.md) 및 [Greengrass 커넥터 시작하기(콘솔)](connectors-console.md) 단원을 참조하십시오.

![\[리소스 페이지의 암호 탭에 있는 암호 리소스\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/connectors/secret-resource-twilio-auth-token.png)


**참고**  
대안으로, 커넥터 또는 Lambda 함수를 구성할 때 콘솔에서 보안 암호와 보안 암호 리소스를 생성할 수도 있습니다. 커넥터의 **파라미터 구성** 페이지 또는 Lambda 함수의 **리소스** 페이지에서 이 작업을 수행할 수 있습니다.

#### 암호 리소스 관리(콘솔)
<a name="create-manage-secret-resource-console-manage"></a>

Greengrass 그룹의 보안 암호 리소스에 대한 관리 작업에는 그룹에 보안 암호 리소스 추가, 그룹에서 보안 암호 리소스 제거, 보안 암호 리소스에 포함된 [스테이징 레이블](#secret-resources-labels) 세트 변경이 포함됩니다.

Secrets Manager에서 다른 암호를 가리키는 경우 암호를 사용하는 커넥터도 편집해야 합니다.

1. 그룹 구성 페이지에서 **Connectors(커넥터)**를 선택합니다.

1. 커넥터의 컨텍스트 메뉴에서 **Edit(편집)**를 선택합니다.

1. **파라미터 편집** 페이지에 암호 ARN이 변경되었다고 알려주는 메시지가 표시됩니다. 변경을 확인하려면 **저장**을 선택합니다.

Secrets Manager에서 보안 암호를 삭제할 경우 그룹 및 해당 보안 리소스를 참조하는 커넥터 및 Lambda 함수에서 보안 리소스를 제거해야 합니다. 이렇게 하지 않으면 그룹 배포 중 AWS IoT Greengrass 는 보안 암호를 찾을 수 없다는 오류를 반환합니다. 또한 필요한 경우 Lambda 함수 코드를 업데이트합니다.

### 암호 리소스 생성 및 관리(CLI)
<a name="create-manage-secret-resource-cli"></a>

#### 암호 리소스 생성(CLI)
<a name="create-manage-secret-resource-cli-create"></a>

 AWS IoT Greengrass API에서 보안 암호는 그룹 리소스의 한 유형입니다. 다음 예에서는 `MySecretResource`라는 암호 리소스를 포함하는 초기 버전으로 리소스 정의를 생성합니다. 암호 리소스를 생성하여 그룹 버전에 추가하는 방법을 설명하는 자습서는 [Greengrass 커넥터 시작하기(CLI)](connectors-cli.md) 단원을 참조하십시오.

암호 리소스는 해당 Secrets Manager 암호의 ARN을 참조하며, 항상 포함되는 `AWSCURRENT` 이외에 두 스테이징 레이블을 포함합니다.

```
aws greengrass create-resource-definition --name MyGreengrassResources --initial-version '{
    "Resources": [
        {
            "Id": "my-resource-id",
            "Name": "MySecretResource",
            "ResourceDataContainer": {
                "SecretsManagerSecretResourceData": {
                    "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:greengrass-SomeSecret-KUj89s",
                    "AdditionalStagingLabelsToDownload": [
                        "Label1",
                        "Label2"
                    ]
                }
            }
        }
    ]
}'
```

#### 암호 리소스 관리(CLI)
<a name="create-manage-secret-resource-cli-manage"></a>

Greengrass 그룹의 보안 암호 리소스에 대한 관리 작업에는 그룹에 보안 암호 리소스 추가, 그룹에서 보안 암호 리소스 제거, 보안 암호 리소스에 포함된 [스테이징 레이블](#secret-resources-labels) 세트 변경이 포함됩니다.

 AWS IoT Greengrass API에서 이러한 변경 사항은 버전을 사용하여 구현됩니다.

 AWS IoT Greengrass API는 버전을 사용하여 그룹을 관리합니다. 버전은 변경할 수 없으므로 그룹 구성 요소(예: 그룹의 클라이언트 장치, 기능 및 리소스)를 추가하거나 변경하려면 새 구성 요소나 업데이트된 구성 요소의 버전을 생성해야 합니다. 그런 다음 각 구성 요소의 대상 버전을 포함하는 그룹 버전을 생성하고 배포합니다. 그룹에 대한 자세한 내용은 [AWS IoT Greengrass 그룹](what-is-gg.md#gg-group)을 참조하십시오.

예를 들어, 암호 리소스에 대한 스테이징 레이블 세트를 변경하려면

1. 업데이트된 암호 리소스를 포함하는 리소스 정의 버전을 생성합니다. 다음 예에서는 이전 단원의 암호 리소스에 세 번째 스테이징 레이블을 추가합니다.
**참고**  
더 많은 리소스를 버전에 추가하려면 `Resources` 어레이에 해당 리소스를 포함합니다.

   ```
   aws greengrass create-resource-definition --name MyGreengrassResources --initial-version '{
       "Resources": [
           {
               "Id": "my-resource-id",
               "Name": "MySecretResource",
               "ResourceDataContainer": {
                   "SecretsManagerSecretResourceData": {
                       "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:greengrass-SomeSecret-KUj89s",
                       "AdditionalStagingLabelsToDownload": [
                           "Label1",
                           "Label2",
                           "Label3"
                       ]
                   }
               }
           }
       ]
   }'
   ```

1. 암호 리소스의 ID가 변경된 경우 암호 리소스를 사용하는 커넥터 및 함수를 업데이트합니다. 새 버전에서 리소스 ID에 해당하는 파라미터 또는 속성을 업데이트합니다. 암호의 ARN이 변경된 경우 암호를 사용하는 커넥터에 대한 해당 파라미터를 변경해야 합니다.
**참고**  
리소스 ID는 고객이 제공하는 임의의 식별자입니다.

1. 코어에 보낼 각 구성 요소의 대상 버전을 포함하는 그룹 버전을 생성합니다.

1. 그룹 버전을 배포합니다.

암호 리소스, 커넥터 및 함수를 생성하고 배포하는 방법을 보여주는 자습서는 [Greengrass 커넥터 시작하기(CLI)](connectors-cli.md) 단원을 참조하십시오.

Secrets Manager에서 보안 암호를 삭제할 경우 그룹 및 해당 보안 리소스를 참조하는 커넥터 및 Lambda 함수에서 보안 리소스를 제거해야 합니다. 이렇게 하지 않으면 그룹 배포 중 AWS IoT Greengrass 는 보안 암호를 찾을 수 없다는 오류를 반환합니다. 또한 필요한 경우 Lambda 함수 코드를 업데이트합니다. 해당 암호 리소스를 포함하지 않는 리소스 정의 버전을 배포하여 로컬 암호를 제거할 수 있습니다.

## 커넥터 및 Lambda 함수에서 로컬 암호 사용
<a name="secrets-access"></a>

Greengrass 커넥터 및 Lambda 함수는 로컬 암호를 사용해 타사 서비스 및 애플리케이션과 상호 작용합니다. `AWSCURRENT` 값이 기본적으로 사용되지만 암호 리소스에 포함된 다른 [스테이징 레이블](#secret-resources-labels)의 값을 사용할 수도 있습니다.

로컬 암호에 액세스하려면 커넥터 및 함수를 구성해야 합니다. 이렇게 하면 암호 리소스가 커넥터 또는 함수와 연계됩니다.

**커넥터**  
커넥터는 로컬 암호에 액세스해야 하는 경우 암호에 액세스하는 데 필요한 정보로 구성된 파라미터를 제공합니다.  
+  AWS IoT Greengrass 콘솔에서이 작업을 수행하는 방법을 알아보려면 섹션을 참조하세요[Greengrass 커넥터 시작하기(콘솔)](connectors-console.md).
+  AWS IoT Greengrass CLI를 사용하여이 작업을 수행하는 방법을 알아보려면 섹션을 참조하세요[Greengrass 커넥터 시작하기(CLI)](connectors-cli.md).
개별 커넥터를 위한 요구 사항에 대한 자세한 내용은 [AWS에서 제공한 Greengrass 커넥터](connectors-list.md)를 참조하십시오.  
암호를 액세스하고 사용하기 위한 로직은 커넥터에 기본 제공됩니다.

**Lambda 함수**  
Lambda 함수가 로컬 암호에 액세스하도록 허용하려면 함수의 속성을 구성합니다.  
+  AWS IoT Greengrass 콘솔에서이 작업을 수행하는 방법을 알아보려면 섹션을 참조하세요[암호 리소스 생성 방법(콘솔)](secrets-console.md).
+  AWS IoT Greengrass API에서이 작업을 수행하려면 `ResourceAccessPolicies` 속성에 다음 정보를 제공합니다.
  + `ResourceId`: Greengrass 그룹에 있는 암호 리소스의 ID입니다. 해당 Secrets Manager 암호의 ARN을 참조하는 리소스입니다.
  + `Permission`: 함수가 리소스에 대해 갖는 액세스 권한 유형입니다. 암호 리소스에 대해 `ro`(읽기 전용) 권한만 지원됩니다.

  다음 예에서는 `MyApiKey` 암호 리소스에 액세스할 수 있는 Lambda 함수를 생성합니다.

  ```
  aws greengrass create-function-definition --name MyGreengrassFunctions --initial-version '{
      "Functions": [
          {
              "Id": "MyLambdaFunction",
              "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:1",
              "FunctionConfiguration": {
                  "Pinned": false,
                  "MemorySize": 16384,
                  "Timeout": 10,
                  "Environment": {
                      "ResourceAccessPolicies": [
                          {
                              "ResourceId": "MyApiKey",
                              "Permission": "ro"
                          }                          
                      ],
                      "AccessSysfs": true
                  }
              }
          }
      ]
  }'
  ```

   

  런타임 시 로컬 보안 암호에 액세스하려면 Greengrass Lambda 함수가 AWS IoT Greengrass 코어 SDK(v1.3.0 이상)의 `secretsmanager` 클라이언트에서 `get_secret_value` 함수를 호출합니다.

  다음 예제에서는 Python용 AWS IoT Greengrass Core SDK를 사용하여 보안 암호를 가져오는 방법을 보여줍니다. 여기서는 암호 이름이 `get_secret_value` 함수로 전달됩니다. `SecretId`는 (암호 리소스가 아니라) Secrets Manager 암호의 이름 또는 ARN일 수 있습니다.

  ```
  import greengrasssdk
  
  secrets_client = greengrasssdk.client("secretsmanager")
  secret_name = "greengrass-MySecret-abc"
  
  
  def function_handler(event, context):
      response = secrets_client.get_secret_value(SecretId=secret_name)
      secret = response.get("SecretString")
  ```

  텍스트 형식 암호의 경우에는 `get_secret_value` 함수가 문자열을 반환합니다. 이진수 형식 암호의 경우에는 base64 인코딩 문자열을 반환합니다.
**중요**  
사용자 정의한 Lambda 함수에서 보안 암호를 안전하게 취급해야 하고, 보안 암호에 저장된 기밀 데이터를 로그에 기록하지 말아야 합니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [Lambda 함수 로깅 및 디버깅의 위험 완화](https://docs.aws.amazon.com/secretsmanager/latest/userguide/best-practices.html#best-practice_lamda-debug-statements)를 참조하십시오. 이 설명서에서는 특별히 교체 기능을 언급하지만 권장 사항은 Greengrass Lambda 함수에도 적용됩니다.

  암호의 현재 값은 기본적으로 반환됩니다. 이는 `AWSCURRENT` 스테이징 레이블이 연결된 버전입니다. 다른 버전에 액세스하려면 선택적 `VersionStage` 인수에 대해 해당하는 스테이징 레이블의 이름을 전달합니다. 예제:

  ```
  import greengrasssdk
  
  secrets_client = greengrasssdk.client("secretsmanager")
  secret_name = "greengrass-TestSecret"
  secret_version = "MyTargetLabel"
  
  
  # Get the value of a specific secret version
  def function_handler(event, context):
      response = secrets_client.get_secret_value(
          SecretId=secret_name, VersionStage=secret_version
      )
      secret = response.get("SecretString")
  ```

  `get_secret_value`를 호출하는 다른 예제 함수는 [Lambda 함수 배포 패키지 생성](secrets-console.md#secrets-console-create-deployment-package)를 참조하십시오.

# 암호 리소스 생성 방법(콘솔)
<a name="secrets-console"></a>

이 기능은 AWS IoT Greengrass 코어 v1.7 이상에서 사용할 수 있습니다.

이 자습서에서는 AWS Management Console 를 사용하여 Greengrass 그룹에 *보안 암호 리소스를* 추가하는 방법을 보여줍니다. 보안 암호 리소스는의 보안 암호에 대한 참조입니다 AWS Secrets Manager. 자세한 내용은 [AWS IoT Greengrass 코어에 보안 암호 배포](secrets.md) 단원을 참조하십시오.

 AWS IoT Greengrass 코어 디바이스에서 커넥터와 Lambda 함수는 암호, 토큰 또는 기타 자격 증명을 하드 코딩하지 않고도 보안 암호 리소스를 사용하여 서비스 및 애플리케이션으로 인증할 수 있습니다.

이 자습서에서는 먼저 AWS Secrets Manager 콘솔에서 보안 암호를 생성합니다. 그 다음에는 AWS IoT Greengrass 콘솔에서 그룹 **리소스** 페이지의 Greengrass 그룹에 암호 리소스를 추가합니다. 이 암호 리소스는 Secrets Manager 암호를 참조합니다. 이후에는 암호 리소스를 Lambda 함수에 연결하는데, 이를 통해 함수가 로컬 암호 값을 가져올 수 있습니다.

**참고**  
대안으로, 커넥터 또는 Lambda 함수를 구성할 때 콘솔에서 보안 암호와 보안 암호 리소스를 생성할 수도 있습니다. 커넥터의 **파라미터 구성** 페이지 또는 Lambda 함수의 **리소스** 페이지에서 이 작업을 수행할 수 있습니다.  
암호에 대한 파라미터를 포함하는 커넥터에서만 암호에 액세스할 수 있습니다. Twilio Notifications 커넥터에서 로컬로 저장된 인증 토큰을 사용하는 방법을 보여주는 자습서는 [Greengrass 커넥터 시작하기(콘솔)](connectors-console.md)을 참조하십시오.

자습서에는 다음과 같은 상위 수준 단계가 포함됩니다.

1. [Secrets Manager 보안 암호 생성](#secrets-console-create-secret)

1. [그룹에 보안 암호 리소스 추가](#secrets-console-create-resource)

1. [Lambda 함수 배포 패키지 생성](#secrets-console-create-deployment-package)

1. [Lambda 함수 생성](#secrets-console-create-function)

1. [그룹에 함수 추가](#secrets-console-create-gg-function)

1. [암호 리소스의 함수 연결](#secrets-console-affiliate-gg-function)

1. [그룹에 구독 추가](#secrets-console-create-subscription)

1. [그룹 배포](#secrets-console-create-deployment)

1. [Lambda 함수 테스트](#secrets-console-test-solution)

이 자습서를 완료하는 데 약 20분 정도 걸립니다.

## 사전 조건
<a name="secrets-console-prerequisites"></a>

이 자습서를 완료하려면 다음이 필요합니다.
+ Greengrass 그룹 및 Greengrass 코어(v1.7 이상). Greengrass 그룹 및 코어를 생성하는 방법에 대해 알아보려면 [시작하기 AWS IoT Greengrass](gg-gs.md)단원을 참조하십시오. 시작하기 자습서에는 AWS IoT Greengrass 코어 소프트웨어 설치 단계도 포함되어 있습니다.
+ AWS IoT Greengrass 는 로컬 보안 암호를 지원하도록 구성되어야 합니다. 자세한 내용은 [암호 요구 사항](secrets.md#secrets-reqs)을 참조하십시오.
**참고**  
이 요구 사항에는 Secrets Manager 암호에 대한 액세스 허용이 포함됩니다. 기본 Greengrass 서비스 역할을 사용 중인 경우 는 이미 *greengrass-*로 시작하는 이름을 가진 암호에 액세스할 수 있습니다.
+ 로컬 보안 암호의 값을 가져오려면 사용자 정의 Lambda 함수가 AWS IoT Greengrass 코어 SDK v1.3.0 이상을 사용해야 합니다.

## 1단계: Secrets Manager 보안 암호 생성
<a name="secrets-console-create-secret"></a>

이 단계에서는 AWS Secrets Manager 콘솔을 사용하여 보안 암호를 생성합니다.

1. <a name="create-secret-step-signin"></a>[AWS Secrets Manager 콘솔](https://console.aws.amazon.com/secretsmanager/)에 로그인합니다.
**참고**  
이 프로세스에 대한 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [1단계: 비밀 만들기 및 AWS Secrets Manager에 저장](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)을 참조하십시오.

1. <a name="create-secret-step-create"></a>**새 보안 암호 저장**을 선택합니다.

1. <a name="create-secret-step-othertype"></a>**암호 유형 선택**에서 **다른 암호 유형**을 선택합니다.

1. **이 보안 암호에 저장할 키-값 쌍 지정**에서 다음을 수행합니다.
   + **키(Key)**에 **test**를 입력합니다.
   + **값**에 **abcdefghi**을(를) 입력합니다.

1. <a name="create-secret-step-encryption"></a>암호화 키로 **aws/secretsmanager**가 선택된 상태를 유지하고 **다음**을 선택합니다.
**참고**  
Secrets Manager가 계정에 생성하는 기본 AWS 관리형 키를 사용하는 AWS KMS 경우에서 요금이 부과되지 않습니다.

1. **Secret name(보안 암호 이름)**에 **greengrass-TestSecret**을 입력한 후 **다음**을 선택합니다.
**참고**  
기본적으로 Greengrass 서비스 역할은가 *greengrass-*로 시작하는 이름으로 보안 암호 값을 가져오 AWS IoT Greengrass 도록 허용합니다. 자세한 내용은 [암호 요구 사항](secrets.md#secrets-reqs)을 참조하십시오.

1. <a name="create-secret-step-rotation"></a>이 자습서에서는 교체할 필요가 없으므로 자동 교체 비활성화를 선택하고 **다음**을 선택합니다.

1. <a name="create-secret-step-review"></a>**Review(검토)** 페이지에서 설정을 검토한 다음 **Store(저장)**를 선택합니다.

   이제 해당 암호를 참조하는 암호 리소스를 Greengrass 그룹에 생성합니다.

## 2단계: Greengrass 그룹에 보안 암호 리소스 추가
<a name="secrets-console-create-resource"></a>

이 단계에서는 Secrets Manager 암호를 참조하는 그룹 리소스를 구성합니다.

1. <a name="console-gg-groups"></a> AWS IoT 콘솔 탐색 창의 **관리**에서 **Greengrass 디바이스**를 확장한 다음 **그룹(V1)을** 선택합니다.

1. <a name="create-secret-resource-step-choosegroup"></a>암호 리소스를 추가할 그룹을 선택합니다.

1. <a name="create-secret-resource-step-secretstab"></a>그룹 구성 페이지에서 **리소스** 탭을 선택한 다음 **비밀** 섹션까지 아래로 스크롤합니다. **비밀** 섹션에 그룹에 속하는 비밀 리소스가 표시됩니다. 이 섹션에서 암호 리소스를 추가, 편집, 제거할 수 있습니다.
**참고**  
대안으로, 커넥터 또는 Lambda 함수를 구성할 때 콘솔에서 보안 암호와 보안 암호 리소스를 생성할 수도 있습니다. 커넥터의 **파라미터 구성** 페이지 또는 Lambda 함수의 **리소스** 페이지에서 이 작업을 수행할 수 있습니다.

1. <a name="create-secret-resource-step-addsecretresource"></a>**비밀** 섹션에서 **추가**를 선택합니다.

1. **비밀 리소스 추가** 페이지에서 **리소스 이름**에 **MyTestSecret**을(를) 입력합니다.

1. **비밀**에서 **greengrass-TestSecret**을 선택합니다.

1. <a name="create-secret-resource-step-selectlabels"></a>**레이블 선택(선택 사항)** 섹션에서 AWSCURRENT 스테이징 레이블은 비밀의 최신 버전을 나타냅니다. 이 레이블은 암호 리소스에 항상 포함되어 있습니다.
**참고**  
이 자습서에서는 AWSCURRENT 레이블만 있으면 됩니다. Lambda 함수 또는 커넥터에 필요한 레이블을 선택적으로 포함시킬 수 있습니다.

1. **리소스 추가**를 선택합니다.

## 3단계: Lambda 함수 배포 패키지 생성
<a name="secrets-console-create-deployment-package"></a>

Lambda 함수를 생성하려면 먼저 함수 코드와 종속성을 포함하는 Lambda 함수 *배포 패키지*를 생성해야 합니다. Greengrass Lambda 함수는 코어 환경에서 MQTT 메시지와 통신하고 로컬 비밀에 액세스하는 등의 작업을 위해 [AWS IoT Greengrass Core SDK](lambda-functions.md#lambda-sdks-core)가 필요합니다. 이 자습서는 Python 함수를 생성하므로 배포 패키지의 Python 버전 SDK를 사용할 수 있습니다.

**참고**  
로컬 보안 암호의 값을 가져오려면 사용자 정의 Lambda 함수가 AWS IoT Greengrass 코어 SDK v1.3.0 이상을 사용해야 합니다.

1. <a name="download-ggc-sdk"></a> [AWS IoT Greengrass 코어 SDK](what-is-gg.md#gg-core-sdk-download) 다운로드 페이지에서 Python용 AWS IoT Greengrass 코어 SDK를 컴퓨터에 다운로드합니다.

1. <a name="unzip-ggc-sdk"></a>다운로드한 패키지의 압축을 풀어 SDK를 가져옵니다. SDK는 `greengrasssdk` 폴더입니다.

1. `secret_test.py`이라는 로컬 파일에 다음과 같은 Python 코드 함수를 저장합니다.

   ```
   import greengrasssdk
   
   secrets_client = greengrasssdk.client("secretsmanager")
   iot_client = greengrasssdk.client("iot-data")
   secret_name = "greengrass-TestSecret"
   send_topic = "secrets/output"
   
   
   def function_handler(event, context):
       """
       Gets a secret and publishes a message to indicate whether the secret was
       successfully retrieved.
       """
       response = secrets_client.get_secret_value(SecretId=secret_name)
       secret_value = response.get("SecretString")
       message = (
           f"Failed to retrieve secret {secret_name}."
           if secret_value is None
           else f"Successfully retrieved secret {secret_name}."
       )
       iot_client.publish(topic=send_topic, payload=message)
       print("Published: " + message)
   ```

   `get_secret_value` 함수는 `SecretId` 값에 암호의 이름 또는 ARN을 지원합니다. 이 예에서는 암호 이름을 사용합니다. 이 예제 보안 암호의 경우는 키-값 페어를 AWS IoT Greengrass 반환합니다`{"test":"abcdefghi"}`.
**중요**  
사용자 정의한 Lambda 함수에서 보안 암호를 안전하게 취급해야 하고, 보안 암호에 저장된 기밀 데이터를 로그에 기록하지 말아야 합니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [Lambda 함수 로깅 및 디버깅의 위험 완화](https://docs.aws.amazon.com/secretsmanager/latest/userguide/best-practices.html#best-practice_lamda-debug-statements)를 참조하십시오. 이 설명서에서는 특별히 교체 기능을 언급하지만 권장 사항은 Greengrass Lambda 함수에도 적용됩니다.

1. 다음 항목을 `secret_test_python.zip`라는 파일로 압축합니다. ZIP 파일을 만들 때 상위 폴더가 아닌 코드 및 종속성만 포함합니다.
   + **secret\$1test.py**. 앱 로직.
   + **greengrasssdk**. 모든 Python Greengrass Lambda 함수에 대한 필수 라이브러리입니다.

   이것이 Lambda 함수 배포 패키지입니다.

## 4단계: Lambda 함수 생성
<a name="secrets-console-create-function"></a>

이 단계에서는 AWS Lambda 콘솔을 사용하여 Lambda 함수를 생성하고 배포 패키지를 사용하도록 구성합니다. 그런 다음 함수 버전을 게시하고 별칭을 생성합니다.

1. 먼저, Lambda 함수를 생성합니다.

   1. <a name="lambda-console-open"></a>에서 AWS Management Console**서비스를** 선택하고 AWS Lambda 콘솔을 엽니다.

   1. <a name="lambda-console-create-function"></a>**함수 생성**을 선택한 다음 **새로 작성**을 선택합니다.

   1. **기본 정보** 섹션에서 다음 값을 사용합니다.
      + [**함수 이름**]에 **SecretTest**을 입력합니다.
      + **실행 시간**에서 **Python 3.7**을 선택합니다.
      + **권한**의 경우, 기본 설정을 유지합니다. 이를 통해 기본 Lambda 권한을 부여하는 실행 역할을 생성합니다. 이 역할은에서 사용되지 않습니다 AWS IoT Greengrass.

   1. <a name="lambda-console-save-function"></a>페이지 하단에서 **함수 생성**을 선택합니다.

1. 이제 핸들러를 등록하고 Lambda 함수 배포 패키지를 업로드합니다.

   1. <a name="lambda-console-upload"></a>**코드** 탭의 **코드 소스**에서 **다음에서 업로드**를 선택합니다. 드롭다운에서 **.zip 파일**을 선택합니다.  
![\[.zip 파일이 강조 표시된 드롭다운의 업로드.\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. **업로드**를 선택한 다음 `secret_test_python.zip` 배포 패키지를 선택합니다. 그런 다음 **저장**을 선택합니다.

   1. <a name="lambda-console-runtime-settings-para"></a>함수의 **코드** 탭에 있는 **런타임 설정**에서 **편집**을 선택하고 다음 값을 입력합니다.
      + **실행 시간**에서 **Python 3.7**을 선택합니다.
      + **핸들러**에 **secret\$1test.function\$1handler**를 입력합니다.

   1. <a name="lambda-console-save-config"></a>**저장**을 선택합니다.
**참고**  
 AWS Lambda 콘솔의 **테스트** 버튼은이 함수에서 작동하지 않습니다. AWS IoT Greengrass 코어 SDK에는 AWS Lambda 콘솔에서 Greengrass Lambda 함수를 독립적으로 실행하는 데 필요한 모듈이 포함되어 있지 않습니다. 이러한 모듈(예: `greengrass_common`)은 Greengrass 코어에 배포된 후 함수에 제공됩니다.

1. 이제 Lambda 함수의 첫 번째 버전을 게시하고 [버전의 별칭](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)을 생성합니다.
**참고**  
Greengrass 그룹은 별칭(권장) 또는 버전을 기준으로 Lambda 함수를 참조할 수 있습니다. 별칭을 사용하면 함수 코드를 업데이트할 때 구독 테이블이나 그룹 정의를 변경할 필요가 없으므로 코드 업데이트를 더 쉽게 관리할 수 있습니다. 그 대신 새 함수 버전에 대한 별칭을 가리킵니다.

   1. <a name="shared-publish-function-version"></a>[**Actions**] 메뉴에서 [**Publish new revision**]을 선택합니다.

   1. <a name="shared-publish-function-version-description"></a>**버전 설명**에 **First version**을 입력한 후 **게시**를 선택합니다.

   1. **SecretTest: 1** 구성 페이지의 **작업** 메뉴에서 **별칭 생성**을 선택합니다.

   1. [**Create a new alias**] 페이지에서 다음 값을 사용합니다.
      + **이름**에 **GG\$1SecretTest**을 입력합니다.
      + **버전**에서 **1**을 선택합니다.
**참고**  
AWS IoT Greengrass 는 **\$1LATEST** 버전에 대해 Lambda 별칭을 지원하지 않습니다.

   1. **생성(Create)**을 선택합니다.

이제 Greengrass 그룹에 Lambda 함수를 추가하고 암호 리소스를 연결할 준비가 되었습니다.

## 5단계: Greengrass 그룹에 함수 추가
<a name="secrets-console-create-gg-function"></a>

 AWS IoT 이 단계에서는 의 Greengrass 그룹에 Lambda 함수를 추가합니다.

1. <a name="choose-add-lambda"></a>그룹 구성 페이지에서 **Lambda 함수** 탭을 선택합니다.

1. **내 Lambda 함수** 섹션에서 **추가**를 선택합니다.

1. **Lambda 함수**의 경우 **SecretTest**를 선택합니다.

1. **Lambda 함수 버전**에서 게시한 버전에 대한 별칭을 선택합니다.

그런 다음 Lambda 함수의 수명 주기를 구성합니다.

1. **Lambda 함수 구성** 섹션에서 다음과 같이 업데이트하십시오.
**참고**  
 비즈니스 사례에서 요구하지 않는 한 컨테이너화 없이 Lambda 함수를 실행하는 것이 좋습니다. 이렇게 하면 장치 리소스를 구성하지 않고도 장치 GPU와 카메라에 액세스할 수 있습니다. 컨테이너화 없이를 실행하는 경우 AWS IoT Greengrass Lambda 함수에 대한 루트 액세스 권한도 부여해야 합니다.

   1. **컨테이너화 없이 실행하려면:**
      + **시스템 사용자 및 그룹**의 경우 **Another user ID/group ID**을(를) 선택합니다. **시스템 사용자 ID**에 **0**을(를) 입력합니다. **시스템 그룹 ID**에 **0**을(를) 입력합니다.

        이렇게 하면 Lambda 함수를 루트로 실행할 수 있습니다. 작업 실행 방법에 대한 자세한 내용은 [그룹에 있는 Lambda 함수의 기본 액세스 자격 증명 설정](lambda-group-config.md#lambda-access-identity-groupsettings) 섹션을 참조하세요.
**작은 정보**  
또한 Lambda 함수에 루트 액세스 권한을 부여하도록 `config.json` 파일을 업데이트해야 합니다. 이 절차는 [루트로서의 Lambda 함수 실행](lambda-group-config.md#lambda-running-as-root) 섹션을 참조하세요.
      + **Lambda 함수 컨테이너화**의 경우 **컨테이너 없음**을 선택합니다.

        속도 제어 자동화 실행에 대한 자세한 내용은 [Lambda 함수 컨테이너화 선택 시 고려 사항](lambda-group-config.md#lambda-containerization-considerations) 섹션을 참조하세요.
      + **시간 제한**에 **10 seconds**를 입력합니다.
      + **고정된** 경우 **True**를 선택합니다.

        자세한 내용은 [Greengrass Lambda 함수의 라이프사이클 구성](lambda-functions.md#lambda-lifecycle) 단원을 참조하십시오.
      + **추가 매개 변수**에서 **/sys 디렉터리에 대한 읽기 액세스**에 대해 **활성화**를 선택합니다.

   1.  **대신 컨테이너화 모드에서 실행하려면:** 
**참고**  
비즈니스 사례에서 요구하는 경우가 아니면 컨테이너화 모드에서 실행하지 않는 것이 좋습니다.
      + **시스템 사용자 및 그룹**의 경우 **그룹 기본값 사용**을 선택합니다.
      + **Lambda 함수 컨테이너화**의 경우 **그룹 기본값 사용**을 선택합니다.
      + **메모리 제한**에 **1024 MB**를 입력합니다.
      + **시간 제한**에 **10 seconds**를 입력합니다.
      + **고정된** 경우 **True**를 선택합니다.

        자세한 내용은 [Greengrass Lambda 함수의 라이프사이클 구성](lambda-functions.md#lambda-lifecycle) 단원을 참조하십시오.
      + **추가 매개 변수**에서 **/sys 디렉터리에 대한 읽기 액세스**에 대해 **활성화**를 선택합니다.

1.  **Lambda 함수 추가**를 선택합니다.

그 다음에는 암호 리소스를 함수에 연계합니다.

## 6단계: 암호 리소스를 Lambda 함수에 연결합니다.
<a name="secrets-console-affiliate-gg-function"></a>

이 단계에서는 암호 리소스를 Greengrass 그룹의 Lambda 함수에 연결합니다. 그러면 리소스가 함수에 연결되는데, 이를 통해 함수가 로컬 암호 값을 가져올 수 있습니다.

1. 그룹 구성 페이지에서 **Lambda 함수** 탭을 선택합니다.

1. **SecretTest** 함수를 선택합니다.

1. 함수의 세부정보 페이지에서 **리소스**를 선택합니다.

1. **비밀** 섹션으로 스크롤하여 **연결**을 선택합니다.

1. **MyTestSecret**을 선택한 다음 **연결**을 선택합니다.

## 7단계: Greengrass 그룹에 구독 추가
<a name="secrets-console-create-subscription"></a>

이 단계에서는 AWS IoT 및 Lambda 함수가 메시지를 교환하도록 허용하는 구독을 추가합니다. 구독 1개는 AWS IoT 가 함수를 호출하도록 허용하고, 구독 1개는 함수가 출력 데이터를 전송할 수 있도록 허용합니다 AWS IoT.

1. <a name="shared-subscriptions-addsubscription"></a>그룹 구성 페이지에서 **구독** 탭을 선택한 다음 **구독 추가**를 선택합니다.

1. 가 함수 AWS IoT 에 메시지를 게시하도록 허용하는 구독을 생성합니다.

   그룹 구성 페이지에서 **구독**을 선택한 다음 **구독 추가**를 선택합니다.

1. **구독 생성** 페이지에서 다음과 같이 원본과 대상을 구성합니다.

   1. **소스 유형**에서 **Lambda 함수**를 선택한 다음 **IoT Cloud**를 선택합니다.

   1. **대상 유형**에서 **서비스**를 선택한 다음 **SecretTest**를 선택합니다.

   1. **주제 필터**에서 **secrets/input**을(를) 입력한 다음 **구독 생성**을 선택합니다.

1. 두 번째 구독을 추가합니다. **구독** 탭을 선택하고 **구독 추가**를 선택한 다음, 다음과 같이 원본과 대상을 구성합니다.

   1. **소스 유형**에서 **서비스**를 선택한 다음 **SecretTest**를 선택합니다.

   1. **대상 유형**에서 **Lambda 함수**를 선택한 다음 **IoT Cloud**를 선택합니다.

   1. **주제 필터**에서 **secrets/output**을(를) 입력한 다음 **구독 생성**을 선택합니다.

## 8단계: Greengrass 그룹 배포
<a name="secrets-console-create-deployment"></a>

코어 장치에 그룹을 배포합니다. 배포 중에는 Secrets Manager에서 보안 암호 값을 AWS IoT Greengrass 가져오고 코어에 암호화된 로컬 복사본을 생성합니다.

1. <a name="shared-deploy-group-checkggc"></a> AWS IoT Greengrass 코어가 실행 중인지 확인합니다. 필요한 경우 Raspberry Pi 터미널에서 다음 명령을 실행합니다.

   1. 대몬(daemon)이 실행 중인지 확인하려면:

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      출력에 `root`에 대한 `/greengrass/ggc/packages/ggc-version/bin/daemon` 입력이 포함되어 있는 경우에는 대몬(daemon)이 실행 중인 것입니다.
**참고**  
경로의 버전은 AWS IoT Greengrass 코어 디바이스에 설치된 코어 소프트웨어 버전에 따라 다릅니다.

   1. 대몬(daemon)을 시작하려면:

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. <a name="shared-deploy-group-deploy"></a>그룹 구성 페이지에서 **배포**를 선택합니다.

1. <a name="shared-deploy-group-ipconfig"></a>

   1. **Lambda 함수** 탭의 **시스템 Lambda 함수** 섹션에서 **IP 감지기**를 선택하고 **편집**을 선택합니다.

   1. **IP 감지기 설정 편집** 대화 상자에서 **MQTT 브로커 엔드포인트 자동 탐지 및 재정의**를 선택합니다.

   1. **저장**을 선택합니다.

      이렇게 하면 장치가 IP 주소, DNS, 포트 번호 등 코어의 연결 정보를 자동으로 획득할 수 있습니다. 자동 감지가 권장되지만 수동으로 지정된 엔드포인트 AWS IoT Greengrass 도 지원합니다. 그룹이 처음 배포될 때만 검색 방법 메시지가 표시됩니다.
**참고**  
메시지가 표시되면 [Greengrass 서비스 역할을](service-role.md) 생성하고 이를 현재의와 연결할 AWS 계정 수 있는 권한을 부여합니다 AWS 리전. 이 역할을 통해 AWS IoT Greengrass 는 AWS 서비스의 리소스에 액세스할 수 있습니다.

      **배포** 페이지에 배포 타임스탬프, 버전 ID, 상태가 표시됩니다. 완료되면 배포에 대해 **성공적으로 완료했습니다** 상태가 표시되어야 합니다.

      문제 해결에 대한 도움말은 [문제 해결 AWS IoT Greengrass](gg-troubleshooting.md) 섹션을 참조하세요.

## Lambda 함수 테스트
<a name="secrets-console-test-solution"></a>

1. <a name="choose-test-page"></a> AWS IoT 콘솔 홈 페이지에서 **테스트를** 선택합니다.

1. **구독**에서 다음 값을 사용한 다음 **주제 구독**을 선택합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/secrets-console.html)

1. **주제 게시**에서 다음 값을 사용한 후 **게시**를 선택하여 함수를 간접 호출합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/secrets-console.html)

   성공하면 함수가 "성공" 메시지를 게시합니다.

## 다음 사항도 참조하세요.
<a name="secrets-console-see-also"></a>
+ [AWS IoT Greengrass 코어에 보안 암호 배포](secrets.md)