규칙을 사용하여 AWS IoT 교차 계정 리소스에 액세스 - AWS IoT Core

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

규칙을 사용하여 AWS IoT 교차 계정 리소스에 액세스

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

대상 리소스에 대한 리소스 기반 권한을 사용하여 교차 계정 규칙을 구성할 수 있습니다. 따라서 리소스 기반 권한을 지원하는 대상만 규칙을 통한 계정 간 액세스를 활성화할 수 있습니다. AWS IoT 지원되는 대상에는 Amazon SQS, Amazon SNS, Amazon S3 및 AWS Lambda가 있습니다.

참고

Amazon SQS를 제외한 지원되는 대상의 경우, 규칙 작업이 해당 리소스와 상호 작용할 수 있도록 다른 서비스의 리소스와 동일한 AWS 리전 위치에 규칙을 정의해야 합니다. 규칙 작업에 대한 자세한 내용은 AWS IoT 규칙 조치를 참조하십시오AWS IoT . 규칙의 SQS 작업에 대한 자세한 내용은 을 참조하십시오SQS.

사전 조건 

Amazon SQS에 대한 교차 계정 설정

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

AWS 계정 계정 이름 설명
1111-1111-1111 계정 A 규칙 작업: sqs:SendMessage
2222-2222-2222 계정 B Amazon SQS 대기열
  • ARN: arn:aws:sqs:region:2222-2222-2222:ExampleQueue

  • URL: https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue

참고

대상 Amazon SQS 대기열이 AWS 리전 규칙과 같을 필요는 없습니다.AWS IoT 규칙의 SQS 작업에 대한 자세한 내용은 을 참조하십시오. SQS

계정 A 태스크 수행
참고

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

  1. 계정 A의 IAM 사용자를 사용하여 AWS CLI를 구성합니다.

  2. AWS IoT 규칙 엔진을 신뢰하는 IAM 역할을 생성하고 계정 B의 Amazon SQS 대기열에 대한 액세스를 허용하는 정책을 연결합니다. 필요한 액세스 권한 AWS IoT 부여의 예제 명령 및 정책 문서를 참조하십시오.

  3. 주제에 첨부된 규칙을 만들려면 create-topic-rule 명령을 실행합니다.

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

    규칙에서 Amazon SQS 작업을 정의하는 방법에 대한 자세한 내용은 AWS IoT AWS IoT 규칙 작업 - Amazon SQS를 참조하십시오.

계정 B 태스크 수행
  1. 계정 B의 IAM 사용자를 사용하여 AWS CLI를 구성합니다.

  2. Amazon SQS 대기열 리소스에 대한 권한을 계정 A에 부여하려면 add-permission 명령을 실행합니다.

    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는 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를 구성합니다.

  2. AWS IoT 규칙 엔진을 신뢰하는 IAM 역할을 생성하고 계정 B의 Amazon SNS 주제에 대한 액세스를 허용하는 정책을 연결합니다. 명령 및 정책 문서의 예는 필요한 액세스 권한 AWS IoT 부여를 참조하십시오.

  3. 주제에 첨부된 규칙을 만들려면 create-topic-rule 명령을 실행합니다.

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

    규칙에서 Amazon SNS 작업을 정의하는 방법에 대한 자세한 내용은 AWS IoT AWS IoT 규칙 작업 - Amazon SNS를 참조하십시오.

계정 B 태스크 수행
  1. 계정 B의 IAM 사용자를 사용하여 AWS CLI를 구성합니다.

  2. Amazon SNS 주제 리소스에 대한 권한을 계정 A에 부여하려면 add-permission 명령을 실행합니다.

    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는 MQTT 메시지의 데이터를 계정 B의 Amazon S3 버킷에 전송합니다.

AWS 계정 계정 이름 설명
1111-1111-1111 계정 A 규칙 작업: s3:PutObject
2222-2222-2222 계정 B Amazon S3 버킷 ARN: arn:aws:s3:::ExampleBucket
계정 A 태스크 수행
참고

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

  1. 계정 A의 IAM 사용자를 사용하여 AWS CLI를 구성합니다.

  2. AWS IoT 규칙 엔진을 신뢰하고 계정 B의 Amazon S3 버킷에 대한 액세스를 허용하는 정책을 연결하는 IAM 역할을 생성합니다. 명령 및 정책 문서의 예는 필요한 액세스 권한 AWS IoT 부여를 참조하십시오.

  3. 대상 S3 버킷에 연결된 규칙을 생성하려면 create-topic-rule 명령을 실행합니다.

    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": "ExampleBucket", "key": "${topic()}/${timestamp()}", "roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role" } } ] }

    규칙에서 Amazon S3 작업을 정의하는 방법에 대한 자세한 내용은 AWS IoT AWS IoT 규칙 작업 - Amazon S3를 참조하십시오.

계정 B 태스크 수행
  1. 계정 B의 IAM 사용자를 사용하여 AWS CLI를 구성합니다.

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

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

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

    자세한 정보는 버킷 정책 예제 단원을 참조하세요.

  3. 지정된 버킷에 버킷 정책을 연결하려면 put-bucket-policy 명령을 실행합니다.

    aws s3api put-bucket-policy --bucket ExampleBucket --policy file://./my-bucket-policy.json
  4. 교차 계정 액세스가 작동하도록 하려면 모든 퍼블릭 액세스 차단(Block all public access) 설정이 올바른지 확인하세요. 자세한 내용은 Amazon S3 보안 모범 사례를 참조하세요.

교차 계정 설정: AWS Lambda

시나리오: 계정 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를 구성합니다.

  2. create-topic-rule 명령을 실행하여 계정 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 AWS IoT 규칙 작업 - Lambda를 참조하십시오.

계정 B 태스크 수행
  1. 계정 B의 IAM 사용자를 사용하여 AWS CLI를 구성합니다.

  2. Lambda의 추가 권한 명령을 실행하여 규칙에 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

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

    --source-arn

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

    --source-account

    이 필드는 계정을 대신해서만 이 Lambda 함수를 AWS IoT 활성화한다는 것을 확인합니다. 1111-1111-1111

    참고

    구성 아래의 AWS Lambda 함수 콘솔에서 "규칙을 찾을 수 없습니다"라는 오류 메시지가 표시되면 오류 메시지를 무시하고 연결 테스트를 진행하세요.