정적 사물 그룹 - AWS IoT Core

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

정적 사물 그룹

정적 사물 그룹을 사용하면 사물을 그룹별로 범주화하여 여러 사물을 한번에 관리할 수 있습니다. 정적 항목 그룹에는 콘솔, CLI 또는 API를 사용하여 관리되는 사물 그룹이 포함됩니다. 반면에 동적 사물 그룹에는 지정된 쿼리와 일치하는 사물이 포함됩니다. 정적 사물 그룹은 다른 정적 사물 그룹을 포함할 수 있으므로 그룹 계층 구조를 만들 수 있습니다. 정책은 상위 그룹에 연결할 수 있으며, 이렇게 연결된 정책은 하위 그룹을 비롯해 해당 그룹과 해당 그룹의 하위 그룹에 속한 모든 사물에게 상속됩니다. 따라서 사물의 수가 많더라도 권한을 쉽게 제어할 수 있습니다.

참고

사물 그룹 정책은 AWS IoT Greengrass 데이터 플레인 작업에 대한 액세스를 허용하지 않습니다. AWS IoT Greengrass 데이터 플레인 작업에 대한 사물 액세스를 허용하려면 사물 인증서에 연결하는 AWS IoT 정책에 권한을 추가하십시오. 자세한 내용은 AWS IoT Greengrass 개발자 안내서의 디바이스 인증 및 권한 부여를 참조하세요.

다음은 정적 사물 그룹으로 수행할 수 있는 사물입니다.

  • 그룹을 생성, 설명 또는 삭제합니다.

  • 사물을 단일 그룹 또는 다수의 그룹에 추가합니다.

  • 그룹에서 사물을 제거합니다.

  • 생성한 그룹을 나열합니다.

  • 그룹의 하위 그룹(직/간접적 최하위 그룹)을 모두 나열합니다.

  • 하위 그룹에 속한 모든 사물을 포함하여 그룹의 사물을 나열합니다.

  • 그룹의 최상위 그룹(직/간접적 상위 그룹)을 모두 나열합니다.

  • 그룹 속성을 추가하거나, 삭제하거나, 업데이트합니다. (속성이란 그룹에 대한 정보를 저장할 때 사용하는 이름-값 페어를 말합니다)

  • 정책을 그룹에 연결하거나, 혹은 그룹에서 분리합니다.

  • 그룹에 연결되어 있는 정책을 나열합니다.

  • 사물에게 상속되는 정책을 나열합니다(그룹 또는 상위 그룹 중 하나에 연결된 정책에 따라).

  • 그룹에 속한 사물에 로깅 옵션을 구성합니다. 로깅을 구성합니다 AWS IoT .을 참조하십시오.

  • 그룹과 그룹의 하위 그룹에 속한 모든 사물로 전송된 후 실행되는 작업을 생성합니다. 작업을 참조하십시오.

참고

AWS IoT Core 정책이 연결된 정적 사물 그룹에 사물을 연결하는 경우 사물 이름은 클라이언트 ID와 일치해야 합니다.

다음은 정적 사물 그룹에 적용되는 몇 가지 제한입니다.

  • 그룹은 직접 상위 그룹을 1개까지만 가질 수 있습니다.

  • 그룹이 다른 그룹의 하위 그룹인 경우 생성 시 이를 지정하십시오.

  • 그룹의 상위는 나중에 변경할 수 없으므로 그룹에 포함되는 하위 그룹을 만들기 전에 그룹 계층을 계획하고 상위 그룹을 만들어야 합니다.

  • 사물이 속할 수 있는 그룹의 수는 제한되어 있습니다.

  • 사물 1개를 동일 계층에 속한 그룹 2개 이상에 추가할 수 없습니다. (다시 말해서 사물 1개를 상위 그룹을 공유하는 그룹 2개에 추가할 수 없습니다.)

  • 그룹 이름은 변경할 수 없습니다.

  • 사물 그룹 이름은 û, é, ñ 같은 국제 문자를 포함할 수 없습니다.

  • 사물 그룹 이름에 개인 식별 정보를 사용하지 마십시오. 사물 그룹 이름은 암호화되지 않은 통신 및 보고서에 나타날 수 있습니다.

정책을 그룹에 연결한 후 분리하면 여러 가지 유의적인 방법으로 AWS IoT 작업 보안을 강화할 수 있습니다. 디바이스 단위로 정책을 인증서에 연결하고 나서 인증서를 사물에 연결하려면 시간이 많이 걸릴 뿐만 아니라 다수의 디바이스에서 정책을 빠르게 업데이트하거나 변경하는 것이 어렵습니다. 하지만 정책을 사물 그룹에 연결하면 사물에서 인증서를 교체해야 할 때 여러 단계를 생략할 수 있습니다. 또한 그룹 멤버십을 교체할 때는 정책이 동적으로 사물에 적용되기 때문에 디바이스가 그룹의 멤버십을 교체할 때마다 복잡한 권한들을 다시 생성할 필요가 없습니다.

정적 물체 그룹 생성

CreateThingGroup 명령을 사용하여 정적 사물 그룹을 생성합니다.

$ aws iot create-thing-group --thing-group-name LightBulbs

CreateThingGroup 명령은 정적 사물 그룹의 이름, ID 및 ARN을 포함하는 응답을 반환합니다.

{ "thingGroupName": "LightBulbs", "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" }
참고

사물 그룹 이름에 개인 식별 정보를 사용하지 않는 것이 좋습니다.

다음은 정적 사물 그룹을 생성할 때 정적 사물 그룹의 상위 그룹을 지정하는 예제입니다.

$ aws iot create-thing-group --thing-group-name RedLights --parent-group-name LightBulbs

앞에서 설명한 바와 같이 CreateThingGroup 명령은 정적 사물 그룹의 이름, ID 및 ARN을 포함하는 응답을 반환합니다.

{ "thingGroupName": "RedLights", "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights", }
중요

사물 그룹 계층 구조를 생성할 때는 다음과 같은 제한 사항을 유의하세요.

  • 사물 그룹은 직접 상위 그룹을 1개까지만 가질 수 있습니다.

  • 사물 그룹이 가질 수 있는 직접 하위 그룹의 수는 제한되어 있습니다.

  • 그룹 계층 구조의 최대 깊이는 제한되어 있습니다.

  • 사물 그룹이 가질 수 있는 속성의 수는 제한되어 있습니다. (속성이란 그룹에 대한 정보를 저장할 때 사용하는 이름-값 페어를 말합니다) 각 속성 이름과 각 값의 길이도 제한되어 있습니다.

사물 그룹 설명

다음과 같이 DescribeThingGroup 명령을 사용하여 사물 그룹에 대한 정보를 가져올 수 있습니다.

$ aws iot describe-thing-group --thing-group-name RedLights

DescribeThingGroup 명령은 다음과 같이 지정한 그룹에 대한 정보를 반환합니다.

{ "thingGroupName": "RedLights", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights", "thingGroupId": "12345678abcdefgh12345678ijklmnop12345678", "version": 1, "thingGroupMetadata": { "creationDate": 1478299948.882 "parentGroupName": "Lights", "rootToParentThingGroups": [ { "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ShinyObjects", "groupName": "ShinyObjects" }, { "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs", "groupName": "LightBulbs" } ] }, "thingGroupProperties": { "attributePayload": { "attributes": { "brightness": "3400_lumens" }, }, "thingGroupDescription": "string" }, }

정적 사물 그룹에 사물 추가

AddThingToThingGroup 명령을 사용하여 정적 사물 그룹에 사물을 추가할 수 있습니다.

$ aws iot add-thing-to-thing-group --thing-name MyLightBulb --thing-group-name RedLights

AddThingToThingGroup 명령은 출력을 생성하지 않습니다.

중요

사물 1개를 추가할 수 있는 최대 그룹 수는 10개입니다. 하지만 사물 1개를 동일 계층에 속한 그룹 2개 이상에 추가할 수는 없습니다. (다시 말해서 사물 1개를 공통 상위 그룹을 공유하는 그룹 2개에 추가할 수 없습니다)

사물이 가능한 많은 사물 그룹에 속하고 이러한 그룹 중 하나 이상이 동적 사물 그룹인 경우 overrideDynamicGroups 플래그를 사용하면 정적 그룹이 동적 그룹보다 우선합니다.

정적 사물 그룹에서 사물 제거

다음과 같이 RemoveThingFromThingGroup 명령을 사용하여 사물을 그룹에서 제거할 수 있습니다.

$ aws iot remove-thing-from-thing-group --thing-name MyLightBulb --thing-group-name RedLights

RemoveThingFromThingGroup 명령은 출력을 생성하지 않습니다.

사물 그룹에 속한 사물 나열

다음과 같이 ListThingsInThingGroup 명령을 사용하여 그룹에 속한 사물을 나열할 수 있습니다.

$ aws iot list-things-in-thing-group --thing-group-name LightBulbs

ListThingsInThingGroup 명령은 지정하는 그룹에 속한 사물 목록을 반환합니다.

{ "things":[ "TestThingA" ] }

다음과 같이 --recursive 파라미터를 추가하면 그룹에 속한 사물과 해당 그룹의 모든 하위 그룹에 속한 사물을 나열할 수 있습니다.

$ aws iot list-things-in-thing-group --thing-group-name LightBulbs --recursive
{ "things":[ "TestThingA", "MyLightBulb" ] }
참고

이 작업은 결과적 일관성을 갖습니다. 즉, 사물 그룹의 변경 사항이 한 번에 반영되지 않을 수 있습니다.

사물 그룹 목록 표시

ListThingGroups 명령을 사용하여 계정의 사물 그룹을 나열할 수 있습니다.

$ aws iot list-thing-groups

ListThingGroups 명령은 AWS 계정 다음과 같은 사물 그룹 목록을 반환합니다.

{ "thingGroups": [ { "groupName": "LightBulbs", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" }, { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" }, { "groupName": "RedLEDLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLEDLights" }, { "groupName": "RedIncandescentLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedIncandescentLights" } { "groupName": "ReplaceableObjects", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ReplaceableObjects" } ] }

다음과 같이 옵션으로 제공되는 필터를 사용하여 상위 그룹으로 지정된 그룹(--parent-group) 또는 이름이 지정된 접두사로 시작하는 그룹(--name-prefix-filter)을 나열할 수도 있습니다. 여기에 --recursive 파라미터를 추가하면 사물 그룹의 직접 하위 그룹 뿐만 아니라 모든 하위 그룹까지 나열할 수 있습니다.

$ aws iot list-thing-groups --parent-group LightBulbs

이 경우 ListThingGroups 명령은 다음에 정의된 사물 그룹의 직계 하위 그룹 목록을 반환합니다 AWS 계정.

{ "childGroups":[ { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" } ] }

ListThingGroups 명령에 --recursive 파라미터를 사용하면 직접 하위 그룹들 외에도 사물 그룹의 모든 하위 그룹까지 나열합니다.

$ aws iot list-thing-groups --parent-group LightBulbs --recursive

ListThingGroups 명령은 사물 그룹의 모든 하위 그룹 목록을 반환합니다.

{ "childGroups":[ { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" }, { "groupName": "RedLEDLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLEDLights" }, { "groupName": "RedIncandescentLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedIncandescentLights" } ] }
참고

이 작업은 결과적 일관성을 갖습니다. 즉, 사물 그룹의 변경 사항이 한 번에 반영되지 않을 수 있습니다.

사물이 속하는 그룹의 목록 표시

ListThingGroupsForThing 명령을 사용하여 사물이 속한 직접 그룹을 나열할 수 있습니다.

$ aws iot list-thing-groups-for-thing --thing-name MyLightBulb

ListThingGroupsForThing 명령은 해당 사물이 속하는 직접 사물 그룹 목록을 반환합니다.

{ "thingGroups":[ { "groupName": "LightBulbs", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" }, { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" }, { "groupName": "ReplaceableObjects", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ReplaceableObjects" } ] }

정적 사물 그룹 업데이트

UpdateThingGroup 명령을 사용하여 정적 사물 그룹의 속성을 업데이트할 수 있습니다.

$ aws iot update-thing-group --thing-group-name "LightBulbs" --thing-group-properties "thingGroupDescription=\"this is a test group\", attributePayload=\"{\"attributes\"={\"Owner\"=\"150\",\"modelNames\"=\"456\"}}"

UpdateThingGroup 명령은 업데이트 이후 그룹의 버전 번호가 포함된 응답을 반환합니다.

{ "version": 4 }
참고

사물이 가질 수 있는 속성의 수는 제한되어 있습니다.

사물 그룹 삭제

사물 그룹을 삭제하려면 다음과 같이 DeleteThingGroup 명령을 사용합니다.

$ aws iot delete-thing-group --thing-group-name "RedLights"

DeleteThingGroup 명령은 출력을 생성하지 않습니다.

중요

하위 사물 그룹이 있는 사물 그룹을 삭제하려고 하면 아래와 같이 오류 메시지가 발생합니다.

A client error (InvalidRequestException) occurred when calling the DeleteThingGroup operation: Cannot delete thing group : RedLights when there are still child groups attached to it.

그룹을 삭제하기 전에 먼저 모든 하위 그룹을 삭제하십시오.

하위 사물이 포함된 그룹도 삭제할 수는 있지만 이 경우 그룹 멤버십에 따라 사물에 부여된 모든 권한이 더 이상 적용되지 않습니다. 따라서 정책이 연결되어 있는 그룹을 삭제하려면 먼저 부여된 권한을 제거할 경우 그룹에 속한 사물이 정상적인 기능을 하지 못하는지 주의 깊게 확인해야 합니다. 또한 사물이 속한 그룹을 표시하는 명령 (예:ListGroupsForThing) 을 사용하면 클라우드의 레코드가 업데이트되는 동안에도 그룹이 계속 표시될 수 있습니다.

정적 사물 그룹에 정책 연결

AttachPolicy 명령을 사용하여 정적 사물 그룹에 정책을 연결하고, 그리고 여기에서 확장하여 해당 그룹에 속한 모든 사물과 해당 그룹의 하위 그룹에 속한 사물에 정책을 연결하는 것도 가능합니다.

$ aws iot attach-policy \ --target "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" \ --policy-name "myLightBulbPolicy"

AttachPolicy 명령은 출력을 생성하지 않습니다.

중요

그룹에는 정책을 최대 2개까지 연결할 수 있습니다.

참고

정책 이름에 개인 식별 정보를 사용하지 않는 것이 좋습니다.

--target 파라미터는 사물 그룹 ARN(위와 같음), 인증서 ARN 또는 Amazon Cognito 자격 증명일 수 있습니다. 정책, 인증서 및 인증에 대한 자세한 내용은 단원을 참조하세요인증

자세한 내용은 AWS IoT Core 정책을 참조하세요.

정적 사물 그룹에서 정책 분리

다음과 같이 DetachPolicy 명령을 사용하여 사물 그룹에서 정책을 분리하고, 그리고 여기에서 확장하여 해당 그룹에 속한 모든 사물과 해당 그룹의 하위 그룹에 속한 사물에서 정책을 분리하는 것도 가능합니다.

$ aws iot detach-policy --target "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" --policy-name "myLightBulbPolicy"

DetachPolicy 명령은 출력을 생성하지 않습니다.

정적 사물 그룹에 연결되어 있는 정책 나열

ListAttachedPolicies 명령을 사용하여 정적 사물 그룹에 연결되어 있는 정책을 나열할 수 있습니다.

$ aws iot list-attached-policies --target "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights"

--target 파라미터는 사물 그룹 ARN(위와 같음), 인증서 ARN 또는 Amazon Cognito 자격 증명일 수 있습니다.

--recursive 파라미터(선택 사항)를 추가하면 그룹의 상위 그룹에 연결되어 있는 모든 정책이 포함됩니다.

ListAttachedPolicies 명령은 정책 목록을 반환합니다.

{ "policies": [ "MyLightBulbPolicy" ... ] }

정책이 연결되어 있는 그룹의 목록 표시

다음과 같이 ListTargetsForPolicy 명령을 사용하여 그룹을 포함하여 정책이 연결되어 있는 대상을 나열할 수 있습니다.

$ aws iot list-targets-for-policy --policy-name "MyLightBulbPolicy"

옵션으로 제공되는 --page-size number 파라미터를 추가하면 각 쿼리마다 반환되는 최대 결과 수를 지정하고, 이어지는 호출에서 --marker string 파라미터를 추가하면 다음 결과 집합(있는 경우)을 가져옵니다.

ListTargetsForPolicy 명령은 대상 목록과 더 많은 결과를 가져올 때 사용할 토큰을 반환합니다.

{ "nextMarker": "string", "targets": [ "string" ... ] }

사물에 적용되는 정책 가져오기

다음과 같이 GetEffectivePolicies 명령을 사용하여 사물이 속한 그룹(직접 상위 그룹 또는 간접 최상위 그룹)에 연결되어 있는 정책을 포함하여 사물에 적용되고 있는 정책을 나열할 수 있습니다.

$ aws iot get-effective-policies \ --thing-name "MyLightBulb" \ --principal "arn:aws:iot:us-east-1:123456789012:cert/a0c01f5835079de0a7514643d68ef8414ab739a1e94ee4162977b02b12842847"

--principal 파라미터를 사용하여 사물에 연결되어 있는 인증서 ARN을 지정합니다. Amazon Cognito 자격 증명 인증을 사용할 때는 --cognito-identity-pool-id 파라미터를 사용하고, 옵션으로 --principal 파라미터를 추가하여 Amazon Cognito 자격 증명을 지정합니다. --cognito-identity-pool-id 파라미터만 지정할 경우에는 인증을 받지 못한 사용자들을 위해 해당 자격 증명 풀의 역할에 연결된 정책이 반환됩니다. 둘 다 사용할 경우에는 인증 받은 사용자들을 위해 해당 자격 증명 풀의 역할에 연결된 정책이 반환됩니다.

--thing-name 파라미터는 선택 사항이기 때문에 --principal 파라미터 대신 사용할 수 있습니다. 이 파라미터를 사용하면 사물이 속한 모든 그룹에 연결된 정책과 해당 그룹의 모든 상위 그룹(계층 구조에서 루트 그룹까지)에 연결된 정책이 반환됩니다.

GetEffectivePolicies 명령은 정책 목록을 반환합니다.

{ "effectivePolicies": [ { "policyArn": "string", "policyDocument": "string", "policyName": "string" } ... ] }

MQTT 작업에 대한 권한 부여 테스트

다음과 같이 TestAuthorization 명령을 사용하여 사물에서 MQTT 작업(Publish, Subscribe)의 허용 여부를 테스트할 수 있습니다.

aws iot test-authorization \ --principal "arn:aws:iot:us-east-1:123456789012:cert/a0c01f5835079de0a7514643d68ef8414ab739a1e94ee4162977b02b12842847" \ --auth-infos "{\"actionType\": \"PUBLISH\", \"resources\": [ \"arn:aws:iot:us-east-1:123456789012:topic/my/topic\"]}"

--principal 파라미터를 사용하여 사물에 연결되어 있는 인증서 ARN을 지정합니다. Amazon Cognito 자격 증명 인증을 사용할 때는 Cognito 자격 증명을 --principal로 지정하거나 --cognito-identity-pool-id 파라미터를 사용하거나, 혹은 둘 다를 사용합니다. --cognito-identity-pool-id 파라미터만 지정할 경우에는 인증을 받지 못한 사용자들을 위해 해당 자격 증명 풀의 역할에 연결된 정책을 고려합니다. 둘 다 사용할 경우에는 인증 받은 사용자들을 위해 해당 자격 증명 풀의 역할에 연결된 정책을 고려합니다.

--auth-infos 파라미터 이후에 리소스 집합과 작업 유형을 입력하여 테스트할 MQTT 작업을 1가지 이상 지정합니다. actionType 필드에는 "PUBLISH", "SUBSCRIBE", "RECEIVE" 또는 "CONNECT"를 입력해야 합니다. 그리고 resources 필드에는 리소스 ARN 목록을 입력해야 합니다. 자세한 내용은 AWS IoT Core 정책를 참조하세요.

--policy-names-to-add 파라미터에서 정책을 지정하여 정책 추가 효과를 테스트할 수 있습니다. 혹은 --policy-names-to-skip 파라미터에서 정책을 지정하여 정책 제거 효과를 테스트할 수도 있습니다.

또한 옵션으로 --client-id 파라미터를 사용하여 결과를 더욱 구체화하는 것도 가능합니다.

TestAuthorization 명령은 지정한 --auth-infos 쿼리 집합마다 허용되거나 거부된 작업에 대한 세부 정보를 반환합니다.

{ "authResults": [ { "allowed": { "policies": [ { "policyArn": "string", "policyName": "string" } ] }, "authDecision": "string", "authInfo": { "actionType": "string", "resources": [ "string" ] }, "denied": { "explicitDeny": { "policies": [ { "policyArn": "string", "policyName": "string" } ] }, "implicitDeny": { "policies": [ { "policyArn": "string", "policyName": "string" } ] } }, "missingContextValues": [ "string" ] } ] }