本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
混淆代理人問題屬於安全性議題,其中沒有執行動作許可的實體可以強制具有更多權限的實體執行該動作。在 中 AWS,跨服務模擬可能會導致混淆代理人問題。在某個服務 (呼叫服務) 呼叫另一個服務 (被呼叫服務) 時,可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可,以其不應有存取許可的方式對其他客戶的資源採取動作。為了預防這種情況, AWS 提供的工具可協助您保護所有服務的資料,而這些服務主體已獲得您帳戶中資源的存取權。
若要限制將另一個 服務 AWS IoT 提供給資源的許可,我們建議在資源政策中使用 aws:SourceArn
和 aws:SourceAccount
全域條件內容金鑰。如果同時使用全域條件內容索引鍵,則在相同政策陳述式中使用aws:SourceAccount
值和 aws:SourceArn
值中的帳戶時,必須使用相同的帳戶 ID。
防範混淆代理人問題的最有效方法是使用 aws:SourceArn
全域條件內容索引鍵,其中包含資源的完整 Amazon Resource Name (ARN)。對於 AWS IoT,您的 aws:SourceArn
必須遵循格式:arn:
適用於資源特定許可或 aws
:iot:region
:account-id
:resource-type/resource-id
arn:
。資源 ID 可以是允許資源的名稱或 ID,也可以是允許資源 IDs的萬用字元陳述式。請確定該aws
:iot:region
:account-id
:*
區域
與您的 AWS IoT 區域相符,且帳戶 ID
與您的客戶帳戶 ID 相符。
下列範例示範如何使用 AWS IoT 角色信任政策中的 aws:SourceArn
和 aws: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:SourceArn
和 aws:SourceAccount
內容金鑰。
預防混淆代理人的詳細範例
本節提供詳細範例,說明如何使用 AWS IoT 角色信任政策中的 aws:SourceArn和 aws:SourceAccount全域條件內容索引鍵來防止混淆代理人問題。
機群佈建
您可以使用佈建範本資源來設定機群佈建。當佈建範本參考佈建角色時,該角色的信任政策可以包含 aws:SourceArn
和 aws: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:
。您可以在建立時未知資源識別符時,使用萬用字元,例如 CA 憑證的 ID。region
:account-id
:cacert/*
"
具有下列信任政策的角色只能由 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
來限制角色可以擔任哪些資源。不過,在初始 RegisterCACertificate 呼叫註冊 CA 憑證期間,您不會擁有 CA 憑證的 ARN,以在 aws:SourceArn
條件中指定。
若要解決此問題,例如,若要將佈建角色信任政策指定給向 註冊的特定 CA 憑證 AWS IoT Core,您可以執行下列動作:
-
首先,呼叫 RegisterCACertificate 而不提供
RegistrationConfig
參數。 -
向 註冊 CA 憑證後 AWS IoT Core,請呼叫 UpdateCACertificate。
在 UpdateCACertificate 呼叫中,提供
RegistrationConfig
,其中包含佈建角色信任政策,並將aws:SourceArn
設定為新註冊的 CA 憑證 ARN。
登入資料提供者
對於AWS IoT Core 登入資料提供者,請使用 AWS 帳戶 您在 中建立角色別名的相同 aws:SourceAccount
,並指定符合 中角色別名資源類型之資源 ARN 的陳述式aws:SourceArn
。建立 IAM 角色以搭配 AWS IoT Core 登入資料提供者使用時,您必須在aws:SourceArn
條件中包含可能需要擔任該角色的任何角色別名的 ARNs,藉此授權跨服務sts:AssumeRole
請求。
具有下列信任政策的角色只能由 AWS IoT Core 登入資料提供者 (credentials.iot.amazonaws.com
) 的主體擔任 中指定的 roleAliasSourceArn
。如果委託人嘗試擷取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
"
}
}
}
]
}