自定义资源 cloudformation 的堆栈策略
Posted
技术标签:
【中文标题】自定义资源 cloudformation 的堆栈策略【英文标题】:Stack policy for custom resources cloudformation 【发布时间】:2021-03-09 14:55:51 【问题描述】:我已经定义了这样的 cloudformation 模板:
AWSTemplateFormatVersion: 2010-09-09
Description: Auth stack
Transform: AWS::Serverless-2016-10-31
Parameters:
DeveloperProviderName:
Description: Developer provider name
Type: String
Conditions:
Never:
!Equals [ "true", "false" ]
Resources:
CognitoIdentityPool:
Type: Custom::CognitoIdentityPool
Version: '1.0'
Properties:
IdentityPoolName: !Sub "$AWS::StackName-cognito-idp"
DeveloperProviderName: !Ref DeveloperProviderName
ServiceToken: !GetAtt CreateIdentityPoolFunction.Arn
.
.
more stuff here for the lambda function etc
.
.
那我想加个栈策略,拒绝replace和delete:
"Statement": [
"Effect": "Allow",
"Action": "Update:*",
"Principal": "*",
"Resource": "*"
,
"Effect": "Deny",
"Action": [
"Update:Replace",
"Update:Delete"
],
"Principal": "*",
"Resource": "*",
"Condition":
"StringEquals":
"ResourceType": [
"Custom::CognitoIdentityPool"
]
]
这就是我设置堆栈策略的方式:
aws cloudformation set-stack-policy \
--stack-name $stackName \
--stack-policy-body file://$policyPath
这是我在设置堆栈策略时遇到的错误:
An error occurred (ValidationError) when calling the SetStackPolicy operation: Error validating stack policy: Unknown resource type 'Custom::CognitoIdentityPool' in statement
任何想法如何使用堆栈策略保护这些自定义资源?
【问题讨论】:
【参考方案1】:我认为您不能使用自定义资源。 AWS docs:
指定策略适用的the resource type。要指定特定资源的逻辑 ID,请使用 Resource 元素。
其中“资源类型”是 AWS 提供的资源类型之一。
【讨论】:
据我所知没有解决办法。 @StavrosZavrakas 它的自定义资源,因此您可以对其进行编程以忽略任何删除或更新。但除此之外,我不知道有什么更好的解决方案。以上是关于自定义资源 cloudformation 的堆栈策略的主要内容,如果未能解决你的问题,请参考以下文章
无服务器错误,当自定义命名资源需要替换时,CloudFormation 无法更新堆栈
无法通过自定义 cloudformation 资源调用 lambda 函数
从 lambda 函数中检索 cloudformation 堆栈名称