AWS IoT Greengrass 코어에 암호 배포 - 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 IoT Greengrass 코어 v1.7 이상에 사용할 수 있습니다.

AWS IoT Greengrass를 사용하면 하드 코딩된 암호, 토큰 또는 기타 암호를 사용하지 않고도 Greengrass 디바이스의 서비스와 애플리케이션에 인증할 수 있습니다.

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

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

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

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

AWS IoT Greengrass는 AWS Secrets Manager에서 암호를 가져와서 코어 디바이스에 암호 리소스로 배포합니다. 그러면 커넥터 및 Lambda 함수에서 암호를 사용할 수 있습니다.

AWS IoT Greengrass를 사용하여 로컬로 암호를 저장하는 경우 다음과 같은 이점이 있습니다.

  • 코드에서 분리됨(하드 코딩되지 않음). 중앙에서 관리되는 자격 증명을 지원하며 민감한 데이터를 손상 위험으로부터 보호할 수 있습니다.

  • 오프라인 시나리오에 사용할 수 있습니다. 인터넷 연결이 끊어진 상태에서 커넥터와 함수가 로컬 서비스 및 소프트웨어에 안전하게 액세스할 수 있습니다.

  • 암호에 제어된 액세스. 그룹에서 승인된 커넥터와 함수만 암호에 액세스할 수 있습니다. AWS IoT Greengrass는 프라이빗 키 암호화를 사용하여 암호를 보호합니다. 암호는 전송 및 저장 상태에서 암호화됩니다. 자세한 내용은 암호 암호화 섹션을 참조하세요.

  • 제어된 회전. Secrets Manager에서 암호를 교체한 후 Greengrass 그룹을 다시 배포하여 암호의 로컬 사본을 업데이트합니다. 자세한 내용은 보안 암호 생성 및 관리 섹션을 참조하세요.

    중요

    AWS IoT Greengrass는 클라우드 버전 교체 후 로컬 암호 값을 자동으로 업데이트하지 않습니다. 로컬 값을 업데이트하려면 그룹을 다시 배포해야 합니다.

암호 암호화

AWS IoT Greengrass는 전송 및 유휴 상태의 암호를 암호화합니다.

중요

사용자 정의한 Lambda 함수에서 보안 암호를 안전하게 취급해야 하고, 보안 암호에 저장된 기밀 데이터를 로그에 기록하지 말아야 합니다. 자세한 내용은 AWS Secrets Manager 사용 설명서Lambda 함수 로깅 및 디버깅의 위험 완화를 참조하십시오. 이 설명서에서는 특별히 교체 기능을 언급하지만 권장 사항은 Greengrass Lambda 함수에도 적용됩니다.

전송 중 데이터 암호화

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

저장된 데이터 암호화

AWS IoT Greengrass는 config.json에 지정된 프라이빗 키를 사용해 코어에 저장된 암호를 암호화합니다. 이 때문에 로컬 암호를 보호하려면 프라이빗 키의 보안 스토리지가 필요합니다. AWS 공동 책임 모델에서는 코어 디바이스에서 프라이빗 키의 보안 스토리지를 보장할 책임이 고객에게 있습니다.

AWS IoT Greengrass는 두 가지 프라이빗 키 스토리지 모드를 지원합니다.

  • 하드웨어 보안 모듈 사용 자세한 내용은 하드웨어 보안 통합 섹션을 참조하세요.

    참고

    현재 AWS IoT Greengrass는 하드웨어 기반 프라이빗 키를 사용할 경우 로컬 보안 암호의 암호화 및 해독에 PKCS#1 v1.5 패딩 메커니즘만 지원합니다. 공급업체에서 제공한 지침에 따라 하드웨어 기반 프라이빗 키를 수동으로 생성하는 경우, PKCS#1 v1.5를 선택해야 합니다. AWS IoT Greengrass는 OAEP(Optimal Asymmetric Encryption Padding)를 지원하지 않습니다.

  • 파일 시스템 권한 사용(기본값)

프라이빗 키는 로컬 암호를 암호화하는 데 사용되는 데이터 키를 보호하는 데 사용됩니다. 데이터 키는 각 그룹 배포로 교체됩니다.

AWS IoT Greengrass는 프라이빗 키에 액세스할 수 있는 유일한 엔터티입니다. 암호 리소스와 연계된 Greengrass 커넥터 또는 Lambda 함수는 코어에서 암호의 값을 가져옵니다.

요구 사항

로컬 암호 지원을 위한 요구 사항은 다음과 같습니다.

  • AWS IoT Greengrass Core v1.7 이상을 사용하고 있어야 합니다.

  • 로컬 비밀 값을 가져오려면 사용자 정의 Lambda 함수가 AWS IoT Greengrass 코어 SDK v1.3.0 이상을 사용해야 합니다.

  • 로컬 암호 암호화에 사용되는 프라이빗 키를 Greengrass 구성 파일에서 지정해야 합니다. 기본적으로 AWS IoT Greengrass는 파일 시스템에 저장된 코어 프라이빗 키를 사용합니다. 사용자 본인의 프라이빗 키를 제공하려면 암호 암호화를 위한 프라이빗 키 지정 섹션을 참조하십시오. RSA 키 유형만 지원됩니다.

    참고

    현재 AWS IoT Greengrass는 하드웨어 기반 프라이빗 키를 사용할 경우 로컬 보안 암호의 암호화 및 해독에 PKCS#1 v1.5 패딩 메커니즘만 지원합니다. 공급업체에서 제공한 지침에 따라 하드웨어 기반 프라이빗 키를 수동으로 생성하는 경우, PKCS#1 v1.5를 선택해야 합니다. AWS IoT Greengrass는 OAEP(Optimal Asymmetric Encryption Padding)를 지원하지 않습니다.

  • AWS IoT Greengrass에 암호 값을 가져올 수 있는 권한을 부여해야 합니다. 그러면 AWS IoT Greengrass가 그룹 배포 중에 값을 가져올 수 있습니다. 기본 Greengrass 서비스 역할을 사용 중인 경우 AWS IoT Greengrass는 이미 greengrass-로 시작하는 이름을 가진 암호에 액세스할 수 있습니다. 액세스를 사용자 지정하려면 AWS IoT Greengrass의 암호 값 가져오기 허용을 참조하십시오.

    참고

    권한을 사용자 지정하는 경우에도 이 명령 규칙을 사용하여 AWS IoT Greengrass가 액세스할 수 있는 암호를 식별하는 것이 좋습니다. 콘솔에서는 다른 권한을 사용하여 암호를 판독하므로 AWS IoT Greengrass가 가져올 권한이 없는 암호를 콘솔에서 선택할 수 있습니다. 명명 규칙을 사용하면 배포 오류가 발생하는 권한 충돌을 방지할 수 있습니다.

암호 암호화를 위한 프라이빗 키 지정

이 절차에서는 로컬 보안 암호화에 사용되는 프라이빗 키의 경로를 제공합니다. 이는 최소 2048비트 길이의 RSA 키여야 합니다. AWS IoT Greengrass 코어에서 사용되는 프라이빗 키에 대한 자세한 내용은 AWS IoT Greengrass 핵심 보안 원칙 섹션을 참조하세요.

AWS IoT Greengrass에서는 두 가지 프라이빗 키 스토리지 모드인 하드웨어 기반 또는 파일 시스템 기반(기본값)을 지원합니다. 자세한 내용은 암호 암호화 섹션을 참조하세요.

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

  1. /greengrass-root/config 디렉터리에 있는 config.json 파일은 여십시오.

    참고

    greengrass-root는 디바이스에서 AWS IoT Greengrass 코어 소프트웨어가 설치된 경로를 나타냅니다. 일반적으로 이는 /greengrass 디렉터리입니다.

  2. crypto.principals.SecretsManager 객체에서 privateKeyPath 속성에 프라이빗 키의 경로를 입력합니다.

    • 프라이빗 키가 파일 시스템에 저장된 경우 키의 절대 경로를 지정합니다. 예:

      "SecretsManager" : { "privateKeyPath" : "file:///somepath/hash.private.key" }
    • 프라이빗 키가 HSM(하드웨어 보안 모듈)에 저장되는 경우, RFC 7512 PKCS#11 URI 체계를 사용해 경로를 지정합니다. 예:

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

      자세한 내용은 AWS IoT Greengrass 코어에 대한 하드웨어 보안 구성 섹션을 참조하세요.

      참고

      현재 AWS IoT Greengrass는 하드웨어 기반 프라이빗 키를 사용할 경우 로컬 보안 암호의 암호화 및 해독에 PKCS#1 v1.5 패딩 메커니즘만 지원합니다. 공급업체에서 제공한 지침에 따라 하드웨어 기반 프라이빗 키를 수동으로 생성하는 경우, PKCS#1 v1.5를 선택해야 합니다. AWS IoT Greengrass는 OAEP(Optimal Asymmetric Encryption Padding)를 지원하지 않습니다.

AWS IoT Greengrass의 암호 값 가져오기 허용

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

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

  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 또는 이름을 사용합니다.

  2. secretsmanager:GetSecretValue 작업을 허용하는 인라인 정책을 추가합니다. 지침은 IAM 사용 설명서IAM 정책 추가 및 제거를 참조하십시오.

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:account-id:secret:greengrass-SecretA-abc", "arn:aws:secretsmanager:region:account-id:secret:greengrass-SecretB-xyz" ] } ] }
    참고

    고객 관리형 AWS KMS 키를 사용해 암호를 암호화할 경우, Greengrass 서비스 역할이 kms:Decrypt 작업을 허용해야 합니다.

Secrets Manager의 IAM 정책에 대한 자세한 내용은 AWS Secrets Manager 사용 설명서AWS Secrets Manager에 대한 인증 및 액세스 제어AWS Secrets Manager에 대한 IAM 정책 또는 보안 정책에서 사용할 수 있는 작업, 리소스 및 컨텍스트 키를 참조하십시오.

다음 사항도 참조하세요.