AWS IoT Greengrass에 대한 장치 인증 및 권한 부여
AWS IoT Greengrass 환경의 장치는 인증에 X.509 인증서를 사용하고 권한 부여에는 AWS IoT 정책을 사용합니다. 인증서 및 정책을 통해 장치끼리, 그리고 AWS IoT Core 및 AWS IoT Greengrass와 안전하게 연결할 수 있습니다.
X.509 인증서는 X.509 퍼블릭 키 인프라 표준을 사용하여 퍼블릭 키를 인증서에 포함된 자격 증명과 연결하는 디지털 인증서입니다. X.509 인증서는 인증 기관(CA)이라고 부르는, 신뢰할 수 있는 엔터티가 발행합니다. CA는 X.509 인증서 발행하는 데 사용되는 CA 인증서라고 하는 하나 이상의 특수 인증서를 유지 관리합니다. 인증 기관만 CA 인증서에 액세스할 수 있습니다.
AWS IoT 정책은 AWS IoT 장치에 허용되는 작업 집합을 정의합니다. 특히 MQTT 메시지 게시 및 장치 섀도우 검색과 같은 AWS IoT Core 및 AWS IoT Greengrass 데이터 플레인 작업에 대한 액세스를 허용하거나 거부합니다.
모든 장치에는 AWS IoT Core 레지스트리의 항목, AWS IoT 정책이 연결된 활성화된 X.509 인증서가 필요합니다. 장치는 두 가지 범주로 나뉩니다.
-
Greengrass 코어 디바이스
Greengrass 코어 디바이스에서는 AWS IoT Core 및 AWS IoT Greengrass에 안전하게 연결되도록 인증서 및 AWS IoT 정책을 사용합니다. 인증서 및 정책에서는 코어 디바이스에 대한 구성 요소 및 구성을 배포도 AWS IoT Greengrass에 허용됩니다.
-
클라이언트 디바이스
MQTT 클라이언트 디바이스에서는 AWS IoT Core 및 AWS IoT Greengrass 서비스에 대한 연결에 인증서와 정책이 사용됩니다. 그러면 클라이언트 디바이스에서는 Greengrass 코어 디바이스 찾기 및 연결에 AWS IoT Greengrass 클라우드 검색이 사용될 수 있습니다. 클라이언트 디바이스에서는 AWS IoT Core 클라우드 서비스 및 코어 디바이스 연결에 동일한 인증서가 사용됩니다. 또한 클라이언트 장치는 코어 장치와의 상호 인증을 위해 검색 정보를 사용합니다. 자세한 내용은 로컬 IoT 디바이스와 상호 작용 단원을 참조하십시오.
X.509 인증서
코어 디바이스와 클라이언트 디바이스 간 통신과 디바이스와 AWS IoT Core 또는 AWS IoT Greengrass 간 통신이 인증되어야 합니다. 이 상호 인증은 등록된 X.509 장치 인증서와 암호화 키를 기반으로 수행됩니다.
AWS IoT Greengrass 환경에서 장치는 다음 TLS(전송 계층 보안) 연결에 퍼블릭 키와 프라이빗 키가 있는 인증서를 사용합니다.
-
인터넷을 통해 AWS IoT Core 및 AWS IoT Greengrass에 연결되는 Greengrass 코어 디바이스의 AWS IoT 클라이언트 구성 요소입니다.
-
코어 디바이스가 검색되도록 인터넷을 통해 AWS IoT Greengrass에 연결되는 클라이언트 디바이스입니다.
-
로컬 네트워크를 통해 그룹의 Greengrass 디바이스에 연결되어 있는 Greengrass 코어의 MQTT 브로커 구성 요소입니다.
AWS IoT Greengrass 코어 디바이스에서는 Greengrass 루트 폴더에 인증서가 저장됩니다.
CA(인증 기관) 인증서
Greengrass 코어 디바이스와 클라이언트 디바이스에서는 AWS IoT Core 및 AWS IoT Greengrass 서비스로 인증에 사용되는 루트 CA 인증서가 다운로드됩니다. Amazon Root CA 1
클라이언트 디바이스에서는 Greengrass 코어 디바이스 CA 인증서도 다운로드됩니다. 상호 인증 중 Greengrass 코어의 MQTT 서버 인증서 검증에 이 인증서가 사용됩니다.
로컬 MQTT 브로커의 인증서 교체
클라이언트 디바이스 지원을 활성화하면 Greengrass 코어 디바이스에서는 클라이언트 디바이스에서 상호 인증에 사용되는 로컬 MQTT 서버 인증서가 생성됩니다. 이 인증서는 코어 디바이스에서 AWS IoT Greengrass 클라우드에 저장되는 코어 디바이스 CA 인증서에 따라 서명됩니다. 클라이언트 디바이스에서는 코어 디바이스가 검색될 때 코어 디바이스 CA 인증서가 검색됩니다. 코어 디바이스에 연결될 때 코어 디바이스의 MQTT 서버 인증서 확인에 코어 디바이스 CA 인증서가 사용됩니다. 코어 디바이스 CA 인증서는 5년이 지나면 만료됩니다.
MQTT 서버 인증서는 기본적으로 7일마다 만료되며, 이 기간을 2~10일로 구성할 수 있습니다. 이 제한된 기간은 보안 모범 사례를 기반으로 합니다. 이 교체는 공격자가 Greengrass 코어 디바이스로 가장하려고 MQTT 서버 인증서와 프라이빗 키를 도용하는 위협을 완화하는 데 도움이 됩니다.
Greengrass 코어 디바이스에서는 MQTT 서버 인증서가 만료 24시간 전에 교체됩니다. Greengrass 코어 디바이스에서 새 인증서기 생성되고 로컬 MQTT 브로커가 다시 시작됩니다. 이렇게 되면 Greengrass 코어 디바이스에 연결된 모든 클라이언트 디바이스의 연결이 해제됩니다. 짧은 기간 뒤에 Greengrass 코어 디바이스에 클라이언트 디바이스가 다시 연결될 수 있습니다.
데이터 영역 작업에 대한 AWS IoT 정책
AWS IoT 정책을 사용하여 AWS IoT Core 및 AWS IoT Greengrass 데이터 플레인에 대한 액세스 권한을 부여합니다. AWS IoT Core 데이터 플레인에서 디바이스, 사용자 및 애플리케이션에 대한 작업이 제공됩니다. 이러한 작업에는 AWS IoT Core 주제에 연결되어 주제를 구독하는 기능이 포함되어 있습니다. AWS IoT Greengrass 데이터 플레인에서 Greengrass 디바이스에 대한 작업이 제공됩니다. 자세한 내용은 AWS IoT Greengrass V2 정책 작업 단원을 참조하십시오. 이러한 작업에는 구성 요소 종속성이 해결되고 퍼블릭 구성 요소 아티팩트가 다운로드되는 기능이 포함되어 있습니다.
AWS IoT 정책은 IAM 정책과 유사한 JSON 문서입니다. 여기에는 다음 속성을 지정하는 하나 이상의 정책 설명이 포함됩니다.
-
Effect
. 액세스 모드(Allow
또는Deny
일 수 있음) -
Action
. 정책에서 허용하거나 거부하는 작업 목록. -
Resource
. 작업이 허용되거나 거부되는 리소스 목록입니다.
AWS IoT 정책은 *
을(를) 와일드카드 문자로 지원하며 MQTT 와일드카드 문자(+
및 #
)를 리터럴 문자열로 취급합니다. *
와일드카드에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서의 리소스 ARN에서 와일드카드 사용을 참조하십시오.
자세한 내용은 AWS IoT Core 개발자 안내서의 AWS IoT 정책 및 AWS IoT 정책 조치를 참조하십시오.
중요
코어 디바이스 또는 Greengrass 데이터 플레인 작업의 AWS IoT 정책에 대해 사물 정책 변수(iot:Connection.Thing.
)가 지원되지 않습니다. 그 대신에 이름이 비슷한 여러 디바이스와 일치하는 와일드카드를 사용할 수 있습니다. 예를 들어 *
MyGreengrassDevice1
, MyGreengrassDevice2
등과 일치하도록 MyGreengrassDevice*
를 지정할 수 있습니다.
참고
AWS IoT Core은(는) 사물 그룹에 AWS IoT 정책을 연결하여 장치 그룹에 대한 권한을 정의할 수 있게 합니다. 사물 그룹 정책은 AWS IoT Greengrass 데이터 영역 작업에 대한 액세스를 허용하지 않습니다. AWS IoT Greengrass 데이터 영역 작업에 대한 사물 액세스를 허용하려면 사물 인증서에 연결하는 AWS IoT 정책에 권한을 추가하세요.
AWS IoT Greengrass V2 정책 작업
AWS IoT Greengrass V2에서는 Greengrass 코어 디바이스와 클라이언트 디바이스가 AWS IoT 정책에서 사용할 수 있는 다음 정책 작업이 정의됩니다. 정책 작업에 리소스를 지정하려면 리소스의 Amazon 리소스 이름(ARN)을 사용해야 합니다.
코어 디바이스 작업
greengrass:GetComponentVersionArtifact
-
퍼블릭 구성 요소 아티팩트 또는 Lambda 구성 요소 아티팩트가 다운로드되도록 미리 서명된 URL을 가져어는 권한을 부여합니다.
이 권한은 아티팩트가 있는 퍼블릭 구성 요소 또는 Lambda가 지정되는 배포가 코어 디바이스에 수신될 때 평가됩니다. 코어 디바이스에 이미 아티팩트가 있으면 아티팩트가 다시 다운로드되지 않습니다.
리소스 유형:
componentVersion
리소스 ARN 형식:
arn:aws:greengrass:
region
:account-id
:components:component-name
:versions:component-version
greengrass:ResolveComponentCandidates
-
배포의 구성 요소, 버전 및 플랫폼 요구 사항이 충족되는 구성 요소의 목록을 식별하는 권한을 부여합니다. 요구 사항이 충돌하거나 요구 사항이 충족되는 구성 요소가 없으면 이 작업에서는 오류가 반환되고 디바이스에서 배포에 실패합니다.
이 권한은 아티팩트가 있는 구성 요소가 지정되는 배포가 코어 디바이스에 수신될 때 평가됩니다.
리소스 유형: 없음
리소스 ARN 형식:
*
greengrass:GetDeploymentConfiguration
-
큰 배포 문서가 다운로드되는 미리 서명된 URL을 가져오는 권한을 부여합니다.
이 권한은 7KB(배포의 대상이 사물인 경우) 또는 31KB(배포의 대상이 사물 그룹인 경우)보다 큰 배포 문서가 지정되는 배포가 코어 디바이스에 수신될 때 평가됩니다. 배포 문서에는 구성 요소 구성, 배포 정책 및 배포 메타데이터가 포함되어 있습니다. 자세한 내용은 디바이스에 AWS IoT Greengrass 구성 요소 배포 단원을 참조하십시오.
이 기능은 Greengrass nucleus 구성 요소의 v2.3.0 이상에서 사용할 수 있습니다.
리소스 유형: 없음
리소스 ARN 형식:
*
greengrass:ListThingGroupsForCoreDevice
-
코어 디바이스의 사물 그룹 계층 구조를 가져오는 권한을 부여합니다.
AWS IoT Greengrass의 배포가 코어 디바이스에 수신될 때 이 권한이 확인됩니다. 코어 디바이스에서는 마지막 배포 이후 사물 그룹에서 제거되었는지 여부를 식별하는 데 이 작업이 사용됩니다. 코어 디바이스가 사물 그룹에서 제거되었고, 해당 사물 그룹이 코어 디바이스에 대한 배포의 대상인 경우 코어 디바이스에서는 해당 배포에 따라 설치된 구성 요소가 제거됩니다.
이 특성은 Greengrass nucleus 구성 요소의 v2.5.0 이상에서 사용됩니다.
리소스 유형:
thing
(코어 디바이스)리소스 ARN 형식:
arn:aws:iot:
region
:account-id
:thing/core-device-thing-name
greengrass:VerifyClientDeviceIdentity
-
코어 디바이스에 연결되는 클라이언트 디바이스의 ID를 확인하는 권한을 부여합니다.
이 권한은 코어 디바이스에서 클라이언트 디바이스 인증 구성 요소가 실행되고 클라이언트 디바이스의 MQTT 연결이 수신될 때 평가됩니다. 클라이언트 디바이스에서는 AWS IoT 디바이스 인증서가 제공됩니다. 그런 다음에서는 코어 디바이스에서는 클라이언트 디바이스의 ID를 확인할 디바이스 인증서가 AWS IoT Greengrass 클라우드 서비스로 발송됩니다. 자세한 내용은 로컬 IoT 디바이스와 상호 작용 단원을 참조하십시오.
리소스 유형: 없음
리소스 ARN 형식:
*
greengrass:VerifyClientDeviceIoTCertificateAssociation
-
클라이언트 디바이스가 AWS IoT 인증서와 연결되어 있는지 확인하는 권한을 부여합니다.
이 권한은 코어 디바이스에서 클라이언트 디바이스 인증 구성 요소가 실행되고 MQTT를 통한 연결 권한이 클라이언트 디바이스에 부여될 때 평가됩니다. 자세한 내용은 로컬 IoT 디바이스와 상호 작용 단원을 참조하십시오.
참고
코어 디바이스에서 이 작업이 사용되려면 Greengrass 서비스 역할이 AWS 계정에 연결되어야 하며
iot:DescribeCertificate
권한이 허용되어야 합니다.리소스 유형:
thing
(클라이언트 디바이스)리소스 ARN 형식:
arn:aws:iot:
region
:account-id
:thing/client-device-thing-name
-
클라이언트 디바이스에 다운로드되어 코어 디바이스가 확인될 수 있는 인증 기관(CA) 인증서를 업로드하는 권한을 부여합니다.
이 권한은 코어 디바이스가 설치되고 클라이언트 디바이스 인증 구성 요소가 실행될 때 평가됩니다. 이 구성 요소에서는 로컬 인증 기관이 생성되며 CA 인증서 업로드에 이 작업이 사용됩니다. 클라이언트 디바이스에서는 연결될 수 있는 코어 디바이스 찾기에 검색 작업이 사용될 때 이러한 CA 인증서가 다운로드됩니다. 클라이언트 디바이스에서는 코어 디바이스의 MQTT 브로커에 연결되면 코어 디바이스의 ID 확인에 이러한 CA 인증서가 사용됩니다. 자세한 내용은 로컬 IoT 디바이스와 상호 작용 단원을 참조하십시오.
리소스 유형: 없음
ARN 형식:
*
greengrass:GetConnectivityInfo
-
코어 디바이스에 대한 연결 정보를 가져오는 권한을 부여합니다. 이 정보에는 클라이언트 디바이스가 코어 디바이스에 연결되는 방식이 설명되어 있습니다.
이 권한은 코어 디바이스가 설치되고 클라이언트 디바이스 인증 구성 요소가 실행될 때 평가됩니다. 이 구성 요소에서는 PutCertificateAuthories 작업으로 AWS IoT Greengrass 클라우드 서비스에 업로드되는 유효한 CA 인증서 생성에 연결 정보가 사용됩니다. 클라이언트 디바이스에서는 코어 디바이스의 ID 확인에 이러한 CA 인증서가 사용됩니다. 자세한 내용은 로컬 IoT 디바이스와 상호 작용 단원을 참조하십시오.
AWS IoT Greengrass 컨트롤 플레인에서 이 작업을 사용하여 코어 디바이스에 대한 연결 정보를 볼 수도 있습니다. 자세한 내용은 AWS IoT Greengrass V1 API 참조의 GetConnectivityInfo를 참조하세요.
리소스 유형:
thing
(코어 디바이스)리소스 ARN 형식:
arn:aws:iot:
region
:account-id
:thing/core-device-thing-name
greengrass:UpdateConnectivityInfo
-
코어 디바이스에 대한 연결 정보를 업데이트하는 권한을 부여합니다. 이 정보에는 클라이언트 디바이스가 코어 디바이스에 연결되는 방식이 설명되어 있습니다.
이 권한은 코어 디바이스에서 IP 감지기 구성 요소가 실행될 때 평가됩니다. 이 구성 요소에서는 클라이언트 디바이스가 로컬 네트워크의 코어 디바이스에 연결되는 데 필요한 정보가 식별됩니다. 그러면 이 구성 요소에서는 AWS IoT Greengrass 클라우드 서비스에 연결 정보 업로드에 이 작업이 사용될 수 있어 클라이언트 디바이스에서는 검색 작업으로 이 정보가 검색될 수 있습니다. 자세한 내용은 로컬 IoT 디바이스와 상호 작용 단원을 참조하십시오.
AWS IoT Greengrass 컨트롤 플레인에서 이 작업을 사용하여 코어 디바이스에 대한 연결 정보를 수동으로 업데이트할 수도 있습니다. 자세한 내용은 AWS IoT Greengrass V1 API 참조의 UpdateConnectivityInfo를 참조하세요.
리소스 유형:
thing
(코어 디바이스)리소스 ARN 형식:
arn:aws:iot:
region
:account-id
:thing/core-device-thing-name
클라이언트 디바이스 작업
greengrass:Discover
-
클라이언트 디바이스가 연결될 수 있는 코어 디바이스에 대한 연결 정보를 검색하는 권한을 부여합니다. 이 정보에는 클라이언트 디바이스가 코어 디바이스에 연결되는 방식이 설명되어 있습니다. 클라이언트 디바이스에서는 BatchAssociateClientDeviceWithCoreDevice 작업을 사용하여 연결한 코어 디바이스만 검색될 수 있습니다. 자세한 내용은 로컬 IoT 디바이스와 상호 작용 단원을 참조하십시오.
리소스 유형:
thing
(클라이언트 디바이스)리소스 ARN 형식:
arn:aws:iot:
region
:account-id
:thing/client-device-thing-name
코어 디바이스의 AWS IoT 정책 업데이트
AWS IoT Greengrass 및 AWS IoT 콘솔 또는 AWS IoT API를 사용하여 코어 디바이스의 AWS IoT 정책을 보고 업데이트할 수 있습니다.
참고
리소스 프로비저닝에 AWS IoT Greengrass 코어 소프트웨어 설치 프로그램을 사용했다면 모든 AWS IoT Greengrass 작업(greengrass:*
)에 대한 액세스를 허용하는 AWS IoT 정책이 코어 디바이스에 있습니다. 다음과 같은 단계에 따라 코어 디바이스에서 사용되는 작업으로만 액세스를 제한할 수 있습니다.
-
AWS IoT Greengrass 콘솔
탐색 메뉴에서 코어 디바이스를 선택합니다. -
업데이트할 코어 디바이스를 코어 디바이스 페이지에서 선택합니다.
-
코어 디바이스 세부 정보 페이지에서 코어 디바이스의 사물에 대한 링크를 선택합니다. 이 링크를 통해 사물 세부 정보 페이지가 AWS IoT 콘솔에서 열립니다.
-
사물 세부 정보 페이지에서 인증서를 선택합니다.
-
인증서 탭에서 사물의 활성 인증서를 선택합니다.
-
인증서 세부 정보 페이지에서 정책을 선택합니다.
-
검토하고 업데이트할 AWS IoT 정책을 정책 탭에서 선택합니다. 코어 디바이스의 활성 인증서에 연결된 원하는 정책에 필수 권한을 추가할 수 있습니다.
참고
리소스 프로비저닝에 AWS IoT Greengrass 코어 소프트웨어 설치 프로그램을 사용했다면 두 가지 AWS IoT 정책이 있습니다. 이름이 GreengrassV2IoTThingPolicy인 정책을 선택하는 것이 좋습니다(있는 경우). 빠른 설치 프로그램으로 생성한 코어 디바이스에서는 기본적으로 이 정책 이름이 사용됩니다. 이 정책에 권한을 추가하면 이 정책을 사용하는 다른 코어 디바이스에도 이러한 권한을 부여하는 것입니다.
-
정책 개요에서 활성 버전 편집을 선택합니다.
-
정책을 검토하고 필요에 따라 권한을 추가, 제거 또는 편집합니다.
-
새 정책 버전을 활성 버전으로 설정하려면 정책 버전 상태에서 편집한 버전을 이 정책의 활성 버전으로 설정을 선택합니다.
-
새 버전으로 저장을 선택합니다.
-
코어 디바이스의 AWS IoT 사물에 대한 보안 주체를 나열합니다. 사물 보안 주체는 X.509 디바이스 인증서 또는 기타 ID일 수 있습니다. 다음 명령을 실행하고
MyGreengrassCore
를 코어 디바이스의 이름으로 바꿉니다.aws iot list-thing-principals --thing-name
MyGreengrassCore
코어 디바이스의 사물 보안 주체가 나열되는 응답이 작업에서 반환됩니다.
{ "principals": [ "arn:aws:iot:us-west-2:123456789012:cert/
certificateId
" ] } -
코어 디바이스의 활성 인증서를 식별합니다. 다음 명령을 실행하고, 활성 인증서를 찾을 때까지 이전 단계의 각 인증서 ID로
certificateId
를 바꿉니다. 인증서 ID는 인증서 ARN 끝에 있는 16진수 문자열입니다.--query
인수에서는 인증서의 상태만 출력으로 지정됩니다.aws iot describe-certificate --certificate-id
certificateId
--query 'certificateDescription.status'인증서 상태가 문자열로 작업에서 반환됩니다. 예를 들어, 인증서가 활성이라면 이 작업에서는
"ACTIVE"
가 출력됩니다. -
인증서에 연결된 AWS IoT 정책을 나열합니다. 다음 명령을 실행하고 인증서의 ARN으로 인증서 ARN을 바꿉니다.
aws iot list-principal-policies --principal
arn:aws:iot:us-west-2:123456789012:cert/certificateId
인증서에 연결된 AWS IoT 정책이 나열되는 응답이 작업에서 반환됩니다.
{ "policies": [ { "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias" }, { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy" } ] }
-
보고 업데이트할 정책을 선택합니다.
참고
리소스 프로비저닝에 AWS IoT Greengrass 코어 소프트웨어 설치 프로그램을 사용했다면 두 가지 AWS IoT 정책이 있습니다. 이름이 GreengrassV2IoTThingPolicy인 정책을 선택하는 것이 좋습니다(있는 경우). 빠른 설치 프로그램으로 생성한 코어 디바이스에서는 기본적으로 이 정책 이름이 사용됩니다. 이 정책에 권한을 추가하면 이 정책을 사용하는 다른 코어 디바이스에도 이러한 권한을 부여하는 것입니다.
-
정책의 문서를 가져옵니다. 다음 명령을 실행하고 정책의 이름으로
GreengrassV2IoTThingPolicy
를 바꿉니다.aws iot get-policy --policy-name
GreengrassV2IoTThingPolicy
정책의 문서와 정책에 대한 기타 정보가 있는 응답이 작업에서 반환됩니다. 정책 문서는 문자열로 직렬화된 JSON 객체입니다.
{ "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{\ \\"Version\\": \\"2012-10-17\\",\ \\"Statement\\": [\ {\ \\"Effect\\": \\"Allow\\",\ \\"Action\\": [\ \\"iot:Connect\\",\ \\"iot:Publish\\",\ \\"iot:Subscribe\\",\ \\"iot:Receive\\",\ \\"greengrass:*\\"\ ],\ \\"Resource\\": \\"*\\"\ }\ ]\ }", "defaultVersionId": "1", "creationDate": "2021-02-05T16:03:14.098000-08:00", "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00", "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f" }
-
온라인 변환기 또는 기타 도구를 사용하여 정책 문서 문자열을 JSON 객체로 변환한 다음에
iot-policy.json
이라는 파일에 저장합니다.예를 들어, 설치된 jq
도구가 있으면 다음 명령을 실행하여 정책 문서를 가져와서 JSON 객체로 변환하고 정책 문서를 JSON 객체로 저장할 수 있습니다. aws iot get-policy --policy-name
GreengrassV2IoTThingPolicy
--query 'policyDocument' | jq fromjson >> iot-policy.json -
정책 문서를 검토하고 필요에 따라 권한을 추가, 제거 또는 편집합니다.
예를 들어 Linux 기반 시스템에서 GNU nano를 사용하여 파일을 열도록 다음 명령을 실행할 수 있습니다.
nano iot-policy.json
완료했으면 정책 문서가 AWS IoT 코어 디바이스에 대한 최소 정책과 비슷하게 보일 수도 있습니다.
-
변경 사항을 정책의 새 버전으로 저장합니다. 다음 명령을 실행하고 정책의 이름으로
GreengrassV2IoTThingPolicy
를 바꿉니다.aws iot create-policy-version --policy-name
GreengrassV2IoTThingPolicy
--policy-document file://iot-policy.json --set-as-default작업에 성공하면 다음 예제와 비슷한 응답이 반환됩니다.
{ "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{\ \\"Version\\": \\"2012-10-17\\",\ \\"Statement\\": [\ {\ \\"Effect\\": \\"Allow\\",\ \\"Action\\": [\ \\t\\t\\"iot:Connect\\",\ \\t\\t\\"iot:Publish\\",\ \\t\\t\\"iot:Subscribe\\",\ \\t\\t\\"iot:Receive\\",\ \\t\\t\\"greengrass:*\\"\ ],\ \\"Resource\\": \\"*\\"\ }\ ]\ }", "policyVersionId": "2", "isDefaultVersion": true }
AWS IoT Greengrass V2 코어 디바이스에 대한 최소 AWS IoT 정책
중요
이후 버전의 Greengrass nucleus 구성 요소에는 최소 AWS IoT 정책에 대한 추가 권한이 필요합니다. 코어 디바이스의 AWS IoT 정책을 업데이트하여 추가 권한을 부여해야 할 수도 있습니다.
-
Greengrass nucleus v2.5.0 이상이 실행되는 코어 디바이스에서는 사물 그룹에서 코어 디바이스를 제거할 때 구성 요소 제거에
greengrass:ListThingGroupsForCoreDevice
권한이 사용됩니다. -
Greengrass nucleus v2.3.0 이상이 실행되는 코어 디바이스에서는 큰 배포 구성 문서 지원에
greengrass:GetDeploymentConfiguration
권한이 사용됩니다.
다음 예제 정책에는 코어 장치용 기본 Greengrass 기능을 지원하는 데 필요한 최소 작업 세트가 포함됩니다.
-
Connect
정책에는 코어 디바이스 사물 이름 뒤에*
와일드카드가 포함되어 있습니다(예:
). 코어 디바이스에서는 여러 AWS IoT Core 구독에 동일한 디바이스 인증서가 사용되지만, 연결의 클라이언트 ID는 코어 디바이스 사물 이름과 정확히 일치하지 않을 수 있습니다. 50개까지 구독 후 코어 디바이스에서는 추가 50개 구독마다core-device-thing-name
*
개씩 증분되는number
가 클라이언트 ID로 사용됩니다. 예를 들어,core-device-thing-name
#number
MyCoreDevice
라는 코어 디바이스에서 150개의 동시 구독이 생성되면 다음 클라이언트 ID가 사용됩니다.-
구독 1~50개:
MyCoreDevice
-
구독 51~100개:
MyCoreDevice#2
-
구독 101~150개:
MyCoreDevice#3
접미사가 있는 이러한 클라이언트 ID가 사용될 때 와일드카드를 통해 코어 디바이스가 연결될 수 있습니다.
-
-
이 정책은 코어 장치가 섀도우 상태에 사용되는 주제를 포함하여 메시지를 게시하고 구독하고 메시지를 수신할 수 있는 MQTT 정책과 주제 필터를 나열합니다. AWS IoT Core, Greengrass 구성 요소 및 클라이언트 디바이스 간 메시지 교환을 지원하려면 허용할 주제와 주제 필터를 지정합니다. 자세한 내용은 AWS IoT Core 개발자 안내서의 게시/구독 정책 예제를 참조하십시오.
-
이 정책에서는 원격 측정 데이터에 대한 다음 주제에 게시하는 권한이 부여됩니다.
$aws/things/
core-device-thing-name
/greengrass/health/json원격 측정을 비활성화하는 코어 디바이스의 이 권한을 제거할 수 있습니다. 자세한 내용은 AWS IoT Greengrass 코어 디바이스에서 시스템 상태 원격 측정 데이터 수집 단원을 참조하십시오.
-
AWS IoT 역할 별칭을 통해 IAM 역할을 수임하는 권한이 정책에서 부여됩니다. 코어 디바이스에서는 AWS 요청 인증에 사용될 수 있는 AWS 자격 증명 획득에 토큰 교환 역할이라는 이 역할이 사용됩니다. 자세한 내용은 코어 디바이스에 AWS 서비스와 상호 작용 권한 부여 단원을 참조하십시오.
AWS IoT Greengrass 코어 소프트웨어를 설치할 때 이 권한만 포함되어 있는 두 번째 AWS IoT 정책을 생성하고 연결합니다. 코어 디바이스의 기본 AWS IoT 정책에 이 권한을 포함하면 기타 AWS IoT 정책을 분리하고 삭제할 수 있습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": "arn:aws:iot:
region
:account-id
:client/core-device-thing-name
*" }, { "Effect": "Allow", "Action": [ "iot:Receive", "iot:Publish" ], "Resource": [ "arn:aws:iot:region
:account-id
:topic/$aws/things/core-device-thing-name
/greengrass/health/json", "arn:aws:iot:region
:account-id
:topic/$aws/things/core-device-thing-name
/greengrassv2/health/json", "arn:aws:iot:region
:account-id
:topic/$aws/things/core-device-thing-name
/jobs/*", "arn:aws:iot:region
:account-id
:topic/$aws/things/core-device-thing-name
/shadow/*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region
:account-id
:topicfilter/$aws/things/core-device-thing-name
/jobs/*", "arn:aws:iot:region
:account-id
:topicfilter/$aws/things/core-device-thing-name
/shadow/*" ] }, { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": "arn:aws:iot:region
:account-id
:rolealias/token-exchange-role-alias-name
" }, { "Effect": "Allow", "Action": [ "greengrass:GetComponentVersionArtifact", "greengrass:ResolveComponentCandidates", "greengrass:GetDeploymentConfiguration", "greengrass:ListThingGroupsForCoreDevice" ], "Resource": "*" } ] }
클라이언트 디바이스가 지원되는 최소 AWS IoT 정책
다음 예제 정책에는 코어 디바이스의 클라이언트 디바이스와 상호 작용 지원에 필요한 최소 작업 세트가 포함되어 있습니다. 클라이언트 디바이스가 지원되려면 기본 작업에 대한 최소 AWS IoT 정책 외에 이 AWS IoT 정책의 권한이 코어 디바이스에 있어야 합니다.
-
이 정책을 통해 코어 디바이스의 자체 연결 정보 업데이트가 허용됩니다. IP 감지기 구성 요소를 코어 디바이스에 배포하는 경우에만 이 권한(
greengrass:UpdateConnectivityInfo
)이 필요합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:
region
:account-id
:topic/$aws/things/core-device-thing-name
-gci/shadow/get" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region
:account-id
:topicfilter/$aws/things/core-device-thing-name
-gci/shadow/update/delta", "arn:aws:iot:region
:account-id
:topicfilter/$aws/things/core-device-thing-name
-gci/shadow/get/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region
:account-id
:topic/$aws/things/core-device-thing-name
-gci/shadow/update/delta", "arn:aws:iot:region
:account-id
:topic/$aws/things/core-device-thing-name
-gci/shadow/get/accepted" ] }, { "Effect": "Allow", "Action": [ "greengrass:PutCertificateAuthorities", "greengrass:VerifyClientDeviceIdentity" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "greengrass:VerifyClientDeviceIoTCertificateAssociation" ], "Resource": "arn:aws:iot:region
:account-id
:thing/*" }, { "Effect": "Allow", "Action": [ "greengrass:GetConnectivityInfo", "greengrass:UpdateConnectivityInfo" ], "Resource": [ "arn:aws:iot:region
:account-id
:thing/core-device-thing-name
" ] } ] }
클라이언트 디바이스에 대한 최소 AWS IoT 정책
다음 예제 정책에는 MQTT를 통해 연결되고 통신할 코어 디바이스를 클라이언트 디바이스에서 검색하는 데 필요한 최소 작업 세트가 포함되어 있습니다. 클라이언트 디바이스의 AWS IoT 정책에는 연결된 Greengrass 코어 디바이스에 대한 연결 정보 검색이 디바이스에 허용되는 greengrass:Discover
작업이 포함되어야 합니다. Resource
단원에서 Greengrass 코어 디바이스의 Amazon 리소스 이름(ARN)이 아닌 클라이언트 디바이스의 ARN을 지정합니다.
-
모든 MQTT 주제에 대한 통신이 정책에서 허용됩니다. 모범 보안 사례를 따르려면
iot:Publish
,iot:Subscribe
및iot:Receive
권한을 클라이언트 디바이스의 사용 사례에 필요한 최소 주제 집합으로 제한합니다. -
이 정책에서는 모든 AWS IoT 사물에 대한 코어 디바이스 검색이 사물에 허용됩니다. 모범 보안 사례를 따르려면 클라이언트 디바이스의 AWS IoT 사물 또는 AWS IoT 사물 세트와 일치하는 와일드카드로
greengrass:Discover
권한을 제한합니다.중요
코어 디바이스 또는 Greengrass 데이터 플레인 작업의 AWS IoT 정책에 대해 사물 정책 변수(
iot:Connection.Thing.
)가 지원되지 않습니다. 그 대신에 이름이 비슷한 여러 디바이스와 일치하는 와일드카드를 사용할 수 있습니다. 예를 들어*
MyGreengrassDevice1
,MyGreengrassDevice2
등과 일치하도록MyGreengrassDevice*
를 지정할 수 있습니다. -
Greengrass 코어에서 클라이언트 디바이스에 대한 섀도우 동기화 작업이 처리되므로 클라이언트 디바이스의 AWS IoT 정책에는 일반적으로
iot:GetThingShadow
,iot:UpdateThingShadow
또는iot:DeleteThingShadow
작업에 대한 권한이 필요하지 않습니다. 코어 디바이스에서 클라이언트 디바이스 섀도우가 처리될 수 있도록 하려면 코어 디바이스의 AWS IoT 정책에서 이러한 작업이 허용되고Resource
단원에 클라이언트 디바이스의 ARN이 포함되어 있는지 확인합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:
region
:account-id
:topic/*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region
:account-id
:topicfilter/*" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region
:account-id
:topic/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:Discover" ], "Resource": [ "arn:aws:iot:region
:account-id
:thing/*" ] } ] }