AWS IoT Core ساده شده – قسمت 1: مجوزها

AWS IoT Core یک سرویس شگفتانگیز (و اغلب نادیده گرفته میشود) است همانطور که قبلاً هنگام مقایسه IoT Core با Websockets دروازه API گفتم. به طور خلاصه، IoT Core اتصالات خود را مدیریت می کند، سیستم قدرتمندی از موضوعات و قوانین دارد، به خوبی مقیاس بندی می شود و بی اهمیت نیست، بسیار ارزان است.
با این حال، IoT Core همچنین می تواند ترسناک باشد و به دلیل آن شروع به کار با آن دشوار است چیزها، ناوگان، دستگاه های سایه و گواهینامه ها. خبر خوب این است که آن چیزها به هیچ وجه برای استفاده از این سرویس اجباری نیستند. اگرچه ممکن است در نگاه اول واضح نباشد، اما راههایی وجود دارد که میتوان برخی از مشتریان را بدون ثبت نام یا مدیریت به IoT Core متصل کرد.
من چند مقاله برای پوشش استفاده اولیه از IoT Core با هدف توسعه دهندگانی که به دنبال راهی آسان و انعطاف پذیر برای ارتباط دو طرفه بین مشتری و سرور با استفاده از سوکت های وب هستند، ارسال خواهم کرد.
قسمت 1: مقدمه و مجوزها (این یکی!)
قسمت 2: با استفاده از یک URL تعیین شده متصل شوید
قسمت 3: با استفاده از یک مجوز سفارشی متصل شوید
بخش 4: قوانین موضوع
به زبان ساده، و شاید به اندازه کافی اعتبار ندهید، IoT Core یک کارگزار MQTT است. MQTT یک پروتکل انتشار-اشتراک سبک وزن است. کارگزار MQTT به عنوان مرکز مرکزی بین مشتریان متصل عمل می کند که می تواند پیام ها را به یکدیگر ارسال کند و به آنها دسترسی پیدا کند. پیام ها روی موضوعات ارسال می شوند. برای مثال یک موضوع یک رشته سلسله مراتبی است که با اسلش از هم جدا شده است سنسور/دما/اتاق1. یک کلاینت میتواند هر دقیقه بهروزرسانیهای دما را برای این موضوع ارسال کند و مشتری دیگری ممکن است در این موضوع مشترک شود و تمام دمایی را که برای انجام کاری با آن ارسال میشود، دریافت کند.
MQTT گزینه های پیشرفته و موارد استفاده زیادی دارد که در اینجا به آنها نمی پردازم. اگر می خواهید در مورد آنها بیشتر بدانید، توصیه می کنم اینجا بیشتر بخوانید. برای بقیه این مجموعه کافی است بدانید که یک کارگزار مرکزی (IoT Core) و مشتریان (یعنی یک مرورگر وب) وجود دارد که می تواند پیام ها را منتشر و دریافت کند.
عجایب موضوع
در یک موضوع، الف + کاراکتر می تواند به عنوان یک علامت عام برای یک سطح استفاده شود در حالی که a # کاراکتر را می توان برای یک وایلدکارت چند سطحی استفاده کرد. ممکن است بیش از 1 علامت عام سطح تک داشته باشید، مانند سنسور/+/+ با این حال نمی توان بیش از 1 وایلدکارت چند سطحی داشت (که منطقی است).
با نگاهی به مثال قبلی، اگر مشتری به دمای تمام اتاق ها علاقه مند باشد، می تواند مشترک شود سنسور/دما/# که در آن کاراکتر # یک علامت در MQTT است. این بدان معنی است که اگر مشتری اطلاعاتی را بخواهد همه حسگرها، می تواند به آن گوش دهد حسگر/#. امکان عضویت در آن نیز وجود دارد سنسور/+/اتاق1 برای دریافت تمام پیام ها (دما و سایر موارد) اتاق 1.
برای استفاده ساده از IoT Core، 4 مجوز وجود دارد که باید در مورد آنها بدانید. استفاده از مجوزهای کمترین امتیاز، بدیهی است که برای Core اینترنت اشیا نیز اعمال می شود. در صورتی که یک کلاینت عملی را انجام دهد که توسط خطمشی آن مجاز نیست، ارتباط مشتری توسط سرور قطع میشود.
توجه به این نکته مهم است که حروف عام MQTT به عنوان کاراکترهای تحت اللفظی در مجوزهای IAM در نظر گرفته می شوند. این بدان معنی است که شما می توانید از ?، *، + و # در سیاست IAM اما ? و * در حالی که فقط به عنوان علامت عام برای خود خط مشی IAM در نظر گرفته می شود + و # به عنوان حروف عام برای موضوعات در هسته IoT در نظر گرفته می شوند. این را با استفاده از چندین مثال توضیح خواهم داد.
iot: اتصال
ابتدا، مشتری شما باید بتواند به سرور متصل شود. شناسه مشتری باید باشد منحصر بفرد در هر منطقه، در غیر این صورت مشتری متصل قبلی با همان شناسه مشتری قطع خواهد شد.
مثال هاarn:aws:iot:{region}:{account-id}:client/*
امکان اتصال با استفاده از هر شناسه مشتری.
arn:aws:iot:{region}:{account-id}:client/sensor-123
امکان اتصال به عنوان سنسور-123.
arn:aws:iot:{region}:{account-id}:client/sensor-???
امکان اتصال با استفاده از شناسه مشتری را تا زمانی که با آن شروع می شود، می دهد حسگر- و با 3 کاراکتر به پایان می رسد. این به این معنی است که سنسور-123، سنسور-فو کار خواهد کرد، اما سنسور، سنسور-فوبار و سنسور-123456 کار نخواهد کرد
arn:aws:iot:{region}:{account-id}:client/sensor-*
امکان اتصال با استفاده از شناسه مشتری را تا زمانی که با آن شروع می شود، می دهد حسگر-.
arn:aws:iot:{region}:{account-id}:client/user-????????-????-????-????-????????????
امکان اتصال با استفاده از کاربر-{uuid}.
iot: مشترک شوید
قبل از اینکه مشتری بتواند پیام ها را دریافت کند، مشتری باید ابتدا در یک یا چند موضوع مشترک شود.
مثال هاarn:aws:iot:{region}:{account-id}:topicfilter/updates
امکان اشتراک در به روز رسانی ها.
arn:aws:iot:{region}:{account-id}:topicfilter/updates/sensor-???
امکان اشتراک در به روز رسانی/حسگر-123، به روز رسانی/حسگر-فو و انواع دیگر تا زمانی که موضوع با شروع شود به روز رسانی/ و سپس سطح دومی دارد که با آن شروع می شود حسگر- و سپس 3 کاراکتر به روز رسانی/foo-123 یا “updates/sensor-123/foo” را نمی پذیرد.
arn:aws:iot:{region}:{account-id}:topicfilter/updates/sensor-*
امکان اشتراک در به روز رسانی/حسگر-123، به روز رسانی/sensor-123/foo، و/یا “به روز رسانی/sensor-123/foo/bar/baz” زیرا * برای هر سطحی از عمق موضوع اجازه می دهد.
arn:aws:iot:{region}:{account-id}:topicfilter/updates/sensor-*/???
امکان اشتراک در به روز رسانی/sensor-123/foo، به روز رسانی/sensor-12345678/bar و انواع دیگر تا زمانی که موضوع با “به روز رسانی/حسگر-” شروع شود و دارای سطح دوم با دقیقاً 3 کاراکتر باشد. قبول نمیکنه به روز رسانی/حسگر-1 یا updates/sensor-12345/#.
البته اگر بخواهید می توانید از حروف عام در MQTT نیز استفاده کنید.
arn:aws:iot:{region}:{account-id}:topicfilter/updates/+
امکان اشتراک در موضوع/به روز رسانی/+ فقط به عنوان + در سیاست به عنوان یک کلمه تحت اللفظی تلقی می شود.
arn:aws:iot:{region}:{account-id}:topicfilter/updates/#
امکان اشتراک در موضوع/به روز رسانی/# فقط به عنوان # در سیاست به عنوان یک کلمه تحت اللفظی تلقی می شود.
iot:Receive & iot:Publish
iot:Receive به مشتری اجازه میدهد تا پیامهایی را در مورد موضوعاتی که در آن مشترک است دریافت کند، در حالی که iot:Publish به مشتری اجازه میدهد پیامهایی را منتشر کند که میتواند توسط سایر کلاینتها و/یا قوانین موضوعی دریافت شود.
مجوزهای iot:Receive و iot:Publish ساختاری مشابه iot:Subscribe دارند با این تفاوت که به جای “topicfilter” از “موضوع” استفاده می کند. معمولاً iot:Subscribe و iot:Receive یکسان هستند، زیرا منطقی نیست که در مورد موضوعاتی که مشتری مجاز به اشتراک در آن ها نیست، دریافت کنید و بالعکس.
مثال هاarn:aws:iot:{region}:{account-id}:topic/updates
arn:aws:iot:{region}:{account-id}:topic/updates/sensor-???
arn:aws:iot:{region}:{account-id}:topic/updates/sensor-*
arn:aws:iot:{region}:{account-id}:topic/updates/sensor-*/???
arn:aws:iot:{region}:{account-id}:topic/updates/+
arn:aws:iot:{region}:{account-id}:topic/updates/#
از آنجایی که مجوزها و مقادیر فرمت های متفاوتی دارند، می توانید به راحتی همه چیز را در یک خط مشی واحد ترکیب کنید:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect",
"iot:Subscribe",
"iot:Receive"
],
"Resource": [
"arn:aws:iot:{region}:{account-id}:client/sensor-*",
"arn:aws:iot:{region}:{account-id}:topicfilter/sensor-*/???",
"arn:aws:iot:{region}:{account-id}:topic/sensor-*/???"
]
}
]
}
در مقاله بعدی نحوه اتصال به IoT Core با استفاده از یک url تعیین شده را توضیح خواهم داد.