암호 리소스 작업 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 2023년 6월 30일에 수명 연장 단계에 들어갔습니다. AWS IoT Greengrass V1 관리형 정책에 대한 자세한 정보는 섹션을 참조하세요. 이 날짜 이후에는 기능, 개선 사항, 버그 수정 또는 보안 패치를 제공하는 업데이트가 AWS IoT Greengrass V1 릴리스되지 않습니다. 에서 실행되는 기기는 AWS IoT Greengrass V1 중단되지 않으며 계속 작동하고 클라우드에 연결됩니다. 새로운 기능이 크게 추가되고 추가 플랫폼에 대한 지원이 추가되는 으로 마이그레이션하는 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를 사용하여 암호 리소스를 생성, 관리, 배포합니다.

중요

Secrets Manager에서 암호 교체 모범 사례를 따르는 것이 좋습니다. 그런 다음 Greengrass 그룹을 배포하여 암호의 로컬 사본을 업데이트합니다. 자세한 내용은 AWS Secrets Manager 사용 설명서에서 AWS Secrets Manager 비밀 교체를 참조하세요.

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

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

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

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

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

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

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

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

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

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

암호 리소스 생성(콘솔)

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

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

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

암호 리소스 관리(콘솔)

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

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

  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 함수

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

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

  • 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 Core 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 함수 로깅 및 디버깅의 위험 완화를 참조하십시오. 이 설명서에서는 특별히 교체 기능을 언급하지만 권장 사항은 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 함수 배포 패키지 생성를 참조하십시오.