

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

# AWS Transfer Family 基于标签的策略示例
<a name="security_iam_tag-based-policy-examples"></a>

以下是如何根据标签控制 AWS Transfer Family 资源访问权限的示例。

## 使用标签控制对 AWS Transfer Family 资源的访问权限
<a name="tag-access-control"></a>

IAM 策略中的条件是所需语法的一部分，您可以使用它们指定对 AWS Transfer Family 资源的权限。您可以根据这些 AWS Transfer Family 资源的标签来控制对这些资源（例如用户、服务器、角色和其他实体）的访问权限。标签是键值对。有关为资源添加标签的更多信息，请参阅中的为[AWS 资源添加标签](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)。*AWS 一般参考*

在中 AWS Transfer Family，资源可以有标签，有些操作可以包含标签。在创建 IAM 策略时，您可以使用标签条件键来控制：
+ 根据 AWS Transfer Family 资源所具有的标签，哪些用户可以对资源执行操作。
+ 哪些标签可以在操作的请求中传递。
+ 是否特定标签键可在请求中使用。

通过使用基于标签的访问控制，您可以应用比 API 级别更精细的控制。与使用基于资源的访问控制相比，您还可以应用更多动态控制。您可以创建 IAM 策略，以允许或拒绝按请求中提供的标签（请求标签）执行操作。您还可以根据正在操作资源的标签（资源标签）创建 IAM 策略。通常，资源标签用于资源上已有的标签，请求标签用于向资源添加标签或从资源中删除标签。

有关标签条件键的完整请求和语义，请参阅 *IAM 用户指南*中的[使用资源标签控制 AWS 资源的访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。有关使用 API Gateway 指定 IAM 策略的详细信息，请参阅 *API Gateway 开发人员指南*中的[控制访问具有 IAM 权限的 API](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html)。

### 示例 1：基于资源标签拒绝操作
<a name="transfer-deny-actions-resource-tag"></a>

您可根据标签拒绝资源上执行的操作。如果用户或服务器资源通过秘钥 `stage` 和值 `prod` 标记，则以下示例策略拒绝 `TagResource`、`UntagResource`、`StartServer`、`StopServer`、`DescribeServer` 以及 `DescribeUser` 操作。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "transfer:TagResource",
                "transfer:UntagResource",
                "transfer:StartServer",
                "transfer:StopServer",
                "transfer:DescribeServer",
                "transfer:DescribeUser"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/stage": "prod"
                }
            }
        }
    ]
}
```

### 示例 2：基于资源标签允许操作
<a name="transfer-allow-actions-resource-tag"></a>

您可以允许根据标签对资源执行操作。如果用户或服务器资源通过秘钥 `stage` 和值 `prod` 标记，则以下示例策略拒绝 `TagResource`、`UntagResource`、`StartServer`、`StopServer`、`DescribeServer` 以及 `DescribeUser` 操作。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "transfer:TagResource",
                "transfer:UntagResource",
                "transfer:StartServer",
                "transfer:StopServer",
                "transfer:DescribeServer",
                "transfer:DescribeUser"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/stage": "prod"
                }
            }
        }
    ]
}
```

### 示例 3：拒绝根据请求标签创建用户或服务器
<a name="transfer-deny-server-creation-tag"></a>

以下示例策略包含两个语句。如果标签的成本中心密钥无值，则第一条语句拒绝对所有资源执行 `CreateServer` 操作。

如果标签的成本中心密钥包含除 1、2 或 3 之外的任何其他值，则第二条语句将拒绝 `CreateServer` 操作。

**注意**  
此策略确实允许创建或删除包含 `costcenter` 秘钥和 `1`、`2` 或 `3` 值的资源。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        { 
            "Effect": "Deny",
            "Action": [
                "transfer:CreateServer"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "Null":  {
                    "aws:RequestTag/costcenter": "true"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": "transfer:CreateServer",
            "Resource": [
                "*"
            ],
            "Condition": {
                "ForAnyValue:StringNotEquals": {
                    "aws:RequestTag/costcenter": [
                        "1",
                        "2",
                        "3"
                    ]
                }
            }
        }           
    ]
}
```