

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

# 防止跨服务混淆代理
<a name="confused-deputy"></a>

混淆代理问题是一个安全性问题，即不具有某操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在中 AWS，跨服务模仿可能会导致混乱的副手问题。一个服务（*呼叫服务*）调用另一项服务（*所谓的服务*）时，可能会发生跨服务模拟。可以操纵调用服务以使用其权限对另一个客户的资源进行操作，否则该服务不应有访问权限。为防止这种情况， AWS 提供可帮助您保护所有服务的数据的工具，而这些服务中的服务主体有权限访问账户中的资源。有关此问题的详细描述，请参阅 *IAM 用户指南*中的[混淆代理问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

我们建议在资源策略中使用[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)全局条件上下文密钥来限制 Transf AWS er Family 对资源的权限。如果使用两个全局条件上下文键，在同一策略语句中使用时，`aws:SourceAccount` 值和 `aws:SourceArn` 值中的账户必须使用相同的账户 ID。

防止混淆代理问题的最有效方法是使用您想要允许的资源的准确 Amazon 资源名称 (ARN)。如果您要指定多个资源，请使用带有通配符 (`*`) 的 `aws:SourceArn` 全局上下文条件键来表示 ARN 的未知部分。例如 `arn:aws:transfer::region::account-id:server/*`。

AWS Transfer Family 使用以下类型的角色：
+ **用户角色**-允许服务管理的用户访问必要的 Transfer Family 资源。 AWS Transfer Family 在 Transfer Family 用户 ARN 的背景下担任此角色。
+ **访问角色** - 仅提供对正在传输的 Amazon S3 文件的访问权限。对于入站 AS2 转移，访问角色使用协议的 Amazon 资源名称 (ARN)。对于出站 AS2 传输，访问角色使用连接器的 ARN。
+ **调用角色** – 用于作为服务器自定义身份提供程序的 Amazon API Gateway。Transfer Family 在 Transfer Family 服务器 ARN 的背景下扮演这个角色。
+ **日志角色**-用于将条目登录到 Amazon CloudWatch。Transfer Family 使用此角色记录成功和失败的详细信息以及有关文件传输的信息。Transfer Family 在 Transfer Family 服务器 ARN 的背景下扮演这个角色。对于出站 AS2 传输，日志角色使用连接器 ARN。
+ **执行角色** - 允许 Transfer Family 用户调用和启动工作流程。Transfer Family 在 Transfer Family 工作流程 ARN 的背景下担任此角色。

有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 中的策略和权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。

**注意**  
在以下示例中，用您自己的信息替换每个*user input placeholder*示例。

**注意**  
在我们的示例中，我们同时使用 `ArnLike` 和 `ArnEquals`。它们在功能上是相同的，因此您可以在制定策略时使用其中任何一个。Transfer Family 文档在条件包含通配符时使用 `ArnLike`，`ArnEquals` 用于表示完全匹配的条件。

## AWS Transfer Family 用户角色跨服务混淆副手预防
<a name="user-role-cross-service"></a>

以下示例策略允许账户中的任何服务器担任该角色。

****  

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

以下示例策略允许任何特定服务器用户承担此角色。

****  

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

以下示例策略允许特定服务器的特定用户担任该角色。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "transfer.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:transfer:us-east-1:123456789012:user/server-id/user-name"
                }
            }
        }
    ]
}
```

## AWS Transfer Family 工作流程角色跨服务混乱副手预防
<a name="workflow-role-cross-service"></a>

以下示例策略允许账户中的任何工作流程担任该角色。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "transfer.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:transfer:us-west-2:111122223333:workflow/*"
                }
            }
        }
    ]
}
```

以下示例策略允许特定工作流程承担此角色。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "transfer.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:transfer:us-west-2:111122223333:workflow/workflow-id"
                }
            }
        }
    ]
}
```

## AWS Transfer Family 连接器角色跨服务混乱副手预防
<a name="connector-role-cross-service"></a>

以下示例策略允许账户中的任何连接器代入该角色。

****  

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

以下示例策略允许特定的连接器代入该角色。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "transfer.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:transfer:us-east-1:123456789012:connector/connector-id"
                }
            }
        }
    ]
}
```

## AWS Transfer Family 日志和调用角色跨服务混淆了副手预防
<a name="logging-role-cross-service"></a>

**注意**  
以下示例可用于日志记录和调用角色。  
在这些示例中，如果您的服务器未附加任何工作流程，则可以删除工作流程的 ARN 详细信息。

以下示例 logging/invocation 策略允许账户中的任何服务器（和工作流程）代入该角色。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAllServersWithWorkflowAttached",
            "Effect": "Allow",
            "Principal": {
                "Service": "transfer.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                   "aws:SourceArn": [
                     "arn:aws:transfer:us-west-2:111122223333:server/*",
                     "arn:aws:transfer:us-west-2:111122223333:workflow/*"
                   ]
                }
            }
        }
    ]
}
```

以下示例 logging/invocation 策略允许特定的服务器（和工作流程）担任该角色。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowSpecificServerWithWorkflowAttached",
            "Effect": "Allow",
            "Principal": {
                "Service": "transfer.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnEquals": {
                   "aws:SourceArn": [
                       "arn:aws:transfer:us-west-2:111122223333:server/server-id",
                       "arn:aws:transfer:us-west-2:111122223333:workflow/workflow-id"
                   ]
                }
            }
        }
    ]
}
```