

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

# 교차 서비스 혼동된 대리인 방지
<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는 `arn:aws:iot:region:account-id:resource-type/resource-id` 리소스별 권한 또는의 형식을 준수해야 `aws:SourceArn` 합니다`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 보안 토큰 서비스(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:SourceArn` AWS IoT 역할 신뢰 정책의 값은 프로비저닝 템플릿을 정의하는 방법에 따라 달라집니다.

#### 프로비저닝 템플릿을 별도의 리소스로 정의
<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) 직접 호출 중에는 CA 인증서의 ARN이 `aws:SourceArn` 조건에 지정되지 않습니다.

이를 해결하려면, 즉에 등록된 특정 CA 인증서에 프로비저닝 역할 신뢰 정책을 지정하려면 다음을 수행할 AWS IoT Core수 있습니다.
+ 먼저 `RegistrationConfig` 파라미터를 제공하지 않고 [RegisterCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html)를 직접적으로 호출합니다.
+ CA 인증서가에 등록된 후 CA 인증서에서 [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html)를 AWS IoT Core호출합니다.

  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"
        }
      }
    }
  ]
}
```