預防跨服務混淆代理人 - Amazon Quantum Ledger 資料庫 (Amazon QLDB)

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

預防跨服務混淆代理人

重要

支援終止通知:現有客戶將可以使用 Amazon,QLDB直到 07/31/2025 的支援結束為止。如需詳細資訊,請參閱將 Amazon QLDB Ledger 遷移至 Amazon Aurora Postgre。SQL

混淆代理人問題屬於安全性議題,其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在 中 AWS,跨服務模擬可能會導致混淆代理問題。

在某個服務 (呼叫服務) 呼叫另一個服務 (被呼叫服務) 時,可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可,以其不應有存取許可的方式對其他客戶的資源採取動作。為了防止混淆代理問題, AWS 提供工具,協助您使用已授予您帳戶中資源存取權的服務主體來保護所有 服務的資料。

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

下表列出 ExportJournalToS3StreamsJournalToKinesisQLDBAPI操作aws:SourceArn的可能值。這些操作在此安全問題的範圍內,因為它們呼叫 AWS Security Token Service (AWS STS) 擔任您指定的IAM角色。

API 操作 呼叫的服務 aws:SourceArn
ExportJournalToS3 AWS STS (AssumeRole)

允許 QLDB 擔任 帳戶中任何QLDB資源的角色:

arn:aws:qldb:us-east-1:123456789012:*

目前, QLDB僅支援此萬用字元ARN進行日誌匯出。

StreamsJournalToKinesis AWS STS (AssumeRole)

允許 QLDB 擔任特定QLDB串流的角色:

arn:aws:qldb:us-east-1:123456789012:stream/myExampleLedger/IiPT4brpZCqCq3f4MTHbYy

注意:您只能在建立串流資源ARN之後,在 中指定串流 ID。使用此 ARN,您可以允許角色僅用於單一QLDB串流。

允許 QLDB擔任分類帳任何QLDB串流的角色:

arn:aws:qldb:us-east-1:123456789012:stream/myExampleLedger/*

允許 QLDB擔任帳戶中任何QLDB串流的角色:

arn:aws:qldb:us-east-1:123456789012:stream/*

允許 QLDB 擔任 帳戶中任何QLDB資源的角色:

arn:aws:qldb:us-east-1:123456789012:*

防止混淆代理問題的最有效方法是使用包含完整資源ARN的aws:SourceArn全域條件內容索引鍵。如果您不知道資源ARN的完整內容,或要指定多個資源,請使用aws:SourceArn全域內容條件索引鍵搭配萬用字元 (*) 用於 的未知部分,ARN例如 arn:aws:qldb:us-east-1:123456789012:*

下列IAM角色的信任政策範例示範如何使用 aws:SourceArnaws:SourceAccount全域條件內容索引鍵,以防止混淆代理問題。使用此信任政策, QLDB 可以myExampleLedger僅為123456789012分類帳擔任帳戶中任何QLDB串流的角色。

若要使用此政策,請取代 us-east-1, 123456789012myExampleLedger 在 範例中使用您自己的資訊。

{ "Version": "2012-10-17", "Statement": { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "qldb.amazonaws.com" }, "Action": [ "sts:AssumeRole" ], "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:qldb:us-east-1:123456789012:stream/myExampleLedger/*" }, "StringEquals": { "aws:SourceAccount": "123456789012" } } } }