預防跨服務混淆代理人 - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

預防跨服務混淆代理人

混淆代理人問題屬於安全性議題,其中沒有執行動作許可的實體可以強制具有更多權限的實體執行該動作。在 中 AWS,跨服務模擬可能會導致混淆代理問題。在某個服務 (呼叫服務) 呼叫另一個服務 (被呼叫服務) 時,可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可,以其不應有存取許可的方式對其他客戶的資源採取動作。為了預防這種情況, AWS 提供的工具可協助您保護所有服務的資料,而這些服務主體已獲得您帳戶中資源的存取權。

若要限制將另一個 服務 AWS IoT 提供給資源的許可,我們建議您在資源政策中使用 aws:SourceArnaws:SourceAccount 全域條件內容索引鍵。如果同時使用全域條件內容索引鍵,則在相同政策陳述式中使用 aws:SourceAccount 值和 aws:SourceArn 值中的帳戶時,必須使用相同的帳戶 ID。

防止混淆代理問題的最有效方法是使用具有完整 Amazon Resource Name (ARN) 資源的aws:SourceArn全域條件內容金鑰。對於 AWS IoT,您的 aws:SourceArn 必須符合格式:arn:aws:iot:region:account-id:resource-type/resource-id適用於資源特定許可或 arn:aws:iot:region:account-id:*。資源 ID 可以是許可資源的名稱或 ID,也可以是許可資源 的萬用字元陳述式IDs。請確定 region 符合您的 AWS IoT 區域和 account-id 符合您的客戶帳戶 ID。

下列範例示範如何使用 AWS IoT 角色信任政策中的 aws:SourceArnaws:SourceAccount 全域條件內容索引鍵,來避免混淆的代理問題。如需更多範例,請參閱預防混淆代理的詳細範例

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"iot.amazonaws.com" }, "Action":"sts:AssumeRole", "Condition":{ "StringEquals":{ "aws:SourceAccount":"123456789012" }, "ArnLike":{ "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:*" } } } ] }
注意

如果您取得存取拒絕錯誤,這可能是因為與 AWS Security Token Service (STS) 的服務整合不支援 aws:SourceArnaws:SourceAccount內容金鑰。

預防混淆代理的詳細範例

本節提供詳細範例,說明如何使用 AWS IoT 角色信任政策中的 aws:SourceArn和 aws:SourceAccount全域條件內容索引鍵來防止混淆代理問題。

機群佈建

您可以使用佈建範本資源設定機群佈建。當佈建範本參考佈建角色時,該角色的信任政策可以包含 aws:SourceArnaws:SourceAccount 條件索引鍵。這些金鑰會限制組態可以調用sts:AssumeRole請求的資源。

具有下列信任政策的角色只能由 IoT 主體 (iot.amazonaws.com) 擔任 中指定的佈建範本SourceArn

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"iot.amazonaws.com" }, "Action":"sts:AssumeRole", "Condition":{ "StringEquals":{ "aws:SourceAccount":"123456789012" }, "ArnLike":{ "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:provisioningtemplate/example_template" } } } ] }

JITP

just-in-time 佈建 (JITP) 中,您可以使用佈建範本作為與 CA 分開的資源,或定義範本內文和角色作為 CA 憑證組態的一部分。 AWS IoT 角色信任政策aws:SourceArn中的 值取決於您如何定義佈建範本。

如果您將佈建範本定義為個別資源,則 的值aws:SourceArn可以是 "arn:aws:iot:region:account-id:provisioningtemplate/example_template"。您可以使用 中的相同政策範例機群佈建

如果您在 CA 憑證資源中定義佈建範本,則 的值aws:SourceArn可以是 "arn:aws:iot:region:account-id:cacert/cert_id""arn:aws:iot:region:account-id:cacert/*"。當 CA 憑證的 ID 等資源識別碼在建立時未知時,您可以使用萬用字元。

具有下列信任政策的角色只能由 IoT 主體 (iot.amazonaws.com) 擔任 中指定的 CA 憑證SourceArn

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"iot.amazonaws.com" }, "Action":"sts:AssumeRole", "Condition":{ "StringEquals":{ "aws:SourceAccount":"123456789012" }, "ArnLike":{ "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:cacert/8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e" } } } ] }

建立 CA 憑證時,您可以在註冊組態中參考佈建角色。佈建角色的信任政策可用來aws:SourceArn限制角色可以擔任哪些資源。不過,在註冊 CA 憑證的初始 RegisterCACertificate 呼叫期間,您不會有 CA 憑證ARN的 ,以在 aws:SourceArn 條件中指定。

若要解決此問題,亦即將佈建角色信任政策指定給向 註冊的特定 CA 憑證 AWS IoT Core,您可以執行下列動作:

  • 首先,呼叫 RegisterCACertificate 而不提供 RegistrationConfig 參數。

  • 向 註冊 CA 憑證後 AWS IoT Core,請呼叫上面的 UpdateCACertificate

    在 U pdateCACertificate 呼叫中,提供 RegistrationConfig,其中包含佈建角色信任政策,並將 aws:SourceArn 設定為新註冊的 CA 憑證ARN的 。

憑證提供者

對於AWS IoT Core 憑證提供者 ,使用 AWS 帳戶 與您在 中建立角色別名相同的 aws:SourceAccount,並指定符合 中ARN角色別名資源類型的陳述式aws:SourceArn。建立IAM角色以搭配 AWS IoT Core 憑證提供者使用時,您必須在aws:SourceArn條件中包含可能需要擔任角色ARNs的任何角色別名,藉此授權跨服務sts:AssumeRole請求。

具有下列信任政策的角色只能由 中 roleAlias 指定的 的 AWS IoT Core 憑證提供者 (credentials.iot.amazonaws.com) 主體擔任SourceArn。如果委託人嘗試擷取aws:SourceArn條件中指定以外之角色別名的憑證,即使該其他角色別名參考相同的IAM角色,請求也會遭到拒絕。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:iot:us-east-1:123456789012:rolealias/example_rolealias" } } } ] }