amazon-web-services - 如何在我的新 CloudFormation 模板中引用现有角色?
问题描述
在我的 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”)并使用 Roles 参数将策略附加到它们。但是,在尝试部署 CloudFormation 模板时,我不断收到“无法检索外部值”错误...我尝试输入角色名称“CloudOps”作为参数“默认”,并且我已经还尝试在那里输入角色 ARN ......没有任何效果。
解决方案
并非所有 AWS 资源类型都在参数type
字段中受支持。
完整列表位于AWS-Specific Parameter Types。它包括,例如:
- AWS::EC2::VPC::Id
- 列表<AWS::EC2::VPC::Id>
- AWS::SSM::Parameter::Name
此列表不包括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"
}
]
}
}
}
}
推荐阅读
- c# - 如何在搜索/过滤数据期间处理空字段?
- c - 在 C 中 malloc 后调用 free() 时出现无效指针错误
- java - 获取数据存储时间
- html - 我不想将 CSS 类的属性应用于列表中的元素
- javascript - 如何使用另一个对象访问 JavaScript 对象?
- php - 升级 Wordpress 5.0.3 后,Woocommerce 订单未全部显示
- python - 如何创建具有不同长度的数组系列的 DataFrame(某些部分中缺少数据)
- docker - 读取外部容器 Docker
- python - 从矩阵中获取轴
- node.js - 我自己的 TypeScript 模块的“找不到模块”