Вот мой пример использования:
У меня есть две роли 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 *
Единственный способ, который я нашел к настоящему моменту, - это полностью удалить второй стек и затем создать его снова.
Любая помощь будет оценена.