如何限制IAM用户访问(列出)特定角色和CF堆栈?

时间:2018-07-02 17:45:49

标签: amazon-web-services amazon-cloudformation amazon-iam aws-iam

我已经使用root帐户创建了多个服务角色和CF堆栈,并且我将创建一个IAM用户,并且我不想列出所有这些角色和CF堆栈。我只想显示一些特定的角色和CF堆栈。 您能告诉我该怎么做吗?如果您共享示例政策,那就太好了。

1 个答案:

答案 0 :(得分:2)

无法在控制台中仅显示所有IAM角色的子集。限制iam:ListRoles调用的唯一方法是使用PathPrefix参数(请参见https://docs.aws.amazon.com/IAM/latest/UserGuide/list_identityandaccessmanagement.html)。但是,IAM控制台会发出iam:ListRoles请求,而不指定PathPrefix参数。您仍然可以使用AWS CLI来仅请求IAM角色的一部分,例如:

aws iam list-roles --path-prefix "/somepath"

您可以允许用户列出IAM角色,其路径以/somepath开头,如下所示:

---
AWSTemplateFormatVersion: '2010-09-09'

Resources:
  User:
    Type: AWS::IAM::User
    Properties:
      Path: "/"
      Policies:
      - PolicyName: IamAccess
        PolicyDocument:
          Version: '2012-10-17'
          Statement:
          - Effect: Allow
            Action:
            - 'iam:ListRoles'
            Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/somepath*"

关于仅列出所有CloudFormation堆栈的一个子集,这是不可能的。 ListStacks调用不允许您筛选要列出的堆栈。请参见https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awscloudformation.html。只需将以下代码段添加到上面的代码中,即可让您的用户列出所有CloudFormation堆栈:

      - PolicyName: CloudFormationAccess
        PolicyDocument:
          Version: '2012-10-17'
          Statement:
          - Effect: Allow
            Action:
            - 'cloudformation:ListStacks'
            Resource: '*'

请注意,列出CloudFormation堆栈并不能隐式授予列出这些堆栈的资源或输出的权限。换句话说,用户可能会列出所有堆栈,但无法查看这些堆栈的内容。