Kinesis Firehose Delivery Stream не может взять на себя роль при использовании облачной информации - PullRequest
0 голосов
/ 03 октября 2019

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

После некоторых исследований я обнаружил, что Delivery не следует создавать с использованием учетной записи 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 Ответ

0 голосов
/ 03 октября 2019

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

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

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

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

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

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

...