Kinesis Firehose Delivery Stream не может взять на себя роль при использовании облачной информации

Я пишу шаблон облачной информации, который создает поток доставки Kinesis Firehose и отправляет данные в корзину S3. Исходный поток - это Kinesis Steam. Он создает корзину, политики и роли s3, но когда он пытается создать поток доставки Kinesis Firehose, он не может сказать, что не может принять роль

После некоторого исследования я обнаружил, что Доставка не должна создаваться с использованием учетной записи root. Я попытался создать нового пользователя, но по-прежнему выдал ту же ошибку.

# creates the Kinesis Stream
KinesisStream:
  Type: AWS::Kinesis::Stream
  Properties:
    Name: HealthApp        
    RetentionPeriodHours: 24
    ShardCount: 8

# creates the firehose delivery stream   
KinesisFirehoseDeliveryStream:
  Type: AWS::KinesisFirehose::DeliveryStream
  Properties:
    DeliveryStreamName: HealthAppFirehose   
    DeliveryStreamType: KinesisStreamAsSource
    KinesisStreamSourceConfiguration:
    KinesisStreamARN:
      Fn::GetAtt:
      - KinesisStream
      - Arn
    RoleARN:
      Fn::GetAtt:
      - FirehoseDeliveryIAMRole
      - Arn

  S3DestinationConfiguration:
    BucketARN: !GetAtt MyS3Bucket.Arn
    Prefix: cloudformation-test/kinesis-fh
    BufferingHints:
       IntervalInSeconds: 60
       SizeInMBs: 100
    CloudWatchLoggingOptions:
      Enabled: 'false'
    CompressionFormat: UNCOMPRESSED
    RoleARN:
      Fn::GetAtt:
      - FirehoseDeliveryIAMRole
      - Arn
DependsOn:
- FirehoseDeliveryIAMPolicy


FirehoseDeliveryIAMRole:
 Type: AWS::IAM::Role
 Properties:
  AssumeRolePolicyDocument:
    Version: '2012-10-17'
    Statement:

      Effect: Allow
      Principal:
        Service: firehose.amazonaws.com
      Action: sts:AssumeRole
      Condition:
        StringEquals:
          sts:ExternalId: ACCOUNT_NUMBER


FirehoseDeliveryIAMPolicy:
  Type: AWS::IAM::Policy
  Properties:
  PolicyName: HealthAppPolicy

  PolicyDocument:
    Version: '2012-10-17'
    Statement:
    - Effect: Allow
      Action:
      - s3:AbortMultipartUpload
      - s3:GetBucketLocation
      - s3:GetObject
      - s3:ListBucket
      - s3:ListBucketMultipartUploads
      - s3:PutObject
      Resource:
      - arn:aws:s3:::health-app-bucket/cloudformation-test/kinesis-fh*
    - Effect: Allow
      Action:
      - kinesis:DescribeStream
      - kinesis:GetShardIterator
      - kinesis:GetRecords
      Resource:
        Fn::GetAtt:
        - KinesisStream
        - Arn
  Roles:
  - Ref: FirehoseDeliveryIAMRole
DependsOn:
- KinesisStream

â € ‹

Outputs:
  kinesisStreamArn:
    Description: Kinesis Stream ARN
    Value:
      Fn::GetAtt:
       - KinesisStream
       - Arn
  firehoseDeliveryStreamArn:
  Description: Firehose Delivery Stream ARN
  Value:
    Fn::GetAtt:
    - KinesisFirehoseDeliveryStream
    - Arn
firehoseDeliveryRoleArn:
  Description: Firehose Delivery Role ARN
  Value:
    Fn::GetAtt:
    - FirehoseDeliveryIAMRole
    - Arn

Я хочу, чтобы поток доставки был успешно создан. Любая помощь будет оценена.

Спасибо

1 ответ

Решение

Две вещи, которые нужно проверить:

  1. Интересно, правильно ли устанавливается и интерпретируется ACCOUNT_NUMBER. Вы можете проверить это, удалив весьConditionЗаявление как тест. В качестве теста (не для производства) удалите следующее и посмотрите, работает ли оно
      Condition:
        StringEquals:
          sts:ExternalId: ACCOUNT_NUMBER
  1. Есть ли у созданного вами пользователя доступ для создания политик и ролей IAM? Вы сказали

    Я попытался создать нового пользователя, но по-прежнему выдал ту же ошибку

Опять же, только для тестирования / отладки вы можете дать этому пользователю следующую политику и посмотреть, работает ли она

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "iam:*",
    "Resource": "*"
  }
}

Если это проблема, используйте это для определения фактических политик, необходимых для вашего пользователя IAM, который выполняет CloudFormation.

Другие вопросы по тегам