Ссылка политики роли IAM на другую роль прервана при обновлении - PullRequest
0 голосов
/ 08 января 2020

Вот мой пример использования:

У меня есть две роли IAM в двух разных учетных записях, где одна из них должна принять другую, поэтому второе определение роли похоже на это:

Resources:
  SecondRole:
    Type: AWS::IAM::Role
    Properties:
      Path: /
      RoleName: SecondRoleName
      Description: Role to be assumed by the first one
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action:
              - sts:AssumeRole
            Principal:
              AWS:
                - !Ref FirstRoleArn
      Policies:
        - PolicyName: SecondRolePolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - ec2:DescribeSecurityGroups
                  - ec2:DescribeRegions
                Resource: '*'
              - Effect: Allow
                Action:
                  - ec2:RevokeSecurityGroup*
                Resource: !Sub 'arn:aws:ec2:*:${ AWS::AccountId }:security-group/*'

Первая роль ARN передается параметром облачной информации, как вы можете видеть в определении ресурса.

Оба ресурса создаются с использованием облачной информации и конвейера, который создает, обновляет или удаляет стеки в соответствии с изменениями. , Параметры сохраняются в SSM и передаются в облачную информацию при выполнении операций создания или обновления.

Когда я сначала CREATE стеки, обе роли создаются успешно и с правильными политиками.

Если изменить имя первой роли , UPDATE в его стеке будет успешно выполнено, но что-то очень странное происходит в политике отношений доверенного объекта:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "AROASIGPDNENFIN6Q7OI6"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Первая роль ARN (что тоже изменилось) изменяется случайной комбинацией букв и цифр.

Я проверил в облачной информации, что параметры в стеке имеют правильное значение, даже события облачной информации для этого стека регистрируют следующие :

Timestamp                       Logical ID               Status                           Status reason
2020-01-08 13:37:06 UTC+0100    StackSet-Stack-two  UPDATE_COMPLETE                             -
2020-01-08 13:37:06 UTC+0100    StackSet-Stack-two  UPDATE_COMPLETE_CLEANUP_IN_PROGRESS         -
2020-01-08 13:37:04 UTC+0100    SecondRole          UPDATE_COMPLETE                             -
2020-01-08 13:36:50 UTC+0100    SecondRole          UPDATE_IN_PROGRESS                          -
2020-01-08 13:36:47 UTC+0100    StackSet-Stack-two  UPDATE_IN_PROGRESS                   User Initiated

Если я заставлю конвейер выполнить снова с теми же значениями (чтобы гарантировать, что значение параметра стека обновляется до вызова операции UPDATE), вывод будет таким же, независимо от того, сколько раз я выполняю обновление, если политика повреждена, она не изменится. * 1 025 *

Единственный способ, который я нашел к настоящему моменту, - это полностью удалить второй стек и затем создать его снова.

Любая помощь будет оценена.

...