如何通过CloudFormation为AWS Kinesis流添加基于资源的策略
解决Kinesis流通过CloudFormation添加基于资源的策略问题
首先明确:AWS没有AWS::Kinesis::StreamPolicy这个CloudFormation资源类型,你遇到的无效类型提示就是因为这个原因。和Lambda用AWS::Lambda::Permission单独配置资源策略不同,Kinesis流的基于资源的策略需要直接附加在AWS::Kinesis::Stream资源上,通过其Policy属性来配置。
正确的配置方案
方案1:创建Kinesis流时同时附加资源策略
直接在AWS::Kinesis::Stream资源中添加Policy属性,示例如下:
Resources: MyKinesisStream: Type: AWS::Kinesis::Stream Properties: Name: !Ref StreamName ShardCount: 1 Policy: Version: '2012-10-17' Statement: - Sid: StreamWriteStatementID Effect: Allow Principal: AWS: - !Ref SourceAccountNumber - !Sub 'arn:aws:iam::${SourceAccountNumber}:role/${SourceIAMRole}' Action: - 'kinesis:DescribeStreamSummary' - 'kinesis:ListShards' - 'kinesis:PutRecord' - 'kinesis:PutRecords' Resource: !GetAtt MyKinesisStream.Arn
方案2:为已有Kinesis流更新资源策略
如果Kinesis流已经存在,你可以在CloudFormation中引入该流,并更新其Policy属性。注意需保持原有分片数等配置,避免意外修改:
Resources: ExistingKinesisStream: Type: AWS::Kinesis::Stream Properties: Name: ExistingStreamName ShardCount: 1 # 保持原有分片数 Policy: Version: '2012-10-17' Statement: - Sid: StreamWriteStatementID Effect: Allow Principal: AWS: - !Ref SourceAccountNumber - !Sub 'arn:aws:iam::${SourceAccountNumber}:role/${SourceIAMRole}' Action: - 'kinesis:DescribeStreamSummary' - 'kinesis:ListShards' - 'kinesis:PutRecord' - 'kinesis:PutRecords' Resource: !GetAtt ExistingKinesisStream.Arn
关键说明
- 资源策略中的
Resource必须指向当前Kinesis流的ARN,确保权限范围准确。 - 若要允许外部账户的多个主体访问,可在
Principal.AWS下添加多个ARN或账户ID。 - 部署前验证策略语法和权限范围,避免过度授权或权限不足。
内容的提问来源于stack exchange,提问作者Kiran Pabbu
相关产品推荐
相关产品推荐

