View a markdown version of this page

Mengotorisasi panggilan langsung ke AWS layanan menggunakan AWS IoT Core penyedia kredensi - AWS IoT Core

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

Mengotorisasi panggilan langsung ke AWS layanan menggunakan AWS IoT Core penyedia kredensi

Perangkat dapat menggunakan X.509 sertifikat untuk terhubung AWS IoT Core menggunakan protokol otentikasi bersama TLS. AWS Layanan lain tidak mendukung otentikasi berbasis sertifikat, tetapi mereka dapat dipanggil menggunakan AWS kredenSIAL dalam format Tanda T AWS angan Versi 4. Algoritma Signature Version 4 biasanya mengharuskan pemanggil untuk memiliki ID kunci akses dan kunci akses rahasia. AWS IoT Core memiliki penyedia kredenSIAL yang memungkinkan Anda menggunakan X.509 sertifikat bawaan sebagai identitas perangkat unik untuk mengotentikasi AWS permintaan. Ini menghilangkan kebutuhan untuk menyimpan ID kunci akses dan kunci akses rahasia di perangkat Anda.

Penyedia kredenSIAL mengotentikasi pemanggil menggunakan X.509 sertifikat dan mengeluarkan token keamanan sementara dengan hak istimewa terbatas. Token dapat digunakan untuk menandatangani dan mengotentikasi AWS permintaan apa pun. Cara mengotentikasi AWS permintaan ini mengharuskan Anda membuat dan mengonfigurasi peran AWS Identity and Access Management (IAM) dan melampirkan kebijakan IAM yang sesuai ke peran tersebut sehingga penyedia kredenSIAL dapat mengambil peran atas nama Anda. Untuk informasi lebih lanjut tentang AWS IoT Core dan IAM, lihatIdentitas dan manajemen akses untuk AWS IoT.

AWS IoT memerlukan perangkat untuk mengirim ekstensi Server Name Indication (SNI) ke protokol Transport Layer Security (TLS) dan memberikan alamat titik akhir lengkap di host_name lapangan. Bid host_name ang harus berisi titik akhir yang Anda panggil, dan itu harus:

  • Yang endpointAddress dikembalikan olehaws iot describe-endpoint --endpoint-type iot:CredentialProvider.

Koneksi yang dicoba oleh perangkat tanpa host_name nilai yang benar akan gagal.

Diagram berikut menggambarkan alur kerja penyedia kredenSIAL.

AWS IoT Core alur kerja penyedia kredenSIAL.
  1. AWS IoT Core Perangkat membuat permintaan HTTPS ke penyedia kredenSIAL untuk token keamanan. Permintaan mencakup X.509 sertifikat perangkat untuk otentikasi.

  2. Penyedia kredenSIAL meneruskan permintaan ke modul AWS IoT Core otentikasi dan otorisasi untuk memvalidasi sertifikat dan memverifikasi bahwa perangkat memiliki izin untuk meminta token keamanan.

  3. Jika sertifikat valid dan memiliki izin untuk meminta token keamanan, modul AWS IoT Core otentikasi dan otorisasi mengembalikan keberhasilan. Jika tidak, ia mengirimkan pengecualian ke perangkat.

  4. Setelah berhasil memvalidasi sertifikat, penyedia kredenSIAL memanggil AWS Security Token Service (AWS STS) untuk mengambil peran IAM yang Anda buat untuknya.

  5. AWS STS mengembalikan token keamanan hak istimewa terbatas sementara ke penyedia kredenSIAL.

  6. Penyedia kredenSIAL mengembalikan token keamanan ke perangkat.

  7. Perangkat menggunakan token keamanan untuk menandatangani AWS permintaan dengan AWS Signature Version 4.

  8. Layanan yang diminta memanggil IAM untuk memvalidasi tanda tangan dan mengotorisasi permintaan terhadap kebijakan akses yang dilampirkan pada peran IAM yang Anda buat untuk penyedia kredenSIAL.

  9. Jika IAM berhasil memvalidasi tanda tangan dan mengotorisasi permintaan, permintaan berhasil. Jika tidak, IAM mengirimkan pengecualian.

Bagian berikut menjelaskan cara menggunakan sertifikat untuk mendapatkan token keamanan. Itu ditulis dengan asumsi bahwa Anda telah men daftarkan perangkat dan membuat dan mengaktifkan sertifikat Anda sendiri untuk itu.

Cara menggunakan sertifikat untuk mendapatkan token keamanan

  1. Konfigurasikan peran IAM yang diasumsikan oleh penyedia kredenSIAL atas nama perangkat Anda. Lampirkan kebijakan kepercayaan berikut ke peran.

    { "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "credentials.iot.amazonaws.com"}, "Action": "sts:AssumeRole" } }

    Untuk setiap AWS layanan yang ingin Anda panggil, lampirkan kebijakan akses ke peran tersebut. Penyedia kredenSIAL mendukung variabel kebijakan berikut:

    • credentials-iot:ThingName

    • credentials-iot:ThingTypeName

    • credentials-iot:AwsCertificateId

    Ketika perangkat memberikan nama benda dalam permintaannya ke AWS layanan, penyedia kredenSIAL menambahkan credentials-iot:ThingName dan credentials-iot:ThingTypeName sebagai variabel konteks ke token keamanan. Penyedia kredenSIAL menyediakan credentials-iot:AwsCertificateId sebagai variabel konteks meskipun perangkat tidak memberikan nama benda dalam permintaan. Anda meneruskan nama benda sebagai nilai header permintaan x-amzn-iot-thingname HTTP.

    Ketiga variabel ini hanya berfungsi untuk kebijakan IAM, bukan AWS IoT Core kebijakan.

  2. Pastikan bahwa pengguna yang melakukan langkah berikutnya (membuat alias peran) memiliki izin untuk meneruskan peran yang baru dibuat ke AWS IoT Core. Kebijakan berikut memberikan keduanya iam:GetRole dan iam:PassRole izin kepada AWS pengguna. Iz iam:GetRole in memungkinkan pengguna untuk mendapatkan informasi tentang peran yang baru saja Anda buat. Iz iam:PassRole in memungkinkan pengguna untuk meneruskan peran ke AWS layanan lain.

    { "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::123456789012:role/your role name" } }
  3. Buat alias AWS IoT Core peran. Perangkat yang akan melakukan panggilan langsung ke AWS layanan harus tahu peran mana yang digunakan ARN saat terhubung AWS IoT Core. Hard-coding peran ARN bukanlah solusi yang baik karena mengharuskan Anda untuk memperbarui perangkat setiap kali peran ARN berubah. Solusi yang lebih baik adalah menggunakan CreateRoleAlias API untuk membuat alias peran yang menunjuk ke peran ARN. Jika peran ARN berubah, Anda cukup memperbarui alias peran. Tidak ada perubahan yang diperlukan pada perangkat. API ini mengambil parameter berikut:

    roleAlias

    Wajib. String arbitrer yang mengidentifikasi alias peran. Ini berfungsi sebagai kunci utama dalam model data alias peran. Ini berisi 1-128 karakter dan harus mencakup hanya karakter alfanumerik dan simbol =, @, dan -. Karakter alfabet huruf besar dan kecil diperbolehkan. Nama alias peran peka huruf besar.

    roleArn

    Wajib. ARN dari peran yang dirujuk alias peran.

    credentialDurationSeconds

    Tidak wajib. Berapa lama (dalam detik) kredensi valid. Nilai minimum adalah 900 detik (15 menit). Nilai maksimum adalah 43.200 detik (12 jam). Nilai default adalah 3.600 detik (1 jam).

    penting

    Penye AWS IoT Core dia Kredensi dapat mengeluarkan kredensi dengan masa pakai maksimum 43.200 detik (12 jam). Memiliki kredenSIAL yang valid hingga 12 jam dapat membantu mengurangi jumlah panggilan ke penyedia kredensia dengan menyimpan kredenSIAL lebih lama.

    credentialDurationSecondsNilai harus kurang dari atau sama dengan durasi sesi maksimum peran IAM yang dirujuk alias peran. Untuk informasi selengkapnya, lihat Memodifikasi durasi sesi maksimum peran (AWS API) dari Panduan Pengguna Manajemen AWS Identitas dan Akses.

    Untuk informasi selengkapnya tentang API ini, lihat CreateRoleAlias.

  4. Lampirkan kebijakan ke sertifikat perangkat. Kebijakan yang dilampirkan pada sertifikat perangkat harus memberikan izin perangkat untuk mengambil peran tersebut. Anda melakukan ini dengan memberikan izin untuk iot:AssumeRoleWithCertificate tindakan ke alias peran, seperti dalam contoh berikut.

    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/your role alias" } ] }
  5. Buat permintaan HTTPS ke penyedia kredenSIAL untuk mendapatkan token keamanan. Berikan informasi berikut:

    • Sertifikat: Karena ini adalah permintaan HTTP melalui otentikasi bersama TLS, Anda harus memberikan sertifikat dan kunci pribadi kepada klien Anda saat membuat permintaan. Gunakan sertifikat dan kunci pribadi yang sama dengan yang Anda gunakan saat mendaftarkan sertifikat Anda AWS IoT Core.

      Untuk memastikan perangkat Anda berkomunikasi dengan AWS IoT Core (dan bukan layanan yang menyamar sebagai layanan), lihat Otentikasi Server, ikuti tautan untuk mengunduh sertifikat CA yang sesuai, lalu salin ke perangkat Anda.

    • RoleAlias: Nama alias peran yang Anda buat untuk penyedia kredenSIAL. Nama alias peran peka huruf besar/kecil dan harus cocok dengan alias peran yang dibuat di AWS IoT Core.

    • ThingName: Nama benda yang Anda buat ketika Anda mendaftarkan AWS IoT Core barang Anda. Ini diteruskan sebagai nilai header x-amzn-iot-thingname HTTP. Nilai ini diperlukan hanya jika Anda menggunakan atribut benda sebagai variabel kebijakan dalam AWS IoT Core atau kebijakan IAM.

      catatan

      ThingNameYang Anda berikan x-amzn-iot-thingname harus sesuai dengan nama sumber daya AWS IoT Thing yang ditetapkan ke sertifikat. Jika tidak cocok, kesalahan 403 dikembalikan.

    Jalankan perintah berikut di AWS CLI untuk mendapatkan titik akhir penyedia kredenSIAL untuk Anda Akun AWS. Untuk informasi selengkapnya tentang API ini, lihat DescribeEndpoint. Untuk FIPS-enabled titik akhir, lihatAWS IoT CoreĀ - titik akhir penyedia kredensyal.

    aws iot describe-endpoint --endpoint-type iot:CredentialProvider

    Objek JSON berikut adalah contoh output dari describe-endpoint perintah. Ini berisi endpointAddress yang Anda gunakan untuk meminta token keamanan.

    { "endpointAddress": "your_aws_account_specific_prefix.credentials.iot.your region.amazonaws.com" }

    Gunakan titik akhir untuk membuat permintaan HTTPS ke penyedia kredenSIAL untuk mengembalikan token keamanan. Contoh perintah berikut menggunakancurl, tetapi Anda dapat menggunakan klien HTTP apa pun.

    catatan

    Nama R oleAlias peka huruf besar/kecil dan harus cocok dengan alias peran yang dibuat di AWS IoT.

    curl --cert your certificate --key your private key -H "x-amzn-iot-thingname: your thing name" --cacert AmazonRootCA1.pem https://your endpoint /role-aliases/your role alias/credentials

    Perintah ini mengembalikan objek token keamanan yang berisi, aaccessKeyId, a secretAccessKeysessionToken, dan kedaluwarsa. Objek JSON berikut adalah contoh output dari curl perintah.

    {"credentials":{"accessKeyId":"access key","secretAccessKey":"secret access key","sessionToken":"session token","expiration":"2018-01-18T09:18:06Z"}}

    Anda kemudian dapat menggunakan sessionToken nilaiaccessKeyId,secretAccessKey, dan untuk menandatangani permintaan ke AWS layanan. Untuk demonstrasi ujung ke ujung, lihat Cara Menghilangkan Kebutuhan Kre Hard-Coded AWS denSIAL di Perangkat dengan Menggunakan posting blog AWS IoT Penyedia Kredensi di Blog AWS Keamanan.