

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Stacks 中的 OpsWorks 跨服务混淆了副手预防
<a name="cross-service-confused-deputy-prevention-stacks"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 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)全局条件上下文密钥来限制 Stac AWS OpsWorks ks 向堆栈授予其他服务的权限。如果 `aws:SourceArn` 值不包含账户 ID，例如 Amazon S3 存储桶 ARN，您必须使用两个全局条件上下文密钥来限制权限。如果同时使用全局条件上下文密钥和包含账户 ID 的 `aws:SourceArn` 值，则 `aws:SourceAccount` 值和 `aws:SourceArn` 值中的账户在同一策略语句中使用时，必须使用相同的账户 ID。如果您只希望将一个堆栈与跨服务访问相关联，请使用 `aws:SourceArn`。如果您想允许该账户中的任何堆栈与跨服务使用操作相关联，请使用 `aws:SourceAccount`。

的值`aws:SourceArn`必须是堆栈的 ARN。 OpsWorks 

防范混淆代理问题最有效的方法是使用 `aws:SourceArn` 全局条件上下文键和 OpsWorks Stacks 堆栈的完整 ARN。如果您不知道完整的 ARN，或者要指定多个堆栈 ARNs，请使用带有通配符 (`*`) 的`aws:SourceArn`全局上下文条件密钥来表示 ARN 的未知部分。例如 `arn:aws:servicename:*:123456789012:*`。

以下部分展示了如何使用 OpsWorks Stacks 中的`aws:SourceArn`和`aws:SourceAccount`全局条件上下文键来防止出现混淆的副手问题。

## 防止在 Stacks 中 OpsWorks 混淆副手漏洞
<a name="confused-deputy-opsworks-stacks-procedure"></a>

本节介绍如何帮助防止 OpsWorks 堆栈中出现混淆的代理漏洞，并包括可以附加到用于访问 OpsWorks 堆栈的 IAM 角色的权限策略示例。作为安全最佳实践，建议您向 IAM 角色与其他服务的信任关系中添加 `aws:SourceArn` 和 `aws:SourceAccount` 条件键。信任关系允许 OpsWorks Stacks 扮演角色，在其他服务中执行创建或管理 OpsWorks Stacks 堆栈所需的操作。

**编辑信任关系来添加 `aws:SourceArn` 和 `aws:SourceAccount` 条件键**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在左侧导航窗格中，选择 **角色**。

1. 在**搜索**框中，搜索您用于访问 OpsWorks 堆栈的角色。 AWS 托管角色是`aws-opsworks-service-role`。

1. 在角色的 **摘要** 页面上，选择 **信任关系 **选项卡。

1. 在 **信任关系** 选项卡上选择 **编辑信任策略**。

1. 在**编辑信任策略**页面上，向策略中添加至少一个 `aws:SourceArn` 或 `aws:SourceAccount` 条件键。用于`aws:SourceArn`将跨服务（例如 Amazon EC2）和 OpsWorks Stacks 之间的信任关系限制为特定的堆 OpsWorks 栈堆栈，限制性更强。`aws:SourceAccount`添加后，将跨服务与 OpsWorks Stacks 之间的信任关系限制为特定账户中的堆栈，限制较少。示例如下：请注意，如果您同时使用两个条件键，则账户 IDs 必须相同。

1. 添加条件键后，选择**更新策略**。

以下是使用 `aws:SourceArn` 和 `aws:SourceAccount` 来限制堆栈访问的其他角色示例。

**Topics**
+ [示例：在特定区域访问堆栈](#confused-deputy-opsworks-stacks-example1)
+ [示例：向 `aws:SourceArn` 添加多个堆栈 ARN](#confused-deputy-opsworks-stacks-example2)

### 示例：在特定区域访问堆栈
<a name="confused-deputy-opsworks-stacks-example1"></a>

以下角色信任关系声明访问美国东部（俄亥俄州）区域中的任何 OpsWorks Stacks 堆栈 ()。`us-east-2`请注意，该区域在 `aws:SourceArn` 的 ARN 值中指定，但堆栈 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/*"
        }
      }
    }
  ]
}
```

------

### 示例：向 `aws:SourceArn` 添加多个堆栈 ARN
<a name="confused-deputy-opsworks-stacks-example2"></a>

以下示例限制对账户 ID 为 123456789012 的两个 OpsWorks 堆栈组成的数组的访问权限。