Amazon Cognito 자격 증명으로 권한 부여 - AWS IoT Core

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

Amazon Cognito 자격 증명으로 권한 부여

Amazon Cognito 자격 증명에는 인증된 자격 증명과 인증되지 않은 자격 증명이라는 두 가지 유형이 있습니다. 앱이 인증되지 않은 Amazon Cognito 자격 증명을 지원하는 경우 인증이 수행되지 않으므로 사용자가 누구인지 알 수 없습니다.

인증되지 않은 자격 증명: 인증되지 않은 Amazon Cognito 자격 증명의 경우 인증되지 않은 자격 증명 풀에 IAM 역할을 연결하여 권한을 부여합니다. 알 수 없는 사용자가 사용할 수 있도록 하려는 리소스에 대해서만 액세스 권한을 부여하는 것이 좋습니다.

중요

에 연결하는 인증되지 않은 Amazon Cognito 사용자의 경우 AWS IoT Core IAM 정책에서 매우 제한된 리소스에 대한 액세스 권한을 부여하는 것이 좋습니다.

인증된 자격 증명: 인증된 Amazon Cognito 자격 증명의 경우 다음 두 곳에서 권한을 지정해야 합니다.

  • 인증된 Amazon Cognito 자격 증명 풀에 IAM 정책을 연결합니다.

  • Amazon Cognito 자격 증명 (인증된 사용자) 에 AWS IoT Core 정책을 연결합니다.

AWS IoT Core에 연결하는 인증되지 않은 Amazon Cognito 사용자에 대한 정책 예시

다음 예제는 Amazon Cognito 자격 증명의 IAM 정책과 IoT 정책에 있는 권한을 보여줍니다. 인증된 사용자가 디바이스별 주제(예: device/DEVICE_ID/status)에 게시하려고 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/Client_ID" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/device/Device_ID/status" ] } ] }

다음 예제는 인증되지 않은 Amazon Cognito 역할의 IAM 정책에 있는 권한을 보여줍니다. 인증되지 않은 사용자가 인증이 필요 없는 디바이스별 주제 이외의 주제에 게시하려고 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/*" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/non_device_specific_topic" ] } ] }

GitHub 예시

의 다음 예제 웹 애플리케이션은 인증된 사용자에 대한 정책 첨부를 사용자 등록 및 인증 프로세스에 통합하는 방법을 GitHub 보여줍니다.

Amplify는 서비스와 통합되는 웹 및 모바일 애플리케이션을 구축하는 데 도움이 되는 도구 및 서비스 세트입니다. AWS Amplify에 대한 자세한 내용은 Amplify 프레임워크 설명서를 참조하세요.

두 예 모두 다음 단계를 수행합니다.

  1. 사용자가 계정에 가입하면 애플리케이션에서 Amazon Cognito 사용자 풀과 자격 증명을 생성합니다.

  2. 사용자가 인증하면 애플리케이션이 정책을 생성하여 자격 증명에 연결합니다. 이렇게 하면 사용자에게 게시 및 구독 권한이 부여됩니다.

  3. 사용자는 애플리케이션을 사용하여 MQTT 주제를 게시하고 구독할 수 있습니다.

첫 번째 예는 인증 작업 내에서 직접 AttachPolicy API 작업을 사용합니다. 다음 예에서는 Amplify와 AWS IoT Device SDK for JavaScript를 사용하는 React 웹 애플리케이션 내에서 이 API 호출을 구현하는 방법을 보여줍니다.

function attachPolicy(id, policyName) { var Iot = new AWS.Iot({region: AWSConfiguration.region, apiVersion: AWSConfiguration.apiVersion, endpoint: AWSConfiguration.endpoint}); var params = {policyName: policyName, target: id}; console.log("Attach IoT Policy: " + policyName + " with cognito identity id: " + id); Iot.attachPolicy(params, function(err, data) { if (err) { if (err.code !== 'ResourceAlreadyExistsException') { console.log(err); } } else { console.log("Successfully attached policy with the identity", data); } }); }

AuthDisplay코드는.js 파일에 표시됩니다.

두 번째 예는 Lambda 함수에서 AttachPolicy API 작업을 구현합니다. 다음 예에서는 Lambda가 이 API 호출을 사용하는 방법을 보여줍니다.

iot.attachPolicy(params, function(err, data) { if (err) { if (err.code !== 'ResourceAlreadyExistsException') { console.log(err); res.json({error: err, url: req.url, body: req.body}); } } else { console.log(data); res.json({success: 'Create and attach policy call succeed!', url: req.url, body: req.body}); } });

이 코드는 app.js 파일의 iot.GetPolicy 함수 안에 나타납니다.

참고

Amazon Cognito AWS 자격 증명 풀을 통해 획득한 자격 증명으로 함수를 호출하면 Lambda 함수의 컨텍스트 객체에 에 대한 값이 포함됩니다. context.cognito_identity_id 자세한 내용은 다음을 참조하세요.