How to use Fn::If with array values in cloud formation templates

Solution 1:

Instead of considering value evaluated from Fn::If as a single array item, consider it an array. Replace the Principal with the following and it will work.

JSON

{
  "Principal": {
    "AWS": {
      "Fn::If": [
        "IsProd",
        [
          "arn1"
        ],
        [
          "arn1",
          "arn2"
        ]
      ]
    }
  }
}

It will look simple in yaml

Principal:
  AWS:
    Fn::If:
    - IsProd
    - - arn1
    - - arn1
      - arn2