

# 转发访问会话（FAS）请求和权限评估
<a name="fas-requests-and-permission-evaluation"></a>

用户在创建、更新和删除 CloudFormation 堆栈时可以选择指定 IAM 角色 ARN。如果用户未提供任何角色，CloudFormation 会使用默认服务机制与其他 AWS 服务进行交互。在这种情况下，调用者必须拥有对所管理资源的必要权限。如果用户提供自己的 IAM 角色，CloudFormation 会担任该角色代表用户执行服务交互。

无论用户是否提供 IAM 角色，CloudFormation 都会为每个资源操作生成一个新的范围缩小的 FAS 令牌。因此，在这两种情况下，都会填充 [FAS 相关条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html#access_fas_policy_conditions)（包括 `aws:ViaAWSService`）。

FAS 的使用会影响 CloudFormation 操作期间 IAM 策略的评估方式。如果有资源受到 FAS 相关条件键的影响，使用包含该资源的模板创建堆栈时，可能会发生权限被拒绝的情况。

**示例 IAM 策略**  
可考虑使用以下 IAM 策略。`Statement2` 会始终阻止在 CloudFormation 中创建 `AWS::KMS::Key` 资源。无论用户在堆栈操作期间是否提供 IAM 角色，系统都会始终强制执行该限制。这是因为由于 FAS 的使用，`aws:ViaAWSService` 条件键会始终设置为 `true`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Action": [
                "kms:CreateKey"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "Statement2",
            "Effect": "Deny",
            "Action": [
                "kms:CreateKey"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "Bool": {
                    "aws:ViaAWSService": "true"
                }
            }
        }
    ]
}
```

------

**示例堆栈模板**  
例如，如果用户使用以下示例模板创建堆栈，`aws:ViaAWSService` 设置为 `true`，角色权限会被 FAS 策略覆盖。拒绝 `CreateKey` 操作的 IAM 策略的 `Statement2` 会影响堆栈创建。这会导致出现权限被拒绝的错误。

```
Resources:
  myPrimaryKey:
    Type: AWS::KMS::Key
    Properties:
      Description: An example multi-Region primary key
      KeyPolicy:
        Version: '2012-10-17'
        Id: key-default-1
        Statement:
          - Sid: Enable IAM User Permissions
            Effect: Allow
            Principal:
              AWS: !Join
                - ''
                - - 'arn:aws:iam::'
                  - !Ref AWS::AccountId
                  - ':root'
            Action: kms:*
            Resource: '*'
```

有关 FAS 的更多信息，请参阅《IAM 用户指南》**中的[转发访问会话](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)。

**注意**  
大多数资源都遵循此模式。但是，如果您在创建、更新或删除资源时遇到意外成功或失败，并且您的 IAM 策略包含 FAS 相关条件键，则该资源很可能是不遵循此标准模式的一小部分资源。