암호 리소스 작업 - AWS IoT Greengrass

다음에 대한 설명서를 보고 있습니다.AWS IoT Greengrass Version 1.AWS IoT Greengrass Version 2의 최신 주요 버전입니다AWS IoT Greengrass. 사용에 관한 자세한 내용은 단원을 참조하십시오.AWS IoT Greengrass V2에 대한 자세한 내용은AWS IoT Greengrass Version 2개발자 안내서.

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

암호 리소스 작업

AWS IoT Greengrass는 암호 리소스를 사용해 AWS Secrets Manager의 암호를 Greengrass 그룹으로 통합합니다. 암호 리소스는 암호 Secrets Manager 에 대한 참조입니다. 자세한 내용은 AWS IoT Greengrass 코어에 암호 배포 섹션을 참조하세요.

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

보안 암호 생성 및 관리

Greengrass 그룹에서 암호 리소스는 암호 Secrets Manager 의 ARN 참조합니다. 암호 리소스가 코어에 배포되면 암호의 값이 암호화되어 연계된 커넥터 및 Lambda 함수에서 사용할 수 있게 됩니다. 자세한 내용은 암호 암호화 섹션을 참조하세요.

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

중요

암호 교체 모범 사례를 따르는 것이 좋습니다. 그런 다음 Greengrass 그룹을 배포하여 암호의 로컬 사본을 업데이트합니다. 자세한 내용은 단원을 참조하십시오.을 회전시켜 주는AWS Secrets Manager보안 암호AWS Secrets Manager사용 설명서.

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

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

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

  3. 커넥터 또는 Lambda 함수를 구성합니다. 해당 파라미터 또는 속성을 지정하여 리소스를 커넥터 또는 함수와 연계해야 합니다. 그러면 함수를 사용하여 로컬로 배포된 암호 리소스의 값을 가져올 수 있습니다. 자세한 내용은 커넥터 및 Lambda 함수에서 로컬 암호 사용 섹션을 참조하세요.

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

Secrets Manager 이벤트를AWS CloudTrail매번 그AWS IoT Greengrass는 암호 값을 검색합니다.AWS IoT Greengrass는 로컬 암호의 배포 또는 사용과 관련된 이벤트를 기록하지 않습니다. 보안 Secrets Manager 로깅에 대한 자세한 내용은 단원을 참조하십시오.의 사용을 모니터링하여AWS Secrets Manager보안 암호AWS Secrets Manager사용 설명서.

암호 리소스에 스테이징 레이블 포함

Secrets Manager 는 스테이징 레이블을 사용하여 암호 값의 특정 버전을 식별합니다. 스테이징 레이블은 시스템에서 정의하거나 사용자가 정의할 수 있습니다. Secrets ManagerAWSCURRENT레이블을 보안 암호 값의 최신 버전으로 변경합니다. 스테이징 레이블은 일반적으로 암호 교체를 관리하는 데 사용됩니다. Secrets Manager 버전 관리에 대한 자세한 내용은 단원을 참조하십시오.에 대한 주요 용어 및 개념AWS Secrets ManagerAWS Secrets Manager사용 설명서.

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

암호 리소스 생성 및 관리(콘솔)

암호 리소스 생성(콘솔)

에서AWS IoT Greengrass콘솔에서 보안 리소스를 만들고 관리할 수 있습니다.보안 암호그룹의 그룹에서 그룹의 탭에 있는리소스페이지를 참조하십시오. 암호 리소스를 생성하여 그룹에 추가하는 방법을 설명하는 자습서는 암호 리소스 생성 방법(콘솔)Greengrass 커넥터 시작하기(콘솔) 단원을 참조하십시오.


                    리소스 페이지의 암호 탭에 있는 암호 리소스
참고

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

암호 리소스 관리(콘솔)

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

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

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

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

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

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

암호 리소스 생성 및 관리(CLI)

암호 리소스 생성(CLI)

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

암호 리소스는 해당 암호 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)

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

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

AWS IoT Greengrass API는 버전을 사용하여 그룹을 관리합니다. 버전은 불변하므로 그룹 구성요소 (예: 그룹의 디바이스, 함수 및 리소스) 를 추가하거나 변경하려면 새 컴포넌트 또는 업데이트된 컴포넌트의 버전을 생성해야 합니다. 그런 다음 각 구성 요소의 대상 버전을 포함하는 그룹 버전을 생성하고 배포합니다. 그룹에 대한 자세한 내용은 단원을 참조하세요.AWS IoT Greengrass 그룹.

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

  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" ] } } } ] }'
  2. 암호 리소스의 ID가 변경된 경우 암호 리소스를 사용하는 커넥터 및 함수를 업데이트합니다. 새 버전에서 리소스 ID에 해당하는 파라미터 또는 속성을 업데이트합니다. 암호의 ARN이 변경된 경우 암호를 사용하는 커넥터에 대한 해당 파라미터를 변경해야 합니다.

    참고

    리소스 ID는 고객이 제공하는 임의의 식별자입니다.

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

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

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

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

커넥터 및 Lambda 함수에서 로컬 암호 사용

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

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

커넥터

커넥터는 로컬 암호에 액세스해야 하는 경우 암호에 액세스하는 데 필요한 정보로 구성된 파라미터를 제공합니다.

개별 커넥터를 위한 요구 사항에 대한 자세한 내용은 AWS-제공된 Greengrass 커넥터 단원을 참조하십시오.

암호를 액세스하고 사용하기 위한 로직은 커넥터에 기본 제공됩니다.

Lambda 함수

Greengrass Lambda 함수가 로컬 암호에 액세스하도록 허용하려면 함수의 속성을 구성합니다.

  • 이 작업을 수행하는 방법은 단원을 참조하십시오.AWS IoT Greengrass콘솔에서 단원을 참조하십시오.암호 리소스 생성 방법(콘솔).

  • AWS IoT Greengrass API에서 이 작업을 수행하려면 ResourceAccessPolicies 속성에 다음 정보를 제공합니다.

    • ResourceId: Greengrass 그룹에 있는 암호 리소스의 ID입니다. 해당 암호 Secrets Manager 의 ARN 참조하는 리소스입니다.

    • Permission: 함수가 리소스에 대해 갖는 액세스 권한 유형입니다. 암호 리소스에 대해 ro(읽기 전용) 권한만 지원됩니다.

    다음 예제에서는 Lambda 함수를 생성하여MyApiKey암호 리소스입니다.

    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 함수는 런타임에 로컬 암호에 액세스하기 위해get_secret_value함수에서 함수secretsmanager클라이언트 매니저에서 클라이언트AWS IoT Greengrass코어 SDK (v1.3.0 이상).

    다음 예에서는 사용 방법을 보여줍니다.AWS IoT GreengrassPython용 코어 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사용 설명서. 이 설명서에서는 특별히 교체 기능을 언급하지만 권장 사항은 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 함수 배포 패키지를 만듭니다.를 참조하십시오.