Использование значения параметра в качестве ключа в Cloudformation - PullRequest
1 голос
/ 12 марта 2020

AWS Документы и ссылки в Интернете, по-видимому, не позволяют разрешить использование параметра шаблона CloudFormation (в моем случае YAML) параметром.

Мне нужно создать политики IAM, которые заблокируйте AssumeRoleWithWebIdentity только для учетных записей службы EKS у поставщика EKS OID C.

Effect: "Allow"
Principal:
  Federated:
    - !Ref MasterARN
Condition:
  StringLike:
    !Ref MasterOIDC: !Ref ServiceAccount
Action:
 - "sts:AssumeRoleWithWebIdentity"

Я понимаю, почему CloudFormation не допустит этого, поскольку вы можете злоупотреблять «шаблоном», но я думаю, что это крайний регистр.

Теги (ключ: значение) позволяют обойти это, заставив передать ключ под клавишей «Имя» (например, Name: key; Value: value).

1 Ответ

1 голос
/ 23 марта 2020

Если я правильно понял ваш вопрос (вы хотите, чтобы имя условия зависело от параметров), вы можете использовать для этого макрос PyPlate .

AWSTemplateFormatVersion: "2010-09-09"
Transform: [PyPlate]
Description: A stack that provisions a bunch of s3 buckets based on param names
Parameters:
  CreateOne:
    Type: String
    Default: "a"
  CreateTwo:
    Type: String
    Default: "a"

Conditions: 
  |
    #!PyPlate
    output = {}
    for k in params:
      output[k] = {"Fn::Equals" : ["prod", "prod"]}

Resources:
  myBucket:
    Type: AWS::S3::Bucket
    Condition: CreateOne

Обработанный шаблон будет:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "A stack that provisions a bunch of s3 buckets based on param names",
  "Parameters": {
    "CreateOne": {
      "Type": "String",
      "Default": "a"
    },
    "CreateTwo": {
      "Type": "String",
      "Default": "a"
    }
  },
  "Resources": {
    "myBucket": {
      "Type": "AWS::S3::Bucket",
      "Condition": "CreateOne"
    }
  },
  "Conditions": {
    "CreateOne": {
      "Fn::Equals": [
        "prod",
        "prod"
      ]
    },
    "CreateTwo": {
      "Fn::Equals": [
        "prod",
        "prod"
      ]
    }
  }
}
...