Как я могу сослаться на существующую роль в моем новом шаблоне CloudFormation? - PullRequest
0 голосов
/ 01 апреля 2020

В моей учетной записи AWS я создаю новый шаблон Cloudformation, который создает новые политики, и я хочу прикрепить их к нескольким существующим ролям в учетной записи. Вот как я пытался ссылаться на них:

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Names of existing roles to which the restrictive policies need added",
    "Parameters": {
        "AdditionalExecutionRoleParameter": {
            "Type": "AWS::IAM::Role",
            "Default": "CloudOps"
        }
    },
    "Resources": { (and so on)

Затем, в разделе ниже новых политик, я пытался ссылаться на эти существующие роли (в данном случае «AdditionalExecutionRoleParameter») и прикреплять политики для них с помощью параметра роли. Тем не менее, я получаю сообщение об ошибке «Не удалось получить внешние значения» при попытке развернуть шаблон CloudFormation ... Я попытался ввести «CloudOps», который является именем роли, в качестве параметра «По умолчанию», и я Также попытался ввести роль ARN там ... ничего не работает.

1 Ответ

2 голосов
/ 01 апреля 2020

Не все типы ресурсов AWS поддерживаются в поле параметра type.

Полный список: AWS -Specifi c Типы параметров . Он включает, например:

  • AWS :: EC2 :: VP C :: Id
  • Список
  • AWS :: SSM :: Параметр :: Имя

Этот список не включает AWS::IAM::Role (или любые ресурсы IAM).

Если вы просто пытаетесь связать новую политику IAM с существующей именованной ролью IAM, обратите внимание, что конструкция AWS::IAM::Policy имеет свойство Roles, и вы должны предоставить список имен ролей для применения политики. Требуется роль имена , а не роль ARNs , поэтому вам не нужен идентификатор учетной записи.

Если вам когда-либо понадобится идентификатор учетной записи, он будет доступен как псевдопараметр, и вы можете получить его из "Ref" : "AWS::AccountId", но я не думаю, что он вам нужен здесь.

Вот JSON пример того, как создать новую политику IAM (разрешив s3:Get* на mybucket/*) и связать его с существующей ролью IAM, имя которой вы указываете в качестве параметра в стек:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "Add policy to role test",
  "Parameters": {
    "TheRoleName": {
      "Type": "String",
      "Default": "CloudOps",
      "Description": "Name of role to associate policy with"
    }
  },
  "Resources": {
    "ThePolicy": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyName": "s3-read",
        "PolicyDocument": {
          "Statement": {
            "Effect": "Allow",
            "Action": [
              "s3:Get*"
            ],
            "Resource": ["arn:aws:s3:::mybucket/*"]
          }
        },
        "Roles": [
          {
            "Ref": "TheRoleName"
          }
        ]
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...