AWS IoT 政策過度寬鬆
AWS IoT 政策提供的許可太寬鬆或不受限制。它授與許可給一組廣泛的裝置傳送或接收 MQTT 訊息,或授與許可給一組廣泛的裝置存取或修改影子和任務執行資料。
一般來說,裝置政策應授與其相關聯資源的存取許可,並且其他裝置不允許存取或是極少。在某些例外狀況下,使用萬用字元 (例如,「*」) 來指定資源的政策已視為太寬鬆或不受限制。
此檢查會以 IOT_POLICY_OVERLY_PERMISSIVE_CHECK
出現在 CLI 和 API 中。
嚴重性:關鍵
詳細資訊
當此檢查發現不合規的 AWS IoT 政策時,將會傳回下列原因代碼:
-
ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS
為什麼它很重要
憑證、Amazon Cognito 身分或物件群組使用過度寬鬆的政策,如果遭入侵會影響您的整個帳戶。攻擊者可以使用這類廣泛存取來讀取或修改您的所有裝置的影子、任務或任務執行。或者,攻擊者可以使用入侵的憑證連接到惡意裝置或啟動 DDOS 對您的網路進行攻擊。
如何修正它
遵循以下步驟以修正任何附加到物件、物件群組或其他實體不合規的政策:
-
使用 CreatePolicyVersion 來建立合規的新政策版本。將
setAsDefault
旗標設為 true。(這可讓此新版本適用於使用該政策的所有實體。) -
使用 ListTargetsForPolicy 取得政策所附加至的目標清單 (憑證、物件群組),以及判斷那些裝置包含在群組中或使用憑證來連接。
-
驗證所有相關的裝置可以連接到 AWS IoT。如果裝置無法連接,則復原到預設政策之前的版本,使用 SetPolicyVersion 將預設政策還原為先前版本,修訂政策,然後重試。
您可以使用緩解動作:
-
套用
REPLACE_DEFAULT_POLICY_VERSION
緩解行動到稽核結果來產生此變更。 -
如果您要實作自訂回應以回應 Amazon SNS 訊息,套用
PUBLISH_FINDINGS_TO_SNS
緩解動作。
如需詳細資訊,請參閱緩解動作。
使用 AWS IoT Core 政策變數以動態參考您政策中的 AWS IoT 資源。
MQTT 許可
會透過 AWS IoT 訊息代理程式傳送 MQTT 訊息,並裝置會使用該訊息來執行許多動作,包括存取和修改影子狀態和任務執行狀態。與裝置連接、發佈或訂閱 MQTT 訊息許可的政策,應該對特定資源加以限制這些動作如下所示:
- 連線
-
-
不合規:
arn:aws:iot:
region
:account-id
:client/*萬用字元 * 可讓任何裝置連接到 AWS IoT。
arn:aws:iot:
region
:account-id
:client/${iot:ClientId}除非
iot:Connection.Thing.IsAttached
在條件索引鍵中設定為 true,這相當於先前範例中的萬用字元 *。 -
合規:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:
region
:account-id
:client/${iot:Connection.Thing.ThingName}" ], "Condition": { "Bool": { "iot:Connection.Thing.IsAttached": "true" } } } ] }資源規範包含與連接所用的裝置名稱相符的變數。條件陳述式會檢查 MQTT 用戶端所用的憑證是否與連接到具有所用名稱的物件相符,進一步限制許可。
-
- 發佈
-
-
不合規:
arn:aws:iot:
region
:account-id
:topic/$aws/things/*/shadow/update這可讓裝置更新任何裝置 (* = 所有裝置) 的影子。
arn:aws:iot:
region
:account-id
:topic/$aws/things/*這可讓裝置讀取、更新或刪除任何裝置 (* = 所有裝置) 的影子。
-
合規:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:
region
:account-id
:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" ], } ] }資源規格包含萬用字元,但只符合任何影子相關主題物件名稱連線的裝置。
-
- 訂閱
-
-
不合規:
arn:aws:iot:
region
:account-id
:topicfilter/$aws/things/*這可讓裝置為所有裝置訂閱保留影子或任務主題。
arn:aws:iot:
region
:account-id
:topicfilter/$aws/things/*前述範例相同,但使用 # 萬用字元。
arn:aws:iot:
region
:account-id
:topicfilter/$aws/things/+/shadow/update這可讓裝置看到任何裝置 (+ = 所有裝置) 的影子更新。
-
合規:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:
region
:account-id
:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" "arn:aws:iot:region
:account-id
:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*" ], } ] }資源規格包含萬用字元,但只會針對物件名稱用於連線的裝置,比對任何影子相關主體與任何任務相關主題。
-
- 接收
-
-
合規:
arn:aws:iot:
region
:account-id
:topic/$aws/things/*這是合規的,因為裝置只能從已訂閱許可的主題接收訊息。
-
影子和任務許可
授與裝置執行 API 動作的許可以存取或修改裝置影子或任務執行資料的政策,應該於特定的資源限制這些動作。以下是 API 動作:
-
DeleteThingShadow
-
GetThingShadow
-
UpdateThingShadow
-
DescribeJobExecution
-
GetPendingJobExecutions
-
StartNextPendingJobExecution
-
UpdateJobExecution
範例
-
不合規:
arn:aws:iot:
region
:account-id
:thing/*這可讓裝置在任何物件上執行指定的動作。
-
合規:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DeleteThingShadow", "iot:GetThingShadow", "iot:UpdateThingShadow", "iotjobsdata:DescribeJobExecution", "iotjobsdata:GetPendingJobExecutions", "iotjobsdata:StartNextPendingJobExecution", "iotjobsdata:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:
region
:account-id
:/thing/MyThing1", "arn:aws:iot:region
:account-id
:/thing/MyThing2" ] } ] }這可讓裝置僅在兩個物件上執行指定的動作。