

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# パブリッシュ/サブスクライブポリシーの例
<a name="pub-sub-policy"></a>

使用するポリシーは、接続方法によって異なります AWS IoT Core。MQTT クライアント、HTTP、または WebSocket AWS IoT Core を使用して に接続できます。MQTT クライアントを使用して接続すると、X.509 証明書で認証されます。HTTP または WebSocket プロトコルを使用して接続すると、署名バージョン 4 および Amazon Cognito で認証されます。

**注記**  
登録済みデバイスの場合、`Connect` アクションには[モノのポリシー変数](thing-policy-variables.md)を使用し、接続に使用されるプリンシパルにモノをアタッチすることをおすすめします。

**Topics**
+ [MQTT および AWS IoT Core ポリシーでのワイルドカード文字の使用](#pub-sub-policy-cert)
+ [特定のトピックとの間でメッセージを発行、サブスクライブ、および受信するためのポリシー](#pub-sub-specific-topic)
+ [特定のプレフィックスを持つトピックとの間でメッセージを発行、サブスクライブ、および受信するためのポリシー](#pub-sub-policy-specific-topic-prefix)
+ [各デバイスに固有のトピックの間でメッセージを発行、サブスクライブ、および受信するためのポリシー](#pub-sub-specific-topic-device)
+ [トピック名にモノ属性を含むトピックとの間でのメッセージの発行、サブスクライブ、受信に関するポリシー](#pub-sub-topic-attribute)
+ [トピック名のサブトピックへのメッセージの発行を拒否するポリシー](#pub-sub-deny-publish)
+ [トピック名のサブトピックからのメッセージの受信を拒否するポリシー](#pub-sub-deny-receive)
+ [MQTT ワイルドカード文字を使用してトピックにサブスクライブするポリシー](#pub-sub-topic-wildcard)
+ [HTTP および WebSocket クライアントのポリシー](#pub-sub-policy-cognito)

## MQTT および AWS IoT Core ポリシーでのワイルドカード文字の使用
<a name="pub-sub-policy-cert"></a>

MQTT ポリシーと AWS IoT Core ポリシーではワイルドカード文字が異なるため、慎重に検討した上で選択する必要があります。MQTT では、ワイルドカード文字 `+`と `#`が [MQTT トピックフィルター](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html#topicfilters)で使用され、複数のトピック名をサブスクライブします。 AWS IoT Core ポリシーは `*` と をワイルドカード文字`?`として使用し、[IAM ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#policies-grammar-json)の規則に従います。ポリシードキュメントでは、`*` は任意の文字の組み合わせを表し、疑問符 `?` は任意の 1 文字を表します。ポリシードキュメントでは、MQTT ワイルドカード文字である `+` と `#` は、特別な意味を持たないこれらの文字として扱われます。ポリシーの `resource` 属性に複数のトピック名とトピックフィルターを記述するには、MQTT ワイルドカード文字の代わりに `*` と `?` ワイルドカード文字を使用します。

ポリシードキュメントで使用するワイルドカード文字を選択するとき、`*` 文字は、単一のトピックレベルに限定されないことを考慮してください。`+` 文字は、MQTT トピックフィルターの 1 つのトピックレベルに制限されます。ワイルドカードの仕様を単一の MQTT トピックフィルターレベルに制約するには、複数の `?` 文字の使用を検討してください。ポリシーリソースでのワイルドカード文字の使用、およびワイルドカード文字が一致するその他の例については、「[リソース ARN でのワイルドカードの使用](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_resource.html#reference_policies_elements_resource_wildcards)」を参照してください。

次の表は、MQTT で使用されるさまざまなワイルドカード文字と MQTT クライアントの AWS IoT Core ポリシーを示しています。


| ワイルドカード文字 | MQTT のワイルドカード文字 | MQTT での例 |  AWS IoT Core ポリシーのワイルドカード文字 | MQTT クライアントの AWS IoT Core ポリシーの例 | 
| --- | --- | --- | --- | --- | 
| \$1 | はい | some/\$1 | いいえ | 該当なし | 
| \$1 | はい | some/\$1/topic | いいえ | 該当なし | 
| \$1 | いいえ | 該当なし | はい | `topicfilter/some/*/topic` `topicfilter/some/sensor*/topic`  | 
| ? | いいえ | 該当なし | はい |  `topic/some/?????/topic` `topicfilter/some/sensor???/topic`  | 

## 特定のトピックとの間でメッセージを発行、サブスクライブ、および受信するためのポリシー
<a name="pub-sub-specific-topic"></a>

以下に、登録済みデバイスと未登録デバイスで、「some\$1speciic\$1topic」という名前のトピックとの間でメッセージを発行、サブスクライブ、受信する例を示します。例では、`Publish` と `Receive` がリソースとして「トピック」を使用し、`Subscribe` がリソースとして「トピックフィルター」を使用することも強調しています。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。また、「some\$1specific\$1topic」という名前のトピックに対する `Publish`、`Subscribe`、および `Receive` のアクセス許可も提供します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。また、「some\$1specific\$1topic」という名前のトピックに対する `Publish`、`Subscribe`、および `Receive` のアクセス許可も提供します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        }
    ]
}
```

------

## 特定のプレフィックスを持つトピックとの間でメッセージを発行、サブスクライブ、および受信するためのポリシー
<a name="pub-sub-policy-specific-topic-prefix"></a>

以下に、登録済みデバイスと未登録デバイスで、「topic\$1prefix」というプレフィックスが付いたトピックとの間でメッセージを発行、サブスクライブ、受信する例を示します。

**注記**  
この例では、ワイルドカード文字 `*` を使用することに注意してください。`*` は、1 つのステートメントで複数のトピック名にアクセス許可を与えるのに便利ですが、必要以上の権限をデバイスに与えると、意図しない結果につながる可能性があります。そのため、慎重に検討したうえで、ワイルドカード文字 `*` のみを使用することをお勧めします。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。また、「some\$1specific\$1topic」というプレフィックスが付いたトピックに対する `Publish`、`Subscribe`、および `Receive` のアクセス許可も提供します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。また、「some\$1specific\$1topic」というプレフィックスが付いたトピックに対する `Publish`、`Subscribe`、および `Receive` のアクセス許可も提供します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish",
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
            ]
        }
    ]
}
```

------

## 各デバイスに固有のトピックの間でメッセージを発行、サブスクライブ、および受信するためのポリシー
<a name="pub-sub-specific-topic-device"></a>

以下は、登録済みデバイスと未登録デバイスで、特定のデバイスに固有のトピックとの間でメッセージの発行、サブスクライブ、および受信を行う例を示しています。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。これにより、モノ固有のトピック (`sensor/device/${iot:Connection.Thing.ThingName}`) への発行、モノ固有のトピック (`command/device/${iot:Connection.Thing.ThingName}`) との間でサブスクライブおよび受信を行う許可が提供されます。レジストリ内のモノの名前が「thing1」の場合、デバイスは「sensor/device/thing1」トピックに発行できます。また、デバイスは「command/device/thing1」トピックにサブスクライブして受信することもできます。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。これにより、クライアント固有のトピック (`sensor/device/${iot:ClientId}`) への発行、クライアント固有のトピック (`command/device/${iot:ClientId}`) との間でサブスクライブおよび受信を行う許可が提供されます。デバイスが clientId1 として clientId で接続すると、トピック「sensor/device/clientId1」に発行できるようになります。デバイスは、トピック `device/clientId1/command` にサブスクライブして から受信することもできます。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
            ]
        }
    ]
}
```

------

## トピック名にモノ属性を含むトピックとの間でのメッセージの発行、サブスクライブ、受信に関するポリシー
<a name="pub-sub-topic-attribute"></a>

以下に、登録済みデバイスが、名前にモノの属性を含むトピックとの間でメッセージを発行、サブスクライブ、受信する例を示します。

**注記**  
モノの属性は、 AWS IoT Core レジストリに登録されているデバイスにのみ存在します。未登録のデバイスに対応する例はありません。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。これにより、トピック (`sensor/${iot:Connection.Thing.Attributes[version]}`) への発行、トピック (`command/${iot:Connection.Thing.Attributes[location]}`) との間でのサブスクライブと受信を許可します。トピック名にはモノの属性が含まれます。レジストリ内のモノの名前に `version=v1` と `location=Seattle` がある場合、デバイスはトピック「sensor/v1」に発行し、トピック「command/Seattle」との間でサブスクライブして受信することができます。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/${iot:Connection.Thing.Attributes[version]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/${iot:Connection.Thing.Attributes[location]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/${iot:Connection.Thing.Attributes[location]}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

モノの属性は AWS IoT Core のレジストリに登録されているデバイスにしか存在しないため、未登録のモノに対応する例はありません。

------

## トピック名のサブトピックへのメッセージの発行を拒否するポリシー
<a name="pub-sub-deny-publish"></a>

以下は、登録済みデバイスと未登録デバイスで、特定のサブトピックを除くすべてのトピックにメッセージを発行する例を示しています。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。「department/」というプレフィックスが付いているすべてのトピックには発行できますが、「department/admins」サブトピックには発行できません。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/*"
			]
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/admins"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。「department/」というプレフィックスが付いているすべてのトピックには発行できますが、「department/admins」サブトピックには発行できません。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/admins"
            ]
        }
    ]
}
```

------

## トピック名のサブトピックからのメッセージの受信を拒否するポリシー
<a name="pub-sub-deny-receive"></a>

以下に、登録済みデバイスと未登録デバイスで、特定のサブトピックを除く特定のプレフィックスを持つトピックをサブスクライブしたり、トピックからメッセージを受信したりする例を示します。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。このポリシーにより、デバイスは「topic\$1prefix」というプレフィックスが付いた任意のトピックをサブスクライブできます。`iot:Receive` のステートメントで `NotResource` を使用すると、「topic\$1prefix/restricted」というプレフィックスが付いたトピックを除いて、デバイスがサブスクライブしているすべてのトピックからのメッセージをデバイスが受信できるようになります。例えば、このポリシーでは、デバイスは「topic\$1prefix/topic1」や「topic\$1prefix/restricted」をサブスクライブできますが、トピック「topic\$1prefix/topic1」からのメッセージのみを受信し、トピック「topic\$1prefix/restricted」からのメッセージは受信しません。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。このポリシーにより、デバイスは「topic\$1prefix」というプレフィックスが付いた任意のトピックをサブスクライブできます。`iot:Receive` のステートメントで `NotResource` を使用すると、「topic\$1prefix/restricted」というプレフィックスが付いたトピックを除いて、デバイスがサブスクライブしているすべてのトピックからのメッセージをデバイスが受信できるようになります。例えば、このポリシーでは、デバイスは「topic\$1prefix/topic1」と「topic\$1prefix/restricted」をサブスクライブできます。ただし、トピック「topic\$1prefix/topic1」からのメッセージのみを受信し、トピック「topic\$1prefix/restricted」からのメッセージは受信しません。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
        }
    ]
}
```

------

## MQTT ワイルドカード文字を使用してトピックにサブスクライブするポリシー
<a name="pub-sub-topic-wildcard"></a>

MQTT ワイルドカード文字 \$1 と \$1 はリテラル文字列として扱われますが、 AWS IoT Core ポリシーで使用するとワイルドカードとして扱われません。MQTT では、\$1 と \$1 はトピックフィルターに登録する場合にのみワイルドカードとして扱われ、それ以外のコンテキストではリテラル文字列として扱われます。これらの MQTT ワイルドカードは、慎重に検討した後、 AWS IoT Core ポリシーの一部としてのみ使用することをお勧めします。

 AWS IoT Core ポリシーで MQTT ワイルドカードを使用する登録済みおよび未登録のモノの例を次に示します。これらのワイルドカードはリテラル文字列として扱われます。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。このポリシーにより、デバイスは「department/\$1/employees」と「location/\$1」のトピックをサブスクライブできるようになります。\$1 と \$1 は、 AWS IoT Core ポリシーではリテラル文字列として扱われるため、デバイスは「department/\$1/employees」というトピックにはサブスクライブできますが、「department/engineering/employees」のトピックにはサブスクライブできません。同様に、デバイスはトピック「location/\$1」をサブスクライブできますが、「location/Seattle」というトピックには登録できません。ただし、デバイスが「department/\$1/employees」というトピックに登録すると、ポリシーにより、「department/engineering/employees」というトピックからのメッセージを受信できるようになります。同様に、デバイスが「location/\$1」というトピックをサブスクライブすると、「location/Seattle」というトピックからのメッセージも受信するようになります。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。このポリシーにより、デバイスは「department/\$1/employees」と「location/\$1」のトピックをサブスクライブできるようになります。\$1 と \$1 は、 AWS IoT Core ポリシーではリテラル文字列として扱われるため、デバイスは「department/\$1/employees」というトピックにはサブスクライブできますが、「department/engineering/employees」のトピックにはサブスクライブできません。同様に、デバイスはトピック「ロケーション/\$1」をサブスクライブできますが、「ロケーション/シアトル」はサブスクライブできません。ただし、デバイスが「department/\$1/employees」というトピックに登録すると、ポリシーにより、「department/engineering/employees」というトピックからのメッセージを受信できるようになります。同様に、デバイスが「location/\$1」というトピックをサブスクライブすると、「location/Seattle」というトピックからのメッセージも受信するようになります。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
        }
    ]
}
```

------

## HTTP および WebSocket クライアントのポリシー
<a name="pub-sub-policy-cognito"></a>

HTTP または WebSocket プロトコルを使用して接続すると、署名バージョン 4 および Amazon Cognito で認証されます。Amazon Cognito ID は、認証されている場合と認証されていない場合があります。認証された ID は任意のサポートされている認証プロバイダーで認証されたユーザーに属します。認証されていない ID は、通常、ID プロバイダーで認証しないゲストユーザーに属します。Amazon Cognito は、認証されていない ID をサポートするために一意の識別子と AWS 認証情報を提供します。詳細については、「[Amazon Cognito ID を使用した承認](cog-iot-policies.md)」を参照してください。

以下のオペレーションでは、 `AttachPolicy` API を介して Amazon Cognito ID にアタッチされた AWS IoT Core ポリシー AWS IoT Core を使用します。これにより、認証された ID を持つ Amazon Cognito アイデンティティプールにアタッチされたアクセス許可がスコープダウンされます。
+ `iot:Connect`
+ `iot:Publish`
+ `iot:Subscribe`
+ `iot:Receive`
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

つまり、Amazon Cognito ID には IAM ロールポリシーと AWS IoT Core ポリシーからのアクセス許可が必要です。API を使用して、IAM ロールポリシーをプールにアタッチし、 AWS IoT Core ポリシーを Amazon Cognito ID にアタッチします AWS IoT Core `AttachPolicy`。

認証されたユーザーと未認証のユーザーは、異なる ID タイプです。 AWS IoT ポリシーを Amazon Cognito ID にアタッチしない場合、認証されたユーザーが AWS IoT での認可に失敗し、 AWS IoT リソースとアクションにアクセスできません。

**注記**  
他の AWS IoT Core オペレーションや認証されていない ID の場合、 AWS IoT Core は Amazon Cognito ID プールロールにアタッチされたアクセス許可の範囲を絞り込みません。認証済みの ID と非認証の ID の両方に対して、これは、Amazon Cognito プールのロールにアタッチすることをお勧めする最も緩いポリシーです。

**HTTP**

非認証の Amazon Cognito ID が Amazon Cognito ID に固有のトピックで HTTP を介してメッセージを発行できるようにするには、Amazon Cognito ID プールロールに以下の IAM ポリシーをアタッチします。

****  

```
{
    "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](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html) API を使用して、前述のポリシーを Amazon Cognito ID プールロールと Amazon Cognito ID にアタッチします。

**注記**  
Amazon Cognito ID を承認する場合、 は両方のポリシー AWS IoT Core を検討し、指定された最小限の権限を付与します。アクションは、両方のポリシーで要求されたアクションが許可されている場合にのみ許可されます。いずれかのポリシーでアクションが許可されていない場合、そのアクションは許可されません。

**MQTT**

非認証の Amazon Cognito ID がアカウントで Amazon Cognito ID に固有のトピックで WebSockets を介して MQTT メッセージをパブリッシュできるようにするには、Amazon Cognito ID プールロールに以下の IAM ポリシーをアタッチします。

****  

```
{
    "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](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html) API を使用して、前述のポリシーを Amazon Cognito ID プールロールと Amazon Cognito ID にアタッチします。

**注記**  
Amazon Cognito ID を承認するときは、 と の両方 AWS IoT Core を考慮し、指定された最小限の権限を付与します。アクションは、両方のポリシーで要求されたアクションが許可されている場合にのみ許可されます。いずれかのポリシーでアクションが許可されていない場合、そのアクションは許可されません。