我正在尝试为自定义管理的策略创建一个CloudFormation模板,每当我运行模板时,它将在我指定的帐户中创建策略。
例如,我有10个AWS账户,我想在我们的主账户中创建一个模板,你只需要输入accountID和JSON, CloudFormation就会为你创建它。这是我到目前为止所做的(不工作)
AWSTemplateFormatVersion: "2010-09-09"
Description: "This cloudformation template will create a managed policy in a perticular account"
#####################
# Define Parameters
#####################
Parameters:
PolicyName:
Type: String
Description: The name that will be applied to the custom policy.
PolicyDescription:
Type: String
Description: Type a description for this policy. This can NOT be changed after initial assignment.
PolicyJson:
Type: Json
Description: Type permission for this policy in JSON format
AccountID:
Type: String
Description: Enter the account ID where you want to create this policy
#####################
# Define Resources
#####################
Resources:
# ---------------------
# Define Policy Resource
# ---------------------
ManagedPolicy:
Type: "AWS::IAM::ManagedPolicy"
Properties:
ManagedPolicyName: !Ref PolicyName
Description: !Ref PolicyDescription
Path: "/"
PolicyDocument: !RefPolicyJson
#####################
# Define Outputs:
#####################
Outputs:
PolicyName:
Description: The name of the newly created managed policy
Value: !Ref PolicyName
问题:
- 不允许将整个JSON对象作为变量传递(模板格式错误:Unrecognized parameter type: JSON)。我想通过资源:参数,但我不知道如何做到这一点,因为权限将根据用例而变化。所以如果可能的话,我想要空框,人们可以给他们自己的JSON权限,我传递它作为一个值。
- 我不确定如何使用accountID。我如何告诉我的模板去到特定的帐户(如参数中定义的),承担这个角色并使用给定的Json 创建这个策略?
我正在按照https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html文档来解决我的问题。
我们希望无论何时有人运行模板,他们都可以提供输入字段,他们可以写策略名称,描述,创建策略的帐户和权限的Json。Cloudformation应该为它们创建它,并返回策略ARN作为输出
你必须在模板的多帐户部署中使用堆栈集:
AWS CloudFormation StackSets通过允许您跨多个帐户创建、更新或删除堆栈来扩展堆栈的功能。和AWS区域。