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

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

預防跨服務混淆代理人

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

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

防範混淆副問題的最有效方法是使用aws:SourceArn全域條件內容金鑰搭配資源的完整 Amazon 資源名稱 (ARN)。用於 AWS IoT,您aws:SourceArn必須遵守以下格式:arn:aws:iot:region:account-id:resource-type/resource-id對於資源特定權限或arn:aws:iot:region:account-id:*. resource-id 可以是允許資源的名稱或 ID,也可以是允許資源的萬用字元陳述式。IDs請確定 region 符合您的 AWS IoT 地區和 account-id 與您的客戶帳戶 ID 相符。

下列範例示範如何使用aws:SourceArnaws:SourceAccount全域條件前後關聯鍵字,以避免混淆的副問題 AWS IoT 角色信任原則。如需更多範例,請參閱混淆副預防的詳細例子

{ "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 安全令牌服務(STS)不支持aws:SourceArn和上aws:SourceAccount下文密鑰。

混淆副預防的詳細例子

本節提供如何透過在中使用aws:SourceArn和aws:SourceAccount全域條件前後關聯鍵字來防止混淆的副問題的詳細範例 AWS IoT 角色信任原則。

機群佈建

您可以使用佈建範本資源來設定叢集佈建。當佈建範本參考佈建角色時,該角色的信任原則可以包含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 provisioning (JITP) 中,您可以使用佈建範本作為獨立於 CA 的資源,也可以將範本主體和角色定義為 CA 憑證組態的一部分。aws:SourceArn中的值 AWS IoT 角色信任原則取決於您定義佈建範本的方式。

如果您將佈建範本定義為個別資源,則的值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 憑證的初始 R egisterCACertificate 呼叫期間,您無法在aws:SourceArn條件中指定 CA 憑證。ARN

若要解決這個問題,即將佈建角色信任原則指定給已註冊的特定 CA 憑證 AWS IoT Core,您可以執行下列動作:

  • 首先,在egisterCACertificate不提供RegistrationConfig參數的情況下調用 R

  • 在 CA 證書註冊後 AWS IoT Core,調用 U pdateCACertificate 就可以了。

    在 U pdateCACertificate 呼叫中,提供包RegistrationConfigaws:SourceArn設定為新註冊 CA 憑證ARN的佈建角色信任原則的。

憑證提供者

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

具有下列信任原則的角色只能由主體承擔 AWS IoT Core 中 roleAlias 指定的認證提供者 (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" } } } ] }