

# 使用 IAM 策略控制访问权限
<a name="id_roles_providers_outbound_policies"></a>

IAM 提供多种策略类型来控制对外站身份联合验证功能的访问权限。您可以使用[基于身份的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)控制哪些 IAM 主体可以请求令牌并强制执行特定的令牌属性，例如受众、生命周期和签名算法。[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)（SCP）使您能够对 AWS Organizations 中所有账户的令牌生成强制执行组织范围的限制。[资源控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)（RCP）控制资源级别的访问权限。您还可以使用 [VPC 端点策略](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)限制哪些主体可以通过您的 VPC 端点访问 AWS STS `GetWebIdentityToken` API，从而为您的安全状况添加网络级控制。本节说明如何使用这些策略类型和条件键实现精细的访问控制。

要请求身份令牌，IAM 主体必须拥有 `sts:GetWebIdentityToken` 权限。通过附加到 IAM 用户或角色的身份策略授予此权限。要允许将标签（键、值对）传递给 GetWebIdentityToken 调用，IAM 主体必须拥有 `sts:TagGetWebIdentityToken` 权限。
+ 使用 [sts:IdentityTokenAudience](reference_policies_iam-condition-keys.md#ck_identitytokenaudience) 条件键限制哪些外部服务可以接收令牌。
+ 使用 [sts:DurationSeconds](reference_policies_iam-condition-keys.md#ck_durationseconds) 条件键强制执行最长令牌生命周期。
+ 使用 [sts:SigningAlgorithm](reference_policies_iam-condition-keys.md#ck_signingalgorithm) 条件键要求特定的加密算法。
+ 使用 [aws:RequestTag](reference_policies_condition-keys.md#condition-keys-requesttag) 条件键可将请求中传递的标签键值对与您在策略中指定的标签对进行比较。
+ 使用 [aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) 条件键可将请求中的标签键与您在策略中指定的键进行比较。

要详细了解 IAM 策略中提供的条件键，请参阅 [IAM 和 AWS STS](reference_policies_iam-condition-keys.md) 条件键。

此示例身份策略组合了多个条件键：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowTokenGenerationWithRestrictions",
            "Effect": "Allow",
            "Action": "sts:GetWebIdentityToken",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "sts:IdentityTokenAudience": [
                        "https://api1.example.com",
                        "https://api2.example.com"
                    ]
                },
                "NumericLessThanEquals": {
                    "sts:DurationSeconds": 300
                },
                "StringEquals": {
                    "sts:SigningAlgorithm": "ES384"
                }
            }
        }
    ]
}
```

## 最佳实践
<a name="outbound-best-practices"></a>

请遵循以下建议，将您的 AWS 身份安全地联合到外部服务。
+ **使用较短的令牌生命周期：**请求满足您运营需求的生命周期最短的令牌。
+ **使用 IAM 策略实施最低权限访问并限制令牌属性：**仅向需要 `sts:GetWebIdentityToken` 权限的 IAM 主体授予该权限。根据需要使用条件键指定签名算法、允许的令牌受众和最长令牌生命周期。
+ **验证外部服务中的声明：**为安全起见，请务必验证主题（“sub”）、受众（“aud”）等相关声明，以确保其匹配您的预期值。尽可能验证自定义声明，以便在外部服务中实现精细授权决策。