我创建了一个服务目录产品组合和产品,旨在允许用户启动自己的质量保证环境。我已经为一些用户提供了AWS托管策略"ServiceCatalogEndUserFullAccess"(如下),这样他们就可以启动产品,但他们似乎也需要对模板创建的资源拥有单独的权限(在这种情况下,只有EC2和ELB)。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"catalog-user:*",
"cloudformation:CreateStack",
"cloudformation:DeleteStack",
"cloudformation:DescribeStackEvents",
"cloudformation:DescribeStacks",
"cloudformation:GetTemplateSummary",
"cloudformation:SetStackPolicy",
"cloudformation:ValidateTemplate",
"cloudformation:UpdateStack",
"servicecatalog:DescribeProduct",
"servicecatalog:DescribeProductView",
"servicecatalog:DescribeProvisioningParameters",
"servicecatalog:ListLaunchPaths",
"servicecatalog:ProvisionProduct",
"servicecatalog:SearchProducts",
"s3:GetObject"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"servicecatalog:DescribeRecord",
"servicecatalog:ListRecordHistory",
"servicecatalog:ScanProvisionedProducts",
"servicecatalog:TerminateProvisionedProduct",
"servicecatalog:UpdateProvisionedProduct"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"servicecatalog:userLevel": "self"
}
}
}
]
}
因此,模板在CloudFormation中失败,并返回如下错误:
API:ec2:runInstances - You are not authorized to perform this operation.
理想情况下,我想限制用户仅从服务目录或更具体地说,我们的临时专有网络启动EC2的能力,但从我目前阅读的内容来看,这两种能力似乎都不可能。是否有任何方法可以授予这种级别的细粒度权限,以便用户只能启动他们选择的特定服务目录产品中的资源?
您的策略已授予用户使用服务目录的权限,但这不足以允许他们启动实际资源。
有两种方法可以授予启动资源的权限(例如Amazon EC2):
- 将权限授予IAM用户自己,或者
- 为产品的启动约束分配启动角色
来自应用启动约束文档:
在没有启动限制的情况下,最终用户必须使用自己的IAM凭据启动和管理产品。为此,他们必须拥有AWS CloudFormation、产品使用的AWS服务和AWS服务目录的权限。通过使用启动角色,您可以将最终用户的权限限制为他们所需的最低权限。
因此,创建一个具有启动EC2实例所需权限的启动角色,但仅授予用户从服务目录启动产品所需的最低权限。