

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

# AWS IoT Core ポリシー変数
<a name="iot-policy-variables"></a>

AWS IoT Core は、 `Resource` または `Condition`ブロックのポリシーで使用できる AWS IoT Core ポリシー変数を定義します。ポリシーが評価されると、ポリシー変数は実際の値に置き換えられます。たとえば、デバイスがクライアント ID が 100-234-3456 の AWS IoT Core メッセージブローカーに接続されている場合、`iot:ClientId`ポリシードキュメントのポリシー変数は 100-234-3456 に置き換えられます。

AWS IoT Core ポリシーはワイルドカード文字を使用し、IAM ポリシーと同様の規則に従うことができます。文字列に `*` (アスタリスク) を挿入すると、任意の文字に一致するワイルドカードとして扱うことができます。例えば、`*` を使用してポリシーの `Resource` 属性で複数の MQTT トピック名を記述できます。`+` と `#` の文字は、ポリシーの中でリテラル文字列として扱われます。ワイルドカードを使用する方法を示したポリシー例については、「[MQTT および AWS IoT Core ポリシーでのワイルドカード文字の使用](pub-sub-policy.md#pub-sub-policy-cert)」を参照してください。

また、固定値を持つ事前定義されたポリシー変数を使用して、それ以外の場合に特別な意味を持つ文字を表現することができます。これらの特殊文字には、`$(*)`、`$(?)`、および `$($)` が含まれます。ポリシー変数と特殊文字の詳細については、「[IAM ポリシーの要素: 変数とタグ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)」および「[複数のキーまたは値による条件の作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html)」を参照してください。

**Topics**
+ [基本的な AWS IoT Core ポリシー変数](basic-policy-variables.md)
+ [モノのポリシー変数](thing-policy-variables.md)
+ [X.509 証明書 AWS IoT Core ポリシー変数](cert-policy-variables.md)

# 基本的な AWS IoT Core ポリシー変数
<a name="basic-policy-variables"></a>

AWS IoT Core は、以下の基本的なポリシー変数を定義します。
+ `aws:SourceIp`: AWS IoT Core メッセージブローカーに接続されているクライアントの IP アドレス。
+ `iot:ClientId`: このクライアント ID は、 AWS IoT Core メッセージブローカーに接続するために使用されます。
+ `iot:DomainName`: 接続先のクライアントのドメイン名 AWS IoT Core。

**Topics**
+ [`ClientId` および `SourceIp` ポリシー変数の例](#basic-policy-variables-example)
+ [`iot:DomainName` ポリシー変数の例](#basic-policy-variables-example-domain)

## `ClientId` および `SourceIp` ポリシー変数の例
<a name="basic-policy-variables-example"></a>

次の AWS IoT Core ポリシーは、ポリシー変数を使用するポリシーを示しています。 `aws:SourceIp`は、ポリシーの Condition 要素で使用して、プリンシパルが特定のアドレス範囲内でのみ API リクエストを実行できるようにします。例については「[ユーザーとクラウドサービスに AWS IoT ジョブの使用を許可する](iam-policy-users-jobs.md)」を参照してください。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
			],
			"Condition": {
				"IpAddress": {
					"aws:SourceIp": "123.45.167.89"
				}
			}
		}
	]
}
```

これらの例では、ポリシー`${iot:ClientId}`が評価されると、 は AWS IoT Core メッセージブローカーに接続されたクライアントの ID に置き換えられます。`${iot:ClientId}` などのポリシー変数を使用すると、アクセス可能にしないトピックにアクセスすることがあります。例えば、`${iot:ClientId}` を使用するポリシーでトピックフィルターを指定する場合です。

```
{
	"Effect": "Allow",
	"Action": [
		"iot:Subscribe"
	],
	"Resource": [
		"arn:aws:iot:us-east-1:123456789012:topicfilter/my/${iot:ClientId}/topic"
	]
}
```

クライアントは、クライアント ID として `+` を使用して接続できます。これにより、ユーザーはトピックフィルター `my/+/topic` に一致する任意のトピックにサブスクライブできます。このようなセキュリティギャップから保護するには、`iot:Connect` ポリシーアクションを使用して、どのクライアント ID が接続できるかを制御します。例えば、このポリシーにより、これらのクライアント ID が `clientid1` のクライアントのみが接続できるようになります。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid"
			]
		}
	]
}
```

**注記**  
ポリシー変数 `${iot:ClientId}` を `Connect` と併用することはお勧めしません。`ClientId` の値はチェックされないため、別のクライアントの ID のアタッチャーが検証に合格しても接続が切断されることがあります。どのクライアント ID `ClientId` も許可されているため、ランダムなクライアント ID を設定すると、モノグループのポリシーがバイパスされる可能性があります。

## `iot:DomainName` ポリシー変数の例
<a name="basic-policy-variables-example-domain"></a>

`iot:DomainName` ポリシー変数を追加して、使用できるドメインを制限できます。`iot:DomainName` ポリシー変数を追加すると、デバイスは特定の設定済みエンドポイントにのみ接続できます。

次のポリシーでは、デバイスが指定されたドメインに接続することを許可します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "AllowConnectionsToSpecifiedDomain",
		"Effect": "Allow",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

次のポリシーは、デバイスが指定されたドメインに接続することを拒否します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "DenyConnectionsToSpecifiedDomain",
		"Effect": "Deny",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

ポリシー条件演算子の詳細については、「[IAM JSON ポリシーエレメント: 条件演算子](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)」を参照してください。ドメイン設定の詳細については、「[ドメイン設定とは](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html)」を参照してください。

# モノのポリシー変数
<a name="thing-policy-variables"></a>

モノのポリシー変数を使用すると、モノの名前、モノのタイプ、モノの属性値などのモノのプロパティに基づいてアクセス許可を付与または拒否する AWS IoT Core ポリシーを作成できます。モノのポリシー変数を使用して、同じポリシーを適用して多くの AWS IoT Core デバイスを制御できます。デバイスのプロビジョニングの詳細については、「[デバイスプロビジョニング](iot-provision.html)」を参照してください。

非排他的なモノの関連付けを使用する場合、同じ証明書を複数のモノにアタッチすることができます。明確な関連付けを維持し、潜在的な競合を回避するには、クライアント ID をモノの名前と一致させる必要があります。この場合、モノの接続時に送信される MQTT `Connect` メッセージ内のクライアント ID からモノの名前を取得します AWS IoT Core。

 AWS IoT Core ポリシーでモノのポリシー変数を使用する場合は、次の点に注意してください。
+ [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html) API を使用して、証明書やプリンシパル (認証済みの Amazon Cognito ID) をモノにアタッチします。
+ モノの名前をモノのポリシー変数に置き換える場合、MQTT 接続メッセージまたは TLS 接続の `clientId` の値がモノの名前と完全に一致している必要があります。

以下のモノのポリシー変数が利用可能です。
+ `iot:Connection.Thing.ThingName`

  これは、ポリシーが評価されている AWS IoT Core レジストリ内のモノの名前に解決されます。 は、デバイスが認証するときに提示する証明書 AWS IoT Core を使用して、接続の検証に使用するモノを決定します。このポリシー変数は、デバイスが MQTT または MQTT over WebSocket プロトコルに接続するときにのみ使用できます。
+ `iot:Connection.Thing.ThingTypeName`

  これは、ポリシーが評価されているモノと関連付けられるモノのタイプに解決されます。MQTT/WebSocket 接続のクライアント ID は、モノの名前と同じである必要があります。このポリシー変数は、MQTT または MQTT over WebSocket プロトコルに接続するときにのみ使用できます。
+ `iot:Connection.Thing.Attributes[attributeName]`

  これは、ポリシーが評価されているモノと関連付けられる指定した属性値に解決されます。モノには最大 50 個の属性を指定できます。各属性はポリシー変数として使用できます。`iot:Connection.Thing.Attributes[attributeName]` *attributeName* は属性の名前です。MQTT/WebSocket 接続のクライアント ID は、モノの名前と同じである必要があります。このポリシー変数は、MQTT または MQTT over WebSocket プロトコルに接続するときにのみ使用できます。
+ `iot:Connection.Thing.IsAttached`

  `iot:Connection.Thing.IsAttached: ["true"]` は、 に登録 AWS IoT され、プリンシパルにアタッチされているデバイスのみがポリシー内のアクセス許可にアクセスできるようにします。この変数を使用すると、デバイスがレジストリ内の AWS IoT Core IoT モノにアタッチされていない証明書を提示 AWS IoT Core する場合、デバイスが に接続できないようにできます。この変数には値 `true` または があり、接続するモノが [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html) API を使用してレジストリ内の証明書または Amazon Cognito ID にアタッチされている`false`ことを示します。モノの名前はクライアント ID として使用されます。

クライアント ID がモノの名前と一致する場合、または証明書をモノに排他的にアタッチする場合は、ポリシー定義でポリシー変数を使用すると、ポリシー管理を簡素化できます。IoT のモノごとに個別のポリシーを作成する代わりに、モノのポリシー変数を使用して単一のポリシーを定義できます。このポリシーは、すべてのデバイスに動的に適用できます。以下は、この仕組みを示すポリシーの例です。詳細については、「[AWS IoT モノを MQTT クライアント接続に関連付ける](exclusive-thing.md)」を参照してください。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Condition": {
				"StringLike": {
					"iot:ClientId": "*${iot:Connection.Thing.Attributes[envType]}"
				}
			},
			"Effect": "Allow",
			"Action": "iot:Connect",
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/*"
		}
	]
}
```

このポリシー例では、クライアント ID が `envType` 属性の値で終わる AWS IoT Core と、モノは に接続できます。接続できるのは、一致するクライアント ID パターンを持つモノのみです。

# X.509 証明書 AWS IoT Core ポリシー変数
<a name="cert-policy-variables"></a>

X.509 証明書ポリシー変数は、 AWS IoT Core ポリシーの記述に役立ちます。これらのポリシーは、X.509 証明書属性に基づいてアクセス許可を付与します。次のセクションでは、それらの証明書のポリシー変数を使用する方法を説明します。

**重要**  
X.509 証明書に特定の証明書属性が含まれていないものの、対応する証明書ポリシー変数がポリシードキュメントで使用されている場合、ポリシー評価によって予期しない動作が発生する可能性があります。

## CertificateId
<a name="cert-policy-variables-certid"></a>

[RegisterCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCertificate.html) API では、レスポンス本文に `certificateId` が表示されます。証明書に関する情報を取得するには、[DescribeCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeCertificate.html) で `certificateId` を使用できます。

## 発行元の属性
<a name="issuer-attributes"></a>

次の AWS IoT Core ポリシー変数は、証明書発行者が設定した証明書属性に基づいて、アクセス許可の許可または拒否をサポートします。
+ `iot:Certificate.Issuer.DistinguishedNameQualifier`
+ `iot:Certificate.Issuer.Country`
+ `iot:Certificate.Issuer.Organization`
+ `iot:Certificate.Issuer.OrganizationalUnit`
+ `iot:Certificate.Issuer.State`
+ `iot:Certificate.Issuer.CommonName`
+ `iot:Certificate.Issuer.SerialNumber`
+ `iot:Certificate.Issuer.Title`
+ `iot:Certificate.Issuer.Surname`
+ `iot:Certificate.Issuer.GivenName`
+ `iot:Certificate.Issuer.Initials`
+ `iot:Certificate.Issuer.Pseudonym`
+ `iot:Certificate.Issuer.GenerationQualifier` 

## 件名の属性
<a name="subject-attributes"></a>

次の AWS IoT Core ポリシー変数は、証明書発行者が設定した証明書のサブジェクト属性に基づいて、アクセス許可の付与または拒否をサポートします。
+ `iot:Certificate.Subject.DistinguishedNameQualifier`
+ `iot:Certificate.Subject.Country`
+ `iot:Certificate.Subject.Organization`
+ `iot:Certificate.Subject.OrganizationalUnit`
+ `iot:Certificate.Subject.State`
+ `iot:Certificate.Subject.CommonName`
+ `iot:Certificate.Subject.SerialNumber`
+ `iot:Certificate.Subject.Title`
+ `iot:Certificate.Subject.Surname`
+ `iot:Certificate.Subject.GivenName`
+ `iot:Certificate.Subject.Initials`
+ `iot:Certificate.Subject.Pseudonym`
+ `iot:Certificate.Subject.GenerationQualifier` 

X.509 証明書は、これらの属性に 1 つ以上の値を含むオプションを提供します。デフォルトでは、複数値の各属性用のポリシー変数は最初の値を返します。例えば、`Certificate.Subject.Country` 属性には国名のリストが含まれる場合がありますが、ポリシーで評価されると、`iot:Certificate.Subject.Country` は最初の国名に置き換えられます。

1 から始めるインデックスを使用して、最初の値以外の特定の属性値をリクエストできます。例えば、`iot:Certificate.Subject.Country.1` は、`Certificate.Subject.Country` 属性の 2 番目の国名に置き換えられます。存在していないインデックス値を指定する場合、(例えば、属性に割り当てられた値が 2 つのみのとき 3 番目の値を要求すると) 置き換えはされず、認可は失敗します。ポリシーの変数名で、`.List` サフィックスを使用して、属性の値をすべて指定できます。

## 発行元の代替名属性
<a name="issuer-alternate-name-attributes"></a>

次の AWS IoT Core ポリシー変数は、証明書発行者が設定した発行者の代替名属性に基づいて、アクセス許可の付与または拒否をサポートします。
+ `iot:Certificate.Issuer.AlternativeName.RFC822Name`
+ `iot:Certificate.Issuer.AlternativeName.DNSName`
+ `iot:Certificate.Issuer.AlternativeName.DirectoryName`
+ `iot:Certificate.Issuer.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Issuer.AlternativeName.IPAddress`

## 件名の代替名属性
<a name="subject-alternate-name-attributes"></a>

次の AWS IoT Core ポリシー変数は、証明書発行者が設定したサブジェクト代替名属性に基づいて、アクセス許可の付与または拒否をサポートします。
+ `iot:Certificate.Subject.AlternativeName.RFC822Name`
+ `iot:Certificate.Subject.AlternativeName.DNSName`
+ `iot:Certificate.Subject.AlternativeName.DirectoryName`
+ `iot:Certificate.Subject.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Subject.AlternativeName.IPAddress`

## その他の属性
<a name="other-attributes"></a>

を使用して`iot:Certificate.SerialNumber`、証明書のシリアル番号に基づいて、 AWS IoT Core リソースへのアクセスを許可または拒否できます。`iot:Certificate.AvailableKeys` ポリシー変数には、値を含むすべての証明書のポリシー変数の名前が含まれます。

# X.509 証明書のポリシー変数の使用
<a name="use-policy-variables"></a>

このトピックでは、証明書のポリシー変数の使用方法について詳しく説明します。X.509 証明書のポリシー変数は、X.509 証明書の属性に基づいてアクセス許可を付与する AWS IoT Core ポリシーを作成するときに必須です。X.509 証明書に特定の証明書属性が含まれていないものの、対応する証明書ポリシー変数がポリシードキュメントで使用されている場合、ポリシー評価によって予期しない動作が発生する可能性があります。これは、欠落しているポリシー変数がポリシーステートメントで評価されないためです。

**Topics**
+ [X.509 証明書の例](#certificate-example)
+ [証明書のポリシー変数としての証明書発行者の属性の使用](#issuer-attributes-policy)
+ [証明書のポリシー変数としての証明書のサブジェクト属性の使用](#subject-attributes-policy)
+ [証明書ポリシー変数として証明書発行者の代替名属性を使用](#issuer-alternate-name-attributes-policy)
+ [証明書ポリシー変数として証明書サブジェクトの代替名属性を使用](#subject-alternate-name-attributes-policy)
+ [証明書ポリシー変数として他の証明書属性を使用](#other-attributes-policy)
+ [X.509 証明書のポリシー変数の制限](#policy-limits)
+ [証明書ポリシー変数を使用したポリシーの例](#example-attributes-policy)

## X.509 証明書の例
<a name="certificate-example"></a>

一般的な X.509 証明書は次のように表示されます。この証明書の例には、証明書の属性が含まれています。 AWS IoT Core ポリシーの評価中、`Serial Number`、`Issuer`、`Subject`、`X509v3 Issuer Alternative Name`、および `X509v3 Subject Alternative Name` の証明書の属性が証明書ポリシー変数として入力されます。

```
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            92:12:85:cb:b7:a5:e0:86
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=IoT Devices, OU=SmartHome, ST=WA, CN=IoT Devices Primary CA, 
				GN=Primary CA1/initials=XY/dnQualifier=Example corp,
				SN=SmartHome/ title=CA1/pseudonym=Primary_CA/generationQualifier=2/serialNumber=987		
        Validity
            Not Before: Mar 26 03:25:40 2024 GMT
            Not After : Apr 28 03:25:40 2025 GMT
        Subject: C=US, O=IoT Devices, OU=LightBulb, ST=NY, CN=LightBulb Device Cert, 
				GN=Bulb/initials=ZZ/dnQualifier=Bulb001, 
				SN=Multi Color/title=RGB/pseudonym=RGB Device/generationQualifier=4/serialNumber=123
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    << REDACTED >>
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name: 
                DNS:example.com, IP Address:1.2.3.4, URI:ResourceIdentifier001, email:device1@example.com, DirName:/C=US/O=IoT/OU=SmartHome/CN=LightBulbCert
            X509v3 Issuer Alternative Name: 
                DNS:issuer.com, IP Address:5.6.7.8, URI:PrimarySignerCA, email:primary@issuer.com, DirName:/C=US/O=Issuer/OU=IoT Devices/CN=Primary Issuer CA
    Signature Algorithm: sha256WithRSAEncryption
         << REDACTED >>
```

## 証明書のポリシー変数としての証明書発行者の属性の使用
<a name="issuer-attributes-policy"></a>

次の表は、証明書発行者の属性を AWS IoT Core ポリシーに入力する方法の詳細を示しています。


**ポリシーに入力する発行者の属性**  

| 証明書発行者の属性 | 証明書のポリシー変数 | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  | 

## 証明書のポリシー変数としての証明書のサブジェクト属性の使用
<a name="subject-attributes-policy"></a>

次の表は、証明書のサブジェクト属性を AWS IoT Core ポリシーに入力する方法の詳細を示しています。


**ポリシーに入力されるサブジェクト属性**  

| 証明書のサブジェクト属性 | 証明書のポリシー変数 | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  | 

## 証明書ポリシー変数として証明書発行者の代替名属性を使用
<a name="issuer-alternate-name-attributes-policy"></a>

次の表は、証明書発行者の代替名属性が AWS IoT Core ポリシーに入力される方法の詳細を示しています。


**ポリシーに入力する発行者の代替名属性**  

| X509v3 発行者の代替名 | ポリシー内の属性 | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  | 

## 証明書ポリシー変数として証明書サブジェクトの代替名属性を使用
<a name="subject-alternate-name-attributes-policy"></a>

次の表は、証明書サブジェクトの代替名属性が AWS IoT Core ポリシーに入力される方法の詳細を示しています。


**ポリシーに入力されるサブジェクトの代替名属性**  

| X509v3 サブジェクトの代替名 | ポリシー内の属性 | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  | 

## 証明書ポリシー変数として他の証明書属性を使用
<a name="other-attributes-policy"></a>

次の表は、他の証明書属性が AWS IoT Core ポリシーに入力される方法の詳細を示しています。


**ポリシーに入力されるその他の属性**  

| その他の証明書属性 | 証明書のポリシー変数 | 
| --- | --- | 
|  `Serial Number: 92:12:85:cb:b7:a5:e0:86`  |  `iot:Certificate.SerialNumber = 10525622389124227206`  | 

## X.509 証明書のポリシー変数の制限
<a name="policy-limits"></a>

次の制限は、X.509 証明書のポリシー変数に適用されます。

欠落しているポリシー変数  
X.509 証明書に特定の証明書属性が含まれていないものの、対応する証明書ポリシー変数がポリシードキュメントで使用されている場合、ポリシー評価によって予期しない動作が発生する可能性があります。これは、欠落しているポリシー変数がポリシーステートメントで評価されないためです。

証明書の SerialNumber 形式  
AWS IoT Core は、証明書のシリアル番号を 10 進数の整数の文字列表現として扱います。例えば、ポリシーで証明書のシリアル番号に一致するクライアント ID のみの接続が許可されている場合、クライアント ID は 10 進数のシリアル番号である必要があります。

ワイルドカード  
ワイルドカード文字が証明書の属性にある場合は、ポリシー変数は証明書属性値に置き換えられません。そのため、ポリシードキュメントに `${policy-variable}` テキストが残ります。これにより、承認が失敗する場合があります。ワイルドカード文字として、`*`、`$`、`+`、`?`、`#` を使用できます。

配列フィールド  
配列を含む証明書の属性は、5 つの項目に制限されます。追加項目は無視されます。

文字列の長さ  
すべての文字列値は 1024 文字に制限されています。証明書の属性に、1024 文字以上の文字列が含まれている場合、ポリシー変数は証明書の属性値に置き換えられません。そのため、ポリシードキュメントに `${policy-variable}` が残ります。これにより、承認が失敗する場合があります。

特殊文字  
`,`、`"`、`\`、`+`、`=`、`<`、`>`、`;` などの特殊文字をポリシー変数で使用する場合は、先頭にバックスラッシュ (`\`) を付ける必要があります。例えば、`Amazon Web Services O=Amazon.com Inc. L=Seattle ST=Washington C=US` は `Amazon Web Service O\=Amazon.com Inc. L\=Seattle ST\=Washington C\=US` になります。

## 証明書ポリシー変数を使用したポリシーの例
<a name="example-attributes-policy"></a>

次のポリシードキュメントでは、証明書のシリアル番号に一致するクライアント ID を使用して接続し、`${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*` のパターンに一致するトピックに発行できます。

**重要**  
X.509 証明書に特定の証明書属性が含まれていないものの、対応する証明書ポリシー変数がポリシードキュメントで使用されている場合、ポリシー評価によって予期しない動作が発生する可能性があります。これは、欠落しているポリシー変数がポリシーステートメントで評価されないためです。例えば、`iot:Certificate.Subject.Organization` 属性を含まない証明書に次のポリシードキュメントをアタッチした場合、ポリシー評価中に `iot:Certificate.Subject.Organization` 証明書ポリシー変数は入力されません。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Certificate.SerialNumber}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*"
			]
		}
	]
}
```

[Null 条件演算子](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)を使用して、ポリシーの評価中にポリシーで使用される証明書ポリシー変数が入力されるようにすることもできます。次のポリシードキュメントでは、証明書のシリアル番号と証明書のサブジェクトの共通名属性が存在する場合にのみ、証明書で `iot:Connect` を許可します。

すべての証明書ポリシー変数には文字列値があるため、すべての[文字列条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)がサポートされます。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/*"
			],
			"Condition": {
				"Null": {
					"iot:Certificate.SerialNumber": "false",
					"iot:Certificate.Subject.CommonName": "false"
				}
			}
		}
	]
}
```