

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

# Stacks OpsWorks 中的跨服務混淆代理人預防
<a name="cross-service-confused-deputy-prevention-stacks"></a>

**重要**  
 AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止，並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問，請透過 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

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

我們建議在堆疊存取政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全域條件內容金鑰，以限制 AWS OpsWorks Stacks 為堆疊提供其他服務的許可。如果 `aws:SourceArn` 值不包含帳戶 ID (例如 Amazon S3 儲存貯體 ARN)，您必須使用這兩個全域條件內容金鑰來限制許可。如果同時使用這兩個全域條件內容金鑰，且 `aws:SourceArn` 值包含帳戶 ID，則在相同政策陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 值中的帳戶時，必須使用相同的帳戶 ID。`aws:SourceArn` 如果您希望只有一個堆疊與跨服務存取相關聯，請使用 。`aws:SourceAccount` 如果您想要允許該帳戶中的任何堆疊與跨服務使用相關聯，請使用 。

的值`aws:SourceArn`必須是 OpsWorks 堆疊的 ARN。

防範混淆代理人問題最有效的方法是使用`aws:SourceArn`全域條件內容索引鍵搭配 Stacks 堆疊的完整 ARN OpsWorks 。如果您不知道完整的 ARN，或者如果您指定多個堆疊 ARNs，請將`aws:SourceArn`全域內容條件金鑰與萬用字元 (`*`) 用於 ARN 的未知部分。例如 `arn:aws:servicename:*:123456789012:*`。

下一節說明如何使用 Stacks 中的 OpsWorks `aws:SourceArn`和 `aws:SourceAccount`全域條件內容索引鍵來防止混淆代理人問題。

## 防止 Stacks OpsWorks 中的混淆代理人入侵
<a name="confused-deputy-opsworks-stacks-procedure"></a>

本節說明如何協助防止 Stacks 中的 OpsWorks 混淆代理人入侵，並包含您可以連接到您用來存取 OpsWorks Stacks 之 IAM 角色的許可政策範例。作為安全最佳實務，建議您將 `aws:SourceArn`和 `aws:SourceAccount`條件金鑰新增至 IAM 角色與其他 服務的信任關係。信任關係可讓 OpsWorks Stacks 擔任角色，在建立或管理您的 Stacks OpsWorks 堆疊所需的其他服務中執行動作。

**編輯信任關係以新增 `aws:SourceArn` 和 `aws:SourceAccount`條件索引鍵**

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中，選擇 **Roles** (角色)。

1. 在**搜尋**方塊中，搜尋您用來存取 Stacks OpsWorks 的角色。 AWS 受管角色為 `aws-opsworks-service-role`。

1. 在角色的**摘要**頁面上，選擇**信任關係**索引標籤。

1. 在**信任關係**索引標籤上，選擇**編輯信任政策**。

1. 在**編輯信任政策**頁面上，將至少一個 `aws:SourceArn`或 `aws:SourceAccount`條件索引鍵新增至政策。使用 `aws:SourceArn` 將跨服務 （例如 Amazon EC2) 和 OpsWorks Stacks 之間的信任關係限制為更嚴格的特定 OpsWorks Stacks 堆疊。新增 `aws:SourceAccount` 以將跨服務與 Stacks OpsWorks 之間的信任關係限制為特定帳戶中的堆疊，這是較不嚴格的。下列是 範例。請注意，如果您使用兩個條件索引鍵，帳戶 IDs 必須相同。

1. 完成新增條件索引鍵後，請選擇**更新政策**。

以下是使用 `aws:SourceArn`和 限制對 堆疊存取的其他角色範例`aws:SourceAccount`。

**Topics**
+ [範例：存取特定區域中的堆疊](#confused-deputy-opsworks-stacks-example1)
+ [範例：將多個堆疊 ARN 新增至 `aws:SourceArn`](#confused-deputy-opsworks-stacks-example2)

### 範例：存取特定區域中的堆疊
<a name="confused-deputy-opsworks-stacks-example1"></a>

下列角色信任關係陳述式會存取美國東部 （俄亥俄） 區域 () 中的任何 OpsWorks Stacks 堆疊`us-east-2`。請注意，區域是在 ARN 值 中指定`aws:SourceArn`，但堆疊 ID 值是萬用字元 (\$1)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "opsworks.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnEquals": {
          "aws:SourceArn": "arn:aws:opsworks:us-east-2:123456789012:stack/*"
        }
      }
    }
  ]
}
```

------

### 範例：將多個堆疊 ARN 新增至 `aws:SourceArn`
<a name="confused-deputy-opsworks-stacks-example2"></a>

下列範例限制存取帳戶 ID 123456789012 中兩個 OpsWorks Stacks 堆疊的陣列。