转发访问会话(FAS)请求和权限评估 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

转发访问会话(FAS)请求和权限评估

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

无论用户是否提供 IAM 角色,CloudFormation 都会为每个资源操作生成一个新的范围缩小的 FAS 令牌。因此,在这两种情况下,都会填充 FAS 相关条件键(包括 aws:ViaAWSService)。

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

示例 IAM 策略

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

{ "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 用户指南》中的转发访问会话

注意

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