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

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

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

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

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

참고

지원되는 대상의 경우 Amazon 를 제외하고 규칙 작업이 해당 리소스와 상호 작용할 수 있도록 다른 서비스의 리소스와 AWS 리전 동일한 에서 규칙을 정의SQS해야 합니다. 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 IoT 규칙 AWS 리전 과 같을 필요는 없습니다. 규칙 작업에 대한 자세한 내용은 섹션을 SQS 참조하세요SQS.

계정 A 태스크 수행
참고

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

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

  2. AWS IoT 규칙 엔진을 신뢰하고 계정 B의 Amazon SQS 대기열에 대한 액세스를 허용하는 정책을 연결하는 IAM 역할을 생성합니다. 필요한 액세스 권한 부여의 명령 및 정책 문서 예제 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 문은 메시지를 필터링하고 역할은 Amazon SQS 대기열에 메시지를 추가할 수 있는 권한을 ARN 부여합니다 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을 참조하세요.

계정 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 태스크 수행
참고

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

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

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

  3. 주제에 연결된 규칙을 생성하려면 create-topic-rule 명령을 실행합니다.

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

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

    { "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을 참조하세요.

계정 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:::amzn-s3-demo-bucket
계정 A 태스크 수행
참고

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

  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 문은 메시지를 필터링하고 역할은 Amazon S3 버킷에 메시지를 추가할 수 있는 AWS IoT 권한을 ARN 부여합니다.

    { "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를 참조하세요.

계정 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:::amzn-s3-demo-bucket/*" } ] }

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

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

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://./amzn-s3-demo-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 태스크 수행
참고

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

  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 문은 메시지를 필터링하고 역할은 데이터를 Lambda 함수로 전달할 수 있는 AWS IoT 권한을 ARN 부여합니다.

    { "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 IoT 규칙에서 AWS Lambda 작업을 정의하는 방법에 대한 자세한 내용은 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

    이 필드는 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 함수 콘솔에서 "규칙을 찾을 수 없습니다"라는 오류 메시지가 표시되면 오류 메시지를 무시하고 연결 테스트를 진행하세요.