在我的AWS帐户中,我正在构建一个创建新策略的新Cloudformation模板,并且我希望将这些策略附加到帐户中的一些现有角色中。以下是我一直试图引用它们的方法:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Names of existing roles to which the restrictive policies need added",
"Parameters": {
"AdditionalExecutionRoleParameter": {
"Type": "AWS::IAM::Role",
"Default": "CloudOps"
}
},
"Resources": { (and so on)然后,在新策略下面的一节中,我一直试图引用这些现有角色(在本例中为“AdditionalExecutionRoleParameter”),并使用角色参数将策略附加到它们。但是,当我试图部署CloudFormation模板时,我一直收到一个“无法检索外部值”的错误.我尝试输入"CloudOps",这是角色名,作为参数“默认”,我也尝试输入角色ARN .什么都没起作用。
发布于 2020-08-29 16:13:52
好吧..。我最后做的是这么简单的事情,很好.
"Parameters": {
"RoleNameRoleParameter": {
"Type": "String",
"Default": "RoleNameRole"发布于 2020-04-01 00:32:48
参数type字段中并不支持所有AWS资源类型。
完整的列表在AWS-特定参数类型。例如,它包括:
此列表不包括AWS::IAM::Role (或任何IAM资源)。
如果您只是试图将一个新的IAM策略与一个现有的名为IAM角色相关联,那么请注意,AWS::IAM::Policy构造有一个Roles属性,您应该提供要应用该策略的角色名称列表。它需要角色名称,而不是角色ARN,所以您不需要帐户ID。
如果您确实需要帐户ID,那么它可以作为伪参数使用,并且您可以从"Ref" : "AWS::AccountId"获得它,但我认为这里不需要它。
下面是一个JSON示例,说明如何创建新的IAM策略(允许s3:Get* on mybucket/*)并将其与现有的IAM角色关联,您将其名称作为参数提供给堆栈:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Add policy to role test",
"Parameters": {
"TheRoleName": {
"Type": "String",
"Default": "CloudOps",
"Description": "Name of role to associate policy with"
}
},
"Resources": {
"ThePolicy": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyName": "s3-read",
"PolicyDocument": {
"Statement": {
"Effect": "Allow",
"Action": [
"s3:Get*"
],
"Resource": ["arn:aws:s3:::mybucket/*"]
}
},
"Roles": [
{
"Ref": "TheRoleName"
}
]
}
}
}
}https://stackoverflow.com/questions/60961834
复制相似问题