尽管有政策,CloudFormation 仍无法访问模板中的 SSM 参数
CloudFormation unable to access SSM parameters in template despite policy
我正在尝试部署一个 CloudFormation 模板,该模板使用此博客中描述的方法从 SSM 中提取一些参数-post:https://aws.amazon.com/blogs/mt/integrating-aws-cloudformation-with-aws-systems-manager-parameter-store/
CF 模板参数部分的相关摘录是:
"ZoneName" : {
"Type" : "AWS::SSM::Parameter::Value<String>",
"Description" : "DNS Hostname Zone",
"Default" : "/Deimos/ZoneName"
},
"ZoneId" : {
"Type" : "AWS::SSM::Parameter::Value<String>",
"Description" : "DNS Hostname Zone",
"Default" : "/Deimos/ZoneId"
},
但是,当我尝试部署它时(通过 CodePipeline)出现以下错误:
Action execution failed
AccessDenied. User doesn't have permission to call ssm:GetParameters (Service: AmazonCloudFormation; Status Code: 400; Error Code: ValidationError; Request ID: d6756fbe-fd41-4ac5-93bd-56e5b397445e)
我已经为 CloudFormation 设置了角色和策略,其中包括以下部分以授予对 SSM 中某些参数命名空间的访问权限:
{
"Sid": "XonoticCFFetchParameters",
"Effect": "Allow",
"Action": [
"ssm:GetParameters",
"ssm:GetParameter"
],
"Resource": [
"arn:aws:ssm:*:<aws account #>:parameter/Deimos/*",
"arn:aws:ssm:*:<aws account #>:parameter/Installers/*",
"arn:aws:ssm:*:<aws account #>:parameter/Xonotic/*"
]
},
根据
的使用,这些似乎已经很好地应用了
aws iam simulate-principal-policy --policy-source-arn "arn:aws:iam::<aws account #>:role/Xonotic-CloudFormationDeploy" --action-names "ssm:getParameters" --resource-arns "arn:aws:ssm:*:<aws account #>:parameter/Deimos/ZoneName"
{
"EvaluationResults": [
{
"EvalActionName": "ssm:getParameters",
"EvalResourceName": "arn:aws:ssm:*:<aws account #>:parameter/Deimos/ZoneName",
"EvalDecision": "allowed",
"MatchedStatements": [
{
"SourcePolicyId": "Xonotic-Deployment",
"StartPosition": {
"Line": 3,
"Column": 19
},
"EndPosition": {
"Line": 16,
"Column": 10
}
}
],
"MissingContextValues": []
}
]
}
所以,我正在使用的角色应该具有获取相关参数所需的访问权限,但它不起作用,我没有东西可以检查。
好的 - 所以在这种情况下,事实证明有一个 JSON 参数文件是构建管道的一部分,它用一个无效值覆盖了我的一个参数(它把实际的区域名称在区域名称中)。
修复了这个问题,参数现在可以很好地传递到我的构建过程。
我正在尝试部署一个 CloudFormation 模板,该模板使用此博客中描述的方法从 SSM 中提取一些参数-post:https://aws.amazon.com/blogs/mt/integrating-aws-cloudformation-with-aws-systems-manager-parameter-store/
CF 模板参数部分的相关摘录是:
"ZoneName" : {
"Type" : "AWS::SSM::Parameter::Value<String>",
"Description" : "DNS Hostname Zone",
"Default" : "/Deimos/ZoneName"
},
"ZoneId" : {
"Type" : "AWS::SSM::Parameter::Value<String>",
"Description" : "DNS Hostname Zone",
"Default" : "/Deimos/ZoneId"
},
但是,当我尝试部署它时(通过 CodePipeline)出现以下错误:
Action execution failed
AccessDenied. User doesn't have permission to call ssm:GetParameters (Service: AmazonCloudFormation; Status Code: 400; Error Code: ValidationError; Request ID: d6756fbe-fd41-4ac5-93bd-56e5b397445e)
我已经为 CloudFormation 设置了角色和策略,其中包括以下部分以授予对 SSM 中某些参数命名空间的访问权限:
{
"Sid": "XonoticCFFetchParameters",
"Effect": "Allow",
"Action": [
"ssm:GetParameters",
"ssm:GetParameter"
],
"Resource": [
"arn:aws:ssm:*:<aws account #>:parameter/Deimos/*",
"arn:aws:ssm:*:<aws account #>:parameter/Installers/*",
"arn:aws:ssm:*:<aws account #>:parameter/Xonotic/*"
]
},
根据
的使用,这些似乎已经很好地应用了aws iam simulate-principal-policy --policy-source-arn "arn:aws:iam::<aws account #>:role/Xonotic-CloudFormationDeploy" --action-names "ssm:getParameters" --resource-arns "arn:aws:ssm:*:<aws account #>:parameter/Deimos/ZoneName"
{
"EvaluationResults": [
{
"EvalActionName": "ssm:getParameters",
"EvalResourceName": "arn:aws:ssm:*:<aws account #>:parameter/Deimos/ZoneName",
"EvalDecision": "allowed",
"MatchedStatements": [
{
"SourcePolicyId": "Xonotic-Deployment",
"StartPosition": {
"Line": 3,
"Column": 19
},
"EndPosition": {
"Line": 16,
"Column": 10
}
}
],
"MissingContextValues": []
}
]
}
所以,我正在使用的角色应该具有获取相关参数所需的访问权限,但它不起作用,我没有东西可以检查。
好的 - 所以在这种情况下,事实证明有一个 JSON 参数文件是构建管道的一部分,它用一个无效值覆盖了我的一个参数(它把实际的区域名称在区域名称中)。
修复了这个问题,参数现在可以很好地传递到我的构建过程。