

# 使用 API Gateway 的服务相关角色
<a name="using-service-linked-roles"></a>

Amazon API Gateway 使用 Amazon Identity and Access Management (IAM)[ 服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服务相关角色是一种与 API Gateway 直接关联的独特类型的 IAM 角色。服务相关角色是由 API Gateway 预定义的，并包含服务代表您调用其他Amazon服务所需的所有权限。

您可以使用服务相关角色轻松设置 API Gateway，因为您不必手动添加所需的权限。API Gateway 定义其服务相关角色的权限，除非另外定义，否则只有 API Gateway 可以代入该角色。定义的权限包括信任策略和权限策略，以及不能附加到任何其他 IAM 实体的权限策略。

只有在先删除相关资源后，才能删除服务相关角色。这将保护您的 API Gateway 资源，因为您不会无意中删除对资源的访问权限。

有关支持服务相关角色的其它服务的信息，请参阅[使用 IAM 的 Amazon 服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)并查找**服务相关角色**列中显示为**是**的服务。选择 **Yes** 与查看该服务的服务相关角色文档的链接。

## API Gateway 的服务相关角色权限
<a name="slr-permissions"></a>

API Gateway 使用名为 **AWSServiceRoleForAPIGateway** 的服务相关角色 – 允许 API Gateway 代表您访问 Elastic Load Balancing、Amazon Data Firehose 和其它服务资源。

AWSServiceRoleForAPIGateway 服务相关角色信任以下服务以代入该角色：
+ `ops.apigateway.amazonaws.com`

角色权限策略允许 API Gateway 对指定的资源完成以下操作：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticloadbalancing:AddListenerCertificates",
                "elasticloadbalancing:RemoveListenerCertificates",
                "elasticloadbalancing:ModifyListener",
                "elasticloadbalancing:DescribeListeners",
                "elasticloadbalancing:DescribeLoadBalancers",
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "xray:GetSamplingTargets",
                "xray:GetSamplingRules",
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "servicediscovery:DiscoverInstances"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "arn:aws:firehose:*:*:deliverystream/amazon-apigateway-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "acm:DescribeCertificate",
                "acm:GetCertificate"
            ],
            "Resource": "arn:aws:acm:*:*:certificate/*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateNetworkInterfacePermission",
            "Resource": "arn:aws:ec2:*:*:network-interface/*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "arn:aws:ec2:*:*:network-interface/*",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": [
                        "Owner",
                        "VpcLinkId"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ModifyNetworkInterfaceAttribute",
                "ec2:DeleteNetworkInterface",
                "ec2:AssignPrivateIpAddresses",
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterfacePermission",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeNetworkInterfaceAttribute",
                "ec2:DescribeVpcs",
                "ec2:DescribeNetworkInterfacePermissions",
                "ec2:UnassignPrivateIpAddresses",
                "ec2:DescribeSubnets",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "servicediscovery:GetNamespace",
            "Resource": "arn:aws:servicediscovery:*:*:namespace/*"
        },
        {
            "Effect": "Allow",
            "Action": "servicediscovery:GetService",
            "Resource": "arn:aws:servicediscovery:*:*:service/*"
        }
    ]
}
```

------

您必须配置权限以允许 IAM 实体（例如，用户、组或角色）创建、编辑或删除服务相关角色。有关更多信息，请参阅 *IAM 用户指南*中的[服务相关角色权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 为 API Gateway 创建服务相关角色
<a name="create-slr"></a>

您无需手动创建服务相关角色。当您在Amazon Web Services 管理控制台、Amazon CLI 中或者使用Amazon API 创建 API、自定义域名或 VPC 链接时，API Gateway 会再次为您创建服务相关角色。

如果您删除了此服务相关角色然后需要再次创建它，则可以使用相同的流程在您的账户中重新创建此角色。当您创建 API、自定义域名或 VPC 链接时，API Gateway 会再次为您创建服务相关角色。

## 编辑 API Gateway 的服务相关角色
<a name="edit-slr"></a>

API Gateway 不允许您编辑 AWSServiceRoleForAPIGateway 服务相关角色。在创建服务相关角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。不过，您可以使用 IAM 编辑角色的说明。有关更多信息，请参阅 *IAM 用户指南*中的[编辑服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 删除 API Gateway 的服务相关角色
<a name="delete-slr"></a>

如果您不再需要使用某个需要服务相关角色的功能或服务，我们建议您删除该角色。这样您就没有未被主动监控或维护的未使用实体。但是，您必须先清除服务相关角色的资源，然后才能手动删除它。

**注意**  
如果在您试图删除资源时 API Gateway 服务正在使用该角色，则删除操作可能会失败。如果发生这种情况，则请等待几分钟后重试。

**删除 AWSServiceRoleForAPIGateway 使用的 API Gateway 资源**

1. 通过以下网址打开 API Gateway 控制台：[https://console.aws.amazon.com/apigateway/](https://console.amazonaws.cn/apigateway/)。

1. 导航到使用服务相关角色的 API、自定义域名或 VPC 链接。

1. 使用控制台删除资源。

1. 重复此过程以删除使用服务相关角色的所有 API、自定义域名或 VPC 链接。

**使用 IAM 手动删除服务关联角色**

使用 IAM 控制台、Amazon CLI 或Amazon API 删除 AWSServiceRoleForAPIGateway 服务相关角色。有关更多信息，请参阅 *IAM 用户指南* 中的[删除服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

## API Gateway 服务相关角色支持的区域
<a name="slr-regions"></a>

API Gateway 支持在服务可用的所有区域中使用服务相关角色。有关更多信息，请参阅 [Amazon 服务端点](https://docs.amazonaws.cn/general/latest/gr/rande.html)。

## API Gateway 更新到Amazon托管策略
<a name="security-iam-awsmanpol-updates"></a>



查看有关 API Gateway 的 Amazon 托管策略更新的详细信息（从该服务开始跟踪这些更改开始）。有关此页面更改的提示，请订阅[文档历史记录](history.md)页面上的 API Gateway RSS 源。


| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
|  添加了 `acm:GetCertificate` 支持到 `AWSServiceRoleForAPIGateway` 策略。  |  `AWSServiceRoleForAPIGateway` 策略现在包含调用 ACM `GetCertificate` API 操作的权限。  | 2021 年 7 月 12 日 | 
|  API Gateway 已开启跟踪更改  |  API Gateway 为其 Amazon 托管策略开启了跟踪更改。  | 2021 年 7 月 12 日 | 