我正在为我将通过 STS 承担的 IAM 角色编写 CloudFormation 模板。我需要添加一个条件,其中键等于值,其中键和值都取决于“阶段”参数。我已经能够根据参数以编程方式更改值,但是我基于 Stage 更改密钥的所有尝试都失败了。
我已经尝试使用地图和 !FindInMap 来获取正确的密钥,并尝试使用 !If 构建两种情况下的条件。
在第一种情况...
Mappings:
Constants:
beta:
Id: "beta.example.com"
Endpoint: "beta-link.example.com/api/oauth2/v2:aud"
prod:
Id: "example.com"
Endpoint: "link.example.com/api/oauth2/v2:aud"
AssumeRolePolicyDocument:
Statement:
Action:
- "sts:AssumeRoleWithWebIdentity"
Condition:
StringEquals:
!FindInMap [Constants, !Ref Stage, Endpoint]:
- !FindInMap [Constants, !Ref Stage, Id]
Run Code Online (Sandbox Code Playgroud)
...我有一个错误: map keys must be strings; received a map instead
在第二种情况...
AssumeRolePolicyDocument:
Statement:
Action:
- "sts:AssumeRoleWithWebIdentity"
Condition:
!If
- !Equals [!Ref Stage, prod]
- StringEquals:
"link.example.com/api/oauth2/v2:aud": "example.com"
- StringEquals:
"beta-link.example.com/api/oauth2/v2:aud": "beta.example.com"
Run Code Online (Sandbox Code Playgroud)
...我有另一个错误: Template format error: …