

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

# サービス間での不分別な代理処理の防止
<a name="cross-service-confused-deputy-prevention"></a>

*「混乱した代理」問題*は、アクションを実行するためのアクセス許可を持たないエンティティが、より特権のあるエンティティにアクションの実行を強制できてしまう場合に生じる、セキュリティ上の問題です。では AWS、サービス間のなりすましにより、混乱した代理問題が発生する可能性があります。サービス間でのなりすましは、あるサービス (*呼び出し元サービス*) が、別のサービス (*呼び出し対象サービス*) を呼び出すときに発生する可能性があります。呼び出し元サービスが操作され、それ自身のアクセス許可を使用して、本来アクセス許可が付与されるべきではない方法で別の顧客のリソースに対して働きかけることがあります。これを防ぐため、 AWS では、アカウント内のリソースへのアクセス許可が付与されたサービスプリンシパルですべてのサービスのデータを保護するために役立つツールを提供しています。

が別のサービス AWS IoT に付与するアクセス許可をリソースに制限するには、リソースポリシーで [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) グローバル条件コンテキストキーを使用することをお勧めします。両方のグローバル条件コンテキストキーを同じポリシーステートメントで使用する場合は、`aws:SourceAccount` 値と、`aws:SourceArn` 値に含まれるアカウントが、同じアカウント ID を示している必要があります。

「混乱した代理」問題から保護するための最も効果的な方法は、リソースの完全なAmazon リソースネーム (ARN)を指定しながら、グローバル条件コンテキストキー `aws:SourceArn` を使用することです。の場合 AWS IoT、 `aws:SourceArn`はリソース固有のアクセス許可`arn:{{aws}}:iot:{{region}}:{{account-id}}:{{resource-type/resource-id}}`の場合は または の形式に従う必要があります`arn:{{aws}}:iot:{{region}}:{{account-id}}:{{*}}`。resource-id は、許可されたリソースの名前または ID、または許可されたリソース ID のワイルドカードステートメントにすることができます。{{リージョン}}がお客様の AWS IoT リージョンと一致し、{{account-id}} がお客様のアカウント ID と一致していることを確認します。

次の例は、 AWS IoT ロール信頼ポリシーで `aws:SourceArn`および `aws:SourceAccount` グローバル条件コンテキストキーを使用して、混乱した代理問題を防ぐ方法を示しています。その他の例については、「[混乱した代理の防止の詳細な例](#cross-service-confused-deputy-prevention-examples)」を参照してください。

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"{{123456789012}}"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:{{aws}}:iot:{{us-east-1}}:{{123456789012}}:{{*}}"
        }
         }
      }
   ]
}
```

**注記**  
アクセス拒否エラーが発生した場合は、 AWS Security Token Service (STS) とのサービス統合が `aws:SourceArn` および `aws:SourceAccount` コンテキストキーをサポートしていない可能性があります。

## 混乱した代理の防止の詳細な例
<a name="cross-service-confused-deputy-prevention-examples"></a>

**このセクションでは、 AWS IoT ロール信頼ポリシーで `aws:SourceArn`および `aws:SourceAccount` グローバル条件コンテキストキーを使用して、混乱した代理問題を防ぐ方法の詳細な例を示します。**
+ [フリートプロビジョニング](#cross-service-confused-deputy-prevention-fleet-provision)
+ [JITP](#cross-service-confused-deputy-prevention-JITP)
+ [認証情報プロバイダー](#cross-service-confused-deputy-prevention-credential-provider)

### フリートプロビジョニング
<a name="cross-service-confused-deputy-prevention-fleet-provision"></a>

プロビジョニングテンプレートリソースを使用して[フリートプロビジョニング](https://docs.aws.amazon.com/iot/latest/developerguide/iot-provision.html)を設定できます。プロビジョニングテンプレートがプロビジョニングロールを参照する場合、そのロールの信頼ポリシーに `aws:SourceArn`および `aws:SourceAccount` 条件キーを含めることができます。これらのキーは、設定が `sts:AssumeRole` リクエストを呼び出すことができるリソースを制限します。

次の信頼ポリシーを持つロールは、`SourceArn` で指定されたプロビジョニングテンプレートの IoT プリンシパル (`iot.amazonaws.com`) によってのみ引き受けることができます。

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"{{123456789012}}"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:{{aws}}:iot:{{us-east-1}}:{{123456789012}}:provisioningtemplate/{{example_template}}"
        }
         }
      }
   ]
}
```

### JITP
<a name="cross-service-confused-deputy-prevention-JITP"></a>

[ジャストインタイムプロビジョニング (JITP)](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html) では、プロビジョニングテンプレートを CA とは別のリソースとして使用することも、テンプレート本文とロールを CA 証明書設定の一部として定義することもできます。 AWS IoT ロール信頼ポリシー`aws:SourceArn`の の値は、プロビジョニングテンプレートの定義方法によって異なります。

#### プロビジョニングテンプレートを別のリソースとして定義する
<a name="cross-service-confused-deputy-prevention-JITP-template"></a>

プロビジョニングテンプレートを別のリソースとして定義した場合、`aws:SourceArn` の値は `"arn:aws:iot:{{region}}:{{account-id}}:provisioningtemplate/{{example_template}}"` になります。[フリートプロビジョニング](#cross-service-confused-deputy-prevention-fleet-provision) では同じポリシーの例を利用できます。

#### CA 証明書でのプロビジョニングテンプレートの定義
<a name="cross-service-confused-deputy-prevention-JITP-CA"></a>

CA 証明書リソース内でプロビジョニングテンプレートを定義した場合、`aws:SourceArn` の値は `"arn:aws:iot:{{region}}:{{account-id}}:cacert/{{cert_id}}"` または `"arn:aws:iot:{{region}}:{{account-id}}:cacert/{{*}}"` になります。CA 証明書の ID などのリソース識別子が作成時に不明な場合は、ワイルドカードを使用できます。

次の信頼ポリシーを持つロールは、`SourceArn` で指定された CA 証明書の IoT プリンシパル (`iot.amazonaws.com`) によってのみ引き受けることができます。

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"{{123456789012}}"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:{{aws}}:iot:{{us-east-1}}:{{123456789012}}:cacert/{{8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e}}"
        }
         }
      }
   ]
}
```

CA 証明書を作成するときは、登録設定でプロビジョニングロールを参照できます。プロビジョニングロールの信頼ポリシーは、ロールを引き受けることができるリソースを制限するために `aws:SourceArn` を使用できます。ただし、CA 証明書を登録するための最初の [RegisterCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) 呼び出し中に、`aws:SourceArn` 条件に指定する CA 証明書の ARN はありません。

これを回避するには、つまり、 に登録されている特定の CA 証明書にプロビジョニングロールの信頼ポリシーを指定するには AWS IoT Core、以下を実行します。
+ まず、`RegistrationConfig` パラメータを指定せずに [RegisterCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) を呼び出します。
+ CA 証明書が に登録されたら AWS IoT Core、その証明書で [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) を呼び出します。

  UpdateCACertificate 呼び出しで、新しく登録された CA 証明書の ARN に `aws:SourceArn` が設定されたプロビジョニングロール信頼ポリシーを含む `RegistrationConfig` を指定します。

### 認証情報プロバイダー
<a name="cross-service-confused-deputy-prevention-credential-provider"></a>

[AWS IoT Core 認証情報プロバイダー](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html)の場合、 でロールエイリアスを作成する AWS アカウント のと同じ を使用し`aws:SourceAccount`、 でロールエイリアスリソースタイプのリソース ARN に一致するステートメントを指定します`aws:SourceArn`。 AWS IoT Core 認証情報プロバイダーで使用する IAM ロールを作成するときは、ロールを引き受ける必要があるロールエイリアスの ARNs を `aws:SourceArn`条件に含めて、クロスサービス`sts:AssumeRole`リクエストを承認する必要があります。

次の信頼ポリシーを持つロールは、 `SourceArn`で指定された roleAlias の AWS IoT Core 認証情報プロバイダー (`credentials.iot.amazonaws.com`) のプリンシパルのみが引き受けることができます。プリンシパルが `aws:SourceArn` 条件に指定されている以外のロールエイリアスの認証情報を取得しようとすると、その他のロールエイリアスが同じ IAM ロールを参照している場合でも、リクエストは拒否されます。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "credentials.iot.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{123456789012}}"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:{{aws}}:iot:{{us-east-1}}:{{123456789012}}:rolealias/{{example_rolealias}}"
        }
      }
    }
  ]
}
```