

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Otorisasi dengan identitas Amazon Cognito
<a name="cog-iot-policies"></a>

Ada dua jenis identitas Amazon Cognito: tidak diautentikasi dan diautentikasi. Jika aplikasi Anda mendukung identitas Amazon Cognito yang tidak diautentikasi, tidak ada autentikasi yang dilakukan, sehingga Anda tidak tahu siapa pengguna tersebut. 

Identitas **Tidak Diautentikasi: Untuk identitas** Amazon Cognito yang tidak diautentikasi, Anda memberikan izin dengan melampirkan peran IAM ke kumpulan identitas yang tidak diautentikasi. Kami menyarankan Anda hanya memberikan akses ke sumber daya yang Anda inginkan tersedia untuk pengguna yang tidak dikenal.

**penting**  
Untuk pengguna Amazon Cognito yang tidak diautentikasi yang terhubung AWS IoT Core, kami menyarankan Anda memberikan akses ke sumber daya yang sangat terbatas dalam kebijakan IAM.

**Identitas Terautentikasi:** Untuk identitas Amazon Cognito yang diautentikasi, Anda perlu menentukan izin di dua tempat: 
+ Lampirkan kebijakan IAM ke kumpulan Identitas Amazon Cognito yang diautentikasi dan
+ Lampirkan AWS IoT Core kebijakan ke Identitas Amazon Cognito (pengguna yang diautentikasi).

## Contoh kebijakan untuk pengguna Amazon Cognito yang tidak diautentikasi dan diautentikasi yang terhubung ke AWS IoT Core
<a name="cog-iot-policies-auth-unauth-examples"></a>

Contoh berikut menunjukkan izin dalam kebijakan IAM dan kebijakan IoT dari identitas Amazon Cognito. Pengguna yang diautentikasi ingin mempublikasikan ke topik khusus perangkat (mis.device/DEVICE\$1ID/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"
            ]
        }
    ]
}
```

Contoh berikut menunjukkan izin dalam kebijakan IAM dari peran Amazon Cognito yang tidak diautentikasi. Pengguna yang tidak diautentikasi ingin mempublikasikan ke topik khusus non-perangkat yang tidak memerlukan otentikasi.

****  

```
{
    "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 contoh
<a name="cog-iot-policies-github"></a>

Contoh aplikasi web berikut GitHub menunjukkan cara menggabungkan lampiran kebijakan ke pengguna yang diautentikasi ke dalam proses pendaftaran dan otentikasi pengguna.
+ [MQTT publish/subscribe React menggunakan aplikasi web dan AWS AmplifyAWS IoT Device SDK for JavaScript](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp)
+ [Aplikasi web MQTT publish/subscribe React menggunakan AWS Amplify, fungsi AWS IoT Device SDK for JavaScript, dan Lambda](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda)

Amplify adalah seperangkat alat dan layanan yang membantu Anda membangun aplikasi web dan seluler yang terintegrasi dengan AWS layanan. Untuk informasi selengkapnya tentang Amplify, lihat Amplify Framework [Documentation](https://docs.amplify.aws/),.

Kedua contoh melakukan langkah-langkah berikut.

1. Saat pengguna mendaftar untuk akun, aplikasi akan membuat kumpulan pengguna dan identitas Amazon Cognito.

1. Ketika pengguna mengautentikasi, aplikasi membuat dan melampirkan kebijakan ke identitas. Ini memberi pengguna izin mempublikasikan dan berlangganan.

1. Pengguna dapat menggunakan aplikasi untuk mempublikasikan dan berlangganan topik MQTT.

Contoh pertama menggunakan operasi `AttachPolicy` API langsung di dalam operasi otentikasi. Contoh berikut menunjukkan bagaimana menerapkan panggilan API ini di dalam aplikasi web React yang menggunakan Amplify dan. AWS IoT Device SDK for JavaScript

```
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);
         }
     });
}
```

Kode ini muncul di [AuthDisplayfile.js](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp/blob/d1c307b36357be934db9dda020140fa337709cd9/src/AuthDisplay.js#L45).

Contoh kedua mengimplementasikan operasi `AttachPolicy` API dalam fungsi Lambda. Contoh berikut menunjukkan bagaimana Lambda menggunakan panggilan API ini.

```
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});
     }
 });
```

Kode ini muncul di dalam `iot.GetPolicy` fungsi dalam file [app.js](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda/blob/e493039581d2aff0faa3949086deead20a2c5385/amplify/backend/function/amplifyiotlambda/src/app.js#L50).

**catatan**  
Saat Anda memanggil fungsi dengan AWS kredensyal yang Anda peroleh melalui kumpulan Identitas Amazon Cognito, objek konteks dalam fungsi Lambda Anda berisi nilai untuk. `context.cognito_identity_id` Untuk informasi selengkapnya, lihat hal berikut.   
[AWS Lambda objek konteks di Node.js](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html)
[AWS Lambda objek konteks dengan Python](https://docs.aws.amazon.com/lambda/latest/dg/python-context.html)
[AWS Lambda objek konteks di Ruby](https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html)
[AWS Lambda objek konteks di Jawa](https://docs.aws.amazon.com/lambda/latest/dg/java-context.html)
[AWS Lambda objek konteks di Go](https://docs.aws.amazon.com/lambda/latest/dg/golang-context.html)
[AWS Lambda objek konteks dalam C \$1](https://docs.aws.amazon.com/lambda/latest/dg/csharp-context.html)
[AWS Lambda objek konteks di PowerShell](https://docs.aws.amazon.com/lambda/latest/dg/powershell-context.html)