

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

# AWS IoT 규칙을 사용하여 교차 계정 리소스에 액세스
<a name="accessing-cross-account-resources-using-rules"></a>

한 계정의 MQTT 주제에 수집된 데이터를 다른 계정의 Amazon SQS 및 Lambda와 같은 AWS 서비스로 라우팅할 수 있도록 교차 계정 액세스 AWS IoT 규칙을 구성할 수 있습니다. 다음은 한 계정의 MQTT 주제에서 다른 계정의 대상으로 교차 계정 데이터 수집 AWS IoT 규칙을 설정하는 방법을 설명합니다.

대상 리소스에 대한 [리소스 기반 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#TypesPermissions)을 사용하여 교차 계정 규칙을 구성할 수 있습니다. 따라서 AWS IoT 규칙을 사용하여 교차 계정 액세스에는 리소스 기반 권한을 지원하는 대상만 활성화할 수 있습니다. 지원되는 대상에는 Amazon SQS, Amazon SNS, Amazon S3 및 AWS Lambda가 있습니다.

**참고**  
Amazon SQS를 제외한 지원되는 대상의 경우 규칙 작업이 해당 리소스와 상호 작용할 수 있도록 다른 서비스의 리소스 AWS 리전 와 동일한에서 규칙을 정의해야 합니다. AWS IoT 규칙 작업에 대한 자세한 내용은 [AWS IoT 규칙 작업을](iot-rule-actions.md) 참조하세요. 규칙의 SQS 작업에 대한 자세한 내용은 [SQS](sqs-rule-action.md) 섹션을 참조하세요.

## 사전 조건
<a name="cross-account-prerequisites"></a>
+ [AWS IoT 규칙](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) 숙지
+ IAM [사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_identity-management.html), [역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) 및 [리소스 기반 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_permissions.html#TypesPermissions)에 대한 이해
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)가 설치되어 있음

## Amazon SQS에 대한 교차 계정 설정
<a name="cross-account-sqs"></a>

시나리오: 계정 A는 MQTT 메시지의 데이터를 계정 B의 Amazon SQS 대기열에 전송합니다.


| AWS 계정 | 계정 이름  | 설명 | 
| --- | --- | --- | 
| {{1111-1111-1111}} | 계정 A | 규칙 작업: sqs:SendMessage | 
| {{2222-2222-2222}} | 계정 B | Amazon SQS 대기열 [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/accessing-cross-account-resources-using-rules.html)  | 

**참고**  
대상 Amazon SQS 대기열이 [AWS IoT 규칙](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) AWS 리전 과 동일한에 있을 필요는 없습니다. 규칙의 SQS 작업에 대한 자세한 내용은 [SQS](sqs-rule-action.md) 섹션을 참조하세요.

**계정 A 태스크 수행**
**Note**  
다음 명령을 실행하려면 규칙의 Amazon 리소스 이름(ARN)을 리소스로 사용하는 `iot:CreateTopicRule`에 대한 권한과 리소스를 역할의 ARN으로 사용하는 `iam:PassRole` 작업에 대한 권한이 IAM 사용자에게 있어야 합니다.

1. 계정 A의 IAM 사용자를 사용하여 [AWS CLI를 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)합니다.

1.  AWS IoT 규칙 엔진을 신뢰하고 계정 B의 Amazon SQS 대기열에 대한 액세스를 허용하는 정책을 연결하는 IAM 역할을 생성합니다. [필요한 액세스 권한 부여의 명령 및 정책 문서 예제 AWS IoT 를 참조하세요](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html).

1. 주제에 연결된 규칙을 생성하려면 [create-topic-rule 명령](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)을 실행합니다.

   ```
   aws iot create-topic-rule --rule-name {{myRule}} --topic-rule-payload file://./{{my-rule.json}}
   ```

   다음은 `iot/test` 주제에 전송된 모든 메시지를 지정된 Amazon SQS 대기열에 삽입하는 규칙이 있는 페이로드 파일의 예입니다. SQL 문은 메시지를 필터링하고 역할 ARN은 Amazon SQS 대기열에 메시지를 추가할 수 있는 권한을 AWS IoT 에 부여합니다.

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"sqs": {
   				"queueUrl": "https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue",
   				"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role",
   				"useBase64": false
   			}
   		}
   	]
   }
   ```

    AWS IoT 규칙에서 Amazon SQS 작업을 정의하는 방법에 대한 자세한 내용은 [AWS IoT 규칙 작업 - Amazon SQS](https://docs.aws.amazon.com/iot/latest/developerguide/sqs-rule-action.html)를 참조하세요.

**계정 B 태스크 수행**

1. 계정 B의 IAM 사용자를 사용하여 [AWS CLI를 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)합니다.

1. Amazon SQS 대기열 리소스에 대한 권한을 계정 A에 부여하려면 [add-permission 명령](https://docs.aws.amazon.com/cli/latest/reference/sqs/add-permission.html)을 실행합니다.

   ```
   aws sqs add-permission --queue-url {{https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue}} --label {{SendMessagesToMyQueue}} --aws-account-ids {{1111-1111-1111}} --actions SendMessage
   ```

## Amazon SNS를 위한 교차 계정 설정
<a name="cross-account-sns"></a>

시나리오: 계정 A는 MQTT 메시지의 데이터를 계정 B의 Amazon SNS 주제에 전송합니다.


| AWS 계정 | 계정 이름  | 설명 | 
| --- | --- | --- | 
| {{1111-1111-1111}} | 계정 A | 규칙 작업: sns:Publish | 
| {{2222-2222-2222}} | 계정 B | Amazon SNS 주제 ARN: {{arn:aws:sns:region:2222-2222-2222:ExampleTopic}}  | 

**계정 A 태스크 수행**
**참고**  
 다음 명령을 실행하려면 규칙 ARN을 리소스로 사용하는 `iot:CreateTopicRule`에 대한 권한과 리소스를 역할 ARN으로 사용하는 `iam:PassRole` 작업에 대한 권한이 IAM 사용자에게 있어야 합니다.

1. 계정 A의 IAM 사용자를 사용하여 [AWS CLI를 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)합니다.

1.  AWS IoT 규칙 엔진을 신뢰하는 IAM 역할을 생성하고 계정 B의 Amazon SNS 주제에 대한 액세스를 허용하는 정책을 연결합니다. 예제 명령 및 정책 문서는 [필요한 액세스 권한 부여 AWS IoT 를 참조하세요](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html).

1. 주제에 연결된 규칙을 생성하려면 [create-topic-rule 명령](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)을 실행합니다.

   ```
   aws iot create-topic-rule --rule-name {{myRule}} --topic-rule-payload file://./{{my-rule.json}}
   ```

   다음은 `iot/test` 주제에 전송된 모든 메시지를 지정된 Amazon SNS 주제에 삽입하는 규칙이 있는 예제 페이로드 파일입니다. SQL 문은 메시지를 필터링하고 역할 ARN은 Amazon SNS 주제에 메시지를 전송할 수 있는 권한을 AWS IoT 에 부여합니다.

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"sns": {
   				"targetArn": "arn:aws:sns:region:2222-2222-2222:ExampleTopic",
   				"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role"
   			}
   		}
   	]
   }
   ```

    AWS IoT 규칙에서 Amazon SNS 작업을 정의하는 방법에 대한 자세한 내용은 [AWS IoT 규칙 작업 - Amazon SNS](https://docs.aws.amazon.com/iot/latest/developerguide/sns-rule-action.html)를 참조하세요.

**계정 B 태스크 수행**

1. 계정 B의 IAM 사용자를 사용하여 [AWS CLI를 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)합니다.

1. Amazon SNS 주제 리소스에 대한 권한을 계정 A에 부여하려면 [add-permission 명령](https://docs.aws.amazon.com/cli/latest/reference/sns/add-permission.html)을 실행합니다.

   ```
   aws sns add-permission --topic-arn {{arn:aws:sns:region:2222-2222-2222:ExampleTopic}} --label {{Publish-Permission}} --aws-account-id {{1111-1111-1111}} --action-name Publish
   ```

## Amazon S3를 위한 교차 계정 설정
<a name="cross-account-s3"></a>

시나리오: 계정 A는 MQTT 메시지의 데이터를 계정 B의 Amazon S3 버킷에 전송합니다.


| AWS 계정 | 계정 이름  | 설명 | 
| --- | --- | --- | 
| {{1111-1111-1111}} | 계정 A | 규칙 작업: s3:PutObject | 
| {{2222-2222-2222}} | 계정 B | Amazon S3 버킷 ARN: {{arn:aws:s3:::amzn-s3-demo-bucket}}  | 

**계정 A 태스크 수행**
**Note**  
다음 명령을 실행하려면 규칙 ARN을 리소스로 사용하는 `iot:CreateTopicRule`에 대한 권한과 리소스를 역할 ARN으로 사용하는 `iam:PassRole` 작업에 대한 권한이 IAM 사용자에게 있어야 합니다.

1. 계정 A의 IAM 사용자를 사용하여 [AWS CLI를 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)합니다.

1.  AWS IoT 규칙 엔진을 신뢰하고 계정 B의 Amazon S3 버킷에 대한 액세스를 허용하는 정책을 연결하는 IAM 역할을 생성합니다. 예제 명령 및 정책 문서는 [필요한 액세스 권한 부여 AWS IoT 를 참조하세요](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html).

1. 대상 S3에 연결된 규칙을 생성하려면 [create-topic-rule 명령](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)을 실행합니다.

   ```
   aws iot create-topic-rule --rule-name {{my-rule}} --topic-rule-payload file://./{{my-rule.json}}
   ```

   다음 예제는 `iot/test` 주제에 전송된 모든 메시지를 지정된 Amazon S3 버킷에 삽입하는 규칙을 포함한 페이로드 파일입니다. SQL 문은 메시지를 필터링하고 역할 ARN은 Amazon S3 버킷에 메시지를 추가할 수 있는 권한을 AWS IoT 에 부여합니다.

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"s3": {
   				"bucketName": "amzn-s3-demo-bucket",
   				"key": "${topic()}/${timestamp()}",
   				"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role"
   			}
   		}
   	]
   }
   ```

    AWS IoT 규칙에서 Amazon S3 작업을 정의하는 방법에 대한 자세한 내용은 [AWS IoT 규칙 작업 - Amazon S3](https://docs.aws.amazon.com/iot/latest/developerguide/s3-rule-action.html)를 참조하세요.

**계정 B 태스크 수행**

1. 계정 B의 IAM 사용자를 사용하여 [AWS CLI를 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)합니다.

1. 계정 A의 보안 주체를 신뢰하는 버킷 정책을 만듭니다.

   다음 예제는 다른 계정의 보안 주체를 신뢰하는 버킷 정책을 정의하는 페이로드 파일입니다.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AddCannedAcl",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::123456789012:root"
                   ]
           },
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
           }
       ]
   }
   ```

   자세한 정보는 [버킷 정책 예제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-1) 단원을 참조하세요.

1. 버킷 정책을 지정된 버킷에 연결하려면 [put-bucket-policy 명령](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-policy.html)을 실행합니다.

   ```
   aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://./{{amzn-s3-demo-bucket-policy.json}}
   ```

1. 교차 계정 액세스가 작동하도록 하려면 **모든 퍼블릭 액세스 차단(Block all public access)** 설정이 올바른지 확인하세요. 자세한 내용은 [Amazon S3 보안 모범 사례](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)를 참조하세요.

## 에 대한 교차 계정 설정 AWS Lambda
<a name="cross-account-lambda"></a>

시나리오: 계정 A는 계정 B의 AWS Lambda 함수를 호출하여 MQTT 메시지를 전달합니다.


| AWS 계정 | 계정 이름  | 설명 | 
| --- | --- | --- | 
| {{1111-1111-1111}} | 계정 A | 규칙 작업: lambda:InvokeFunction | 
| {{2222-2222-2222}} | 계정 B | Lambda 함수 ARN: {{ arn:aws:lambda:region:2222-2222-2222:function:example-function}}  | 

**계정 A 태스크 수행**
**참고**  
 다음 명령을 실행하려면 규칙 ARN을 리소스로 사용하는 `iot:CreateTopicRule`에 대한 권한과 리소스를 역할 ARN으로 사용하는 `iam:PassRole` 작업에 대한 권한이 IAM 사용자에게 있어야 합니다.

1. 계정 A의 IAM 사용자를 사용하여 [AWS CLI를 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)합니다.

1. [create-topic-rule 명령](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)을 실행하여 계정 B의 Lambda 함수에 대한 교차 계정 액세스를 정의하는 규칙을 생성합니다.

   ```
   aws iot create-topic-rule --rule-name {{my-rule}} --topic-rule-payload file://./{{my-rule.json}}
   ```

   다음 예제는 `iot/test` 주제에 전송된 모든 메시지를 지정된 Lambda 함수에 삽입하는 규칙을 포함한 페이로드 파일입니다. SQL 문은 메시지를 필터링하고 역할 ARN은 Lambda 함수에 데이터를 전달할 수 있는 권한을 AWS IoT 에 부여합니다.

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"lambda": {
   				"functionArn": "arn:aws:lambda:region:2222-2222-2222:function:example-function"
   			}
   		}
   	]
   }
   ```

   규칙에서 AWS Lambda 작업을 정의하는 방법에 대한 자세한 내용은 [AWS IoT 규칙 작업 - Lambda](https://docs.aws.amazon.com/iot/latest/developerguide/lambda-rule-action.html)를 AWS IoT 참조하십시오.

**계정 B 태스크 수행**

1. 계정 B의 IAM 사용자를 사용하여 [AWS CLI를 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)합니다.

1. [Lambda의 add-permission 명령을](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) 실행하여 Lambda 함수를 활성화할 수 있는 권한을 AWS IoT 규칙에 부여합니다. 다음 명령을 실행하려면 IAM 사용자에게 `lambda:AddPermission` 작업에 대한 권한이 있어야 합니다.

   ```
   aws lambda add-permission --function-name {{example-function}} --region {{us-east-1}} --principal iot.amazonaws.com --source-arn {{arn:aws:iot:region:1111-1111-1111:rule/example-rule}} --source-account {{1111-1111-1111}} --statement-id {{"unique_id"}} --action "lambda:InvokeFunction"
   ```

   **옵션:**

   **--principal**

    이 필드는 AWS IoT (로 표시됨`iot.amazonaws.com`)에 Lambda 함수를 호출할 수 있는 권한을 부여합니다.

   **--source-arn**

   이 필드는 AWS IoT 의 `arn:aws:iot:region:1111-1111-1111:rule/example-rule`만 이 Lambda 함수를 트리거하고 동일하거나 다른 계정의 다른 규칙이 이 Lambda 함수를 활성화할 수 없도록 확정합니다.

   **--source-account**

   이 필드는이 `1111-1111-1111` 계정을 대신하여이 Lambda 함수를 AWS IoT 활성화함을 확인합니다.
**참고**  
**구성** 아래의 AWS Lambda 함수 콘솔에서 "규칙을 찾을 수 없습니다"라는 오류 메시지가 표시되면 오류 메시지를 무시하고 연결 테스트를 진행하세요.