게시/구독 정책 예제 - AWS IoT Core

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

게시/구독 정책 예제

사용하는 정책은 AWS IoT Core에 연결하는 방식에 따라 달라집니다. MQTT 클라이언트, HTTP 또는 WebSocket을 사용하여 AWS IoT Core에 연결할 수 있습니다. MQTT 클라이언트를 사용하여 연결하는 경우 X.509 인증서를 사용하여 인증합니다. HTTP 또는 WebSocket 프로토콜을 통해 연결하는 경우 서명 버전 4 및 Amazon Cognito을(를) 사용하여 인증합니다.

MQTT 클라이언트용 정책

주제 이름에 와일드카드를 지정하려면 디바이스가 여러 주제를 게시하고 구독할 때 정책의 resource 속성에 *를 사용합니다. 다음 정책에서는 디바이스가 동일한 이름으로 시작하는 모든 하위 주제에 게시할 수 있습니다.

Registered devices (5)

AWS IoT Core 레지스트리에 사물로 등록된 디바이스의 경우, 다음 정책은 사물 이름과 일치하는 클라이언트 ID를 사용하여 AWS IoT Core에 연결하고 접두사가 사물 이름인 모든 주제에 게시할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}", ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}/*" ] } ] }
Unregistered devices (5)

AWS IoT Core 레지스트리에 사물로 등록되지 않은 디바이스의 경우, 다음 정책은 클라이언트 ID client1, client2 또는 client3을 사용하여 AWS IoT Core에 연결하고 접두사가 해당 클라이언트 ID인 모든 주제에 게시할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/client1", "arn:aws:iot:us-east-1:123456789012:client/client2", "arn:aws:iot:us-east-1:123456789012:client/client3" ] } { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/${iot:ClientId}/*" ] } ] }

주제 필터의 끝에 * 와일드카드를 사용할 수도 있습니다. 와일드카드 문자를 사용하면 의도하지 않은 권한을 부여할 수 있으므로, 신중하게 고려한 후에만 사용해야 합니다. 와일드카드 문자가 유용할 수 있는 한 가지 상황은 디바이스가 다양한 주제의 메시지를 구독해야 하는 경우입니다. 예를 들어 디바이스가 여러 위치에 있는 온도 센서의 보고서를 구독해야 하는 경우입니다.

Registered devices (6)

AWS IoT Core 레지스트리에 사물로 등록된 디바이스의 경우, 다음 정책은 디바이스의 사물 이름을 클라이언트 ID로 사용하여 AWS IoT Core에 연결하고 접두사가 사물 이름이고 뒤에 room과 문자열이 이어지는 주제를 구독할 수 있는 권한을 부여합니다. (예를 들어 이러한 주제는 thing1/room1, thing1/room2 등이라고 예상됩니다.)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/${iot:Connection.Thing.ThingName}/room*" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}/room*" ] } ] }
Unregistered devices (6)

AWS IoT Core 레지스트리에 사물로 등록되지 않은 디바이스의 경우, 다음 정책은 클라이언트 ID client1, client2, client3을 사용하여 AWS IoT Core에 연결하고 접두사가 클라이언트 ID이고 뒤에 room과 문자열이 이어지는 주제를 구독할 수 있는 권한을 부여합니다. (예를 들어 이러한 주제는 client1/room1, client1/room2 등이라고 예상됩니다.)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/client1", "arn:aws:iot:us-east-1:123456789012:client/client2", "arn:aws:iot:us-east-1:123456789012:client/client3" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/${iot:ClientId}/room*" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/${iot:ClientId}/room*" ] } ] }

MQTT 클라이언트에 대한 AWS IoT Core 정책에서 주제 필터를 지정할 때 MQTT 와일드카드 문자 "+" 및 "#"은 리터럴 문자로 간주됩니다. 이러한 문자를 사용할 경우 예기치 않은 동작이 발생할 수 있습니다.

Registered devices (4)

AWS IoT Core 레지스트리에 사물로 등록된 디바이스의 경우, 다음 정책은 사물 이름과 일치하는 클라이언트 ID를 사용하여 AWS IoT Core에 연결하고 주제 필터 some/+/topic만 구독할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/some/+/topic" ] } ] }
Unregistered devices (4)

AWS IoT Core 레지스트리에 사물로 등록되지 않은 디바이스의 경우, 다음 정책은 클라이언트 ID client1을 사용하여 AWS IoT Core에 연결하고 주제 필터 some/+/topic만 구독할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/client1" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/some/+/topic" ] } ] }
참고

정책에서 MQTT 와일드카드 문자 +는 리터럴로 처리되며 와일드카드로 처리되지 않습니다. 패턴 some/+/topic과 일치하는 주제 필터를 구독하려 할 경우 시도가 실패하고 클라이언트가 연결 해제됩니다.

Registered devices (7)

AWS IoT Core 레지스트리에 사물로 등록된 디바이스의 경우, 다음 정책은 디바이스의 사물 이름을 클라이언트 ID로 사용하여 AWS IoT Core에 연결하고 주제 my/topicmy/othertopic을 구독할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/my/topic", "arn:aws:iot:us-east-1:123456789012:topicfilter/my/othertopic" ] } ] }
Unregistered devices (7)

AWS IoT Core 레지스트리에 사물로 등록되지 않은 디바이스의 경우, 다음 정책은 클라이언트 ID client1을 사용하여 AWS IoT Core에 연결하고 주제 my/topicmy/othertopic을 구독할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/client1" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/my/topic", "arn:aws:iot:us-east-1:123456789012:topicfilter/my/othertopic" ] } ] }
Registered devices (8)

AWS IoT Core 레지스트리에 사물로 등록된 디바이스의 경우, 다음 정책은 디바이스의 사물 이름을 클라이언트 ID로 사용하여 AWS IoT Core에 연결하고 해당 사물 이름/클라이언트 ID에 고유한 주제를 구독할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:Thing.ThingName}" ] } ] }
Unregistered devices (8)

AWS IoT Core 레지스트리에 사물로 등록되지 않은 디바이스의 경우, 다음 정책은 클라이언트 ID client1을 사용하여 AWS IoT Core에 연결하고 해당 클라이언트 ID에 고유한 주제에 게시할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/client1" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}" ] } ] }
Registered devices (9)

AWS IoT Core 레지스트리에 사물로 등록된 디바이스의 경우, 다음 정책은 디바이스의 사물 이름을 클라이언트 ID로 사용하여 AWS IoT Core에 연결하고 bar로 끝나는 주제 하나를 제외하고 접두사가 해당 사물 이름 또는 클라이언트인 모든 주제에 게시할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/${iot:Thing.ThingName}/*" ] }, { "Effect": "Deny", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/${iot:Thing.ThingName}/bar" ] } ] }
Unregistered devices (9)

AWS IoT Core 레지스트리에 사물로 등록되지 않은 디바이스의 경우, 다음 정책은 클라이언트 ID client1client1을 사용하여 AWS IoT Core에 연결하고, bar로 끝나는 주제 하나를 제외하고 접두사가 연결하는 데 사용된 클라이언트 ID인 모든 주제에 게시할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/client1", "arn:aws:iot:us-east-1:123456789012:client/client2" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/${iot:ClientId}/*" ] }, { "Effect": "Deny", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/${iot:ClientId}/bar" ] } ] }
Registered devices (10)

AWS IoT Core 레지스트리에 사물로 등록된 디바이스의 경우, 다음 정책은 디바이스의 사물 이름을 클라이언트 ID로 사용하여 AWS IoT Core에 연결할 수 있는 권한을 부여합니다. 장치가 항목을 구독할 수 있습니다. my/topic, 그러나 에 게시할 수 없습니다. thing-name /bar 여기서 thing-name 사물인터넷과 연결된 사물인터넷의 이름 AWS IoT Core:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/my/topic" ] }, { "Effect": "Deny", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/${iot:Thing.ThingName}/bar" ] } ] }
Unregistered devices (10)

AWS IoT Core 레지스트리에 사물로 등록되지 않은 디바이스의 경우, 다음 정책은 클라이언트 ID client1을 사용하여 AWS IoT Core에 연결하고 주제 my/topic을 구독할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/client1" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/my/topic" ] } ] }

또한 사물 정책 변수는 인증서 또는 인증된 Amazon Cognito 자격 증명가 사물에 연결될 때에도 대체됩니다. 다음 정책은 에 연결할 수 있는 권한을 부여합니다. AWS IoT Core 고객 ID 포함 client1 주제 게시 및 수신 iotmonitor/provisioning/987654321098. 또한 인증서 소유자는 이 항목을 구독할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/client1" ] }, { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Receive" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/iotmonitor/provisioning/987654321098" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/iotmonitor/provisioning/987654321098" ] } ] }

HTTP 및 WebSocket 클라이언트용 정책

다음 작업의 경우 AWS IoT Core는 Amazon Cognito 자격 증명에 연결된 AWS IoT Core 정책을 사용하여(AttachPolicy API를 통해) 인증된 자격 증명을 사용하는 Amazon Cognito 자격 증명 풀에 연결된 권한을 축소합니다. 따라서 Amazon Cognito 자격 증명는 풀에 연결된 IAM 역할 정책과 AWS IoT Core AttachPolicy API를 통해 Amazon Cognito 자격 증명에 연결된 AWS IoT Core 정책의 권한이 필요합니다.

  • iot:Connect

  • iot:Publish

  • iot:Subscribe

  • iot:Receive

  • iot:GetThingShadow

  • iot:UpdateThingShadow

  • iot:DeleteThingShadow

참고

다른 AWS IoT Core 작업 또는 인증되지 않은 자격 증명의 경우 AWS IoT Core가 Amazon Cognito 자격 증명 풀 역할에 연결된 권한을 축소하지 않습니다. 인증된 자격 증명과 인증되지 않은 자격 증명 모두에 대해 이 정책은 Amazon Cognito 풀 역할에 연결하도록 권장되는 가장 허용적인 정책입니다.

HTTP

인증되지 않은 Amazon Cognito 자격 증명이 Amazon Cognito 자격 증명에 특정한 주제에 HTTP를 통해 메시지를 게시하도록 허용하려면 다음 정책을 Amazon Cognito 자격 증명 풀 역할에 연결합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", ], "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"] } ] }

인증된 사용자를 허용하려면 AWS IoT Core AttachPolicy API를 사용하여 위의 정책을 Amazon Cognito 자격 증명 풀 역할 및 Amazon Cognito 자격 증명에 연결합니다.

참고

Amazon Cognito 자격 증명에 권한을 부여할 때 AWS IoT Core는 두 정책을 모두 고려하고 지정된 최소 권한을 부여합니다. 두 정책이 모두 요청된 작업을 허용하는 경우에만 작업이 허용됩니다. 어느 한 정책이 작업을 허용하지 않을 경우 해당 작업은 승인되지 않습니다.

MQTT

인증되지 않은 Amazon Cognito 자격 증명이 계정의 Amazon Cognito 자격 증명에 특정한 주제에 WebSocket을 통해 MQTT 메시지를 게시하도록 허용하려면 다음 정책을 Amazon Cognito 자격 증명 풀 역할에 연결합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", ], "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"] }, { "Effect": "Allow", "Action": [ "iot:Connect", ], "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${cognito-identity.amazonaws.com:sub}"] } ] }

인증된 사용자를 허용하려면 AWS IoT Core AttachPolicy API를 사용하여 위의 정책을 Amazon Cognito 자격 증명 풀 역할 및 Amazon Cognito 자격 증명에 연결합니다.

참고

Amazon Cognito 자격 증명에 권한을 부여할 때 AWS IoT Core는 이러한 정책을 모두 고려하고 지정된 최소 권한을 부여합니다. 두 정책이 모두 요청된 작업을 허용하는 경우에만 작업이 허용됩니다. 어느 한 정책이 작업을 허용하지 않을 경우 해당 작업은 승인되지 않습니다.

수신 정책 예제

Registered devices (11)

AWS IoT Core 레지스트리에 등록된 디바이스의 경우, 다음 정책은 사물 이름과 일치하는 클라이언트 ID를 사용하여 AWS IoT Core에 연결하고 my/topic 주제의 메시지를 구독 및 수신할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/my/topic" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/my/topic" ] } ] }
Unregistered devices (11)

AWS IoT Core 레지스트리에 등록되지 않은 디바이스의 경우, 다음 정책은 클라이언트 ID client1을 사용하여 AWS IoT Core에 연결하고 한 주제의 메시지를 구독 및 수신할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": ["arn:aws:iot:us-east-1:123456789012:client/client1"] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/my/topic" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/my/topic" ] } ] }