【问题标题】:AWS IAM policy to restrict access to specific ec2 instances via ec2-instance-connectAWS IAM 策略通过 ec2-instance-connect 限制对特定 ec2 实例的访问
【发布时间】:2020-07-23 09:50:59
【问题描述】:

我正在创建一个 IAM 策略来授予第三方开发人员访问权限,以便他们可以通过 ec2-instance-connect 连接到私有子网中的 EC2 实例。

开发人员应仅通过 ec2-connect 连接到特定实例。 我该如何实施该政策?

我的政策如下:

AWSTemplateFormatVersion: 2010-09-09
Description: Template for API functionality xxxxx
Metadata:
  'AWS::CloudFormation::Interface':
    ParameterGroups:
      - Label:
          default: Environment basic parameters
        Parameters:
          - Env
          - AccountID
    ParameterLabels:
      Env:
        default: Environment ID
      AccountID:
        default: Account ID
Parameters:
  Env:
    Description: Unique environment.
    Type: String
    Default: lab
  AccountID:
    Description: Account ID.
    Type: String
    Default: 11113333444455
Resources:
  SiteManagementRole:
    Type: 'AWS::IAM::Role'
    Properties:
      RoleName: !Sub 'Role-${Env}'
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Sid: default
            Effect: Allow
            Principal:
              AWS: !Sub 'arn:aws:iam::${AccountID}:root'
            Action: 'sts:AssumeRole'
      Path: /
      Policies:
        - PolicyName: !Sub 'Policy-${Env}'
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Sid: VisualEditor0
                Effect: Allow
                Action:
                  - 'ec2-instance-connect:SendSSHPublicKey'
                Resource: '*'
              - Sid: VisualEditor1
                Effect: Allow
                Action:
                  - 'ec2:DescribeImages'
                  - 'ec2:DescribeInstances'
                  - 'ec2:DescribeTags'
                  - 'ec2:DescribeInstanceAttribute'
                  - 'ec2:DescribeInstanceTypes'
                  - 'ec2:DescribeInstanceStatus'
                Resource: '*'
                # Condition:
                #   StringEquals:
                #     'ec2:ResourceTag/Env': !Sub '${Env}'
              - Sid: VisualEditor2
                Effect: Allow
                Action:
                  - 'logs:ListTagsLogGroup'
                  - 'logs:GetLogRecord'
                  - 'logs:DescribeLogGroups'
                  - 'logs:DescribeLogStreams'
                  - 'logs:StartQuery'
                  - 'logs:StopQuery'
                  - 'logs:TestMetricFilter'
                  - 'logs:GetLogDelivery'
                  - 'logs:GetQueryResults'
                  - 'logs:GetLogEvents'
                  - 'logs:FilterLogEvents'
                  - 'logs:GetLogGroupFields'
                Resource: '*'

我需要根据标签应用访问限制,但应该有更好的方法来限制开发人员连接到特定实例。

这里:

Action:
- 'ec2-instance-connect:SendSSHPublicKey'
Resource: '*' <---I dont want it to be *

请帮忙。

提前致谢

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-cloudformation amazon-iam aws-ec2-instance-connect


    【解决方案1】:

    来自Set Up EC2 Instance Connect - Amazon Elastic Compute Cloud

    {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "ec2-instance-connect:SendSSHPublicKey",
            "Resource": [
                "arn:aws:ec2:region:account-id:instance/i-1234567890abcdef0",
                "arn:aws:ec2:region:account-id:instance/i-0598c7d356eba48d7"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:osuser": "ami-username"
                }
            }
          }
        ]
    }
    

    上述政策将限制对特定实例和特定用户名的访问。我不确定这些实例是否可以通过 Tag 识别。你需要做一些实验。

    【讨论】:

    • 是否可以通过实例连接授予对特定 vpc 实例的访问权限?
    • 您是否在询问如何授予访问任何 EC2 实例的权限是一个特定的 VPC?我想不出办法来做到这一点,因为 VPC 不是通过 SendSSHPublicKey API 调用传递的参数。您可以考虑使用 AWS Systems Manager Session Manager 而不是 EC2 Instance Connect。我知道它可以通过标签限制:Additional sample IAM policies for Session Manager - AWS Systems Manager
    • 非常感谢您的及时回复。我认为您之前为使用 ami-user 提供的解决方案将是最好的解决方案。 ami-user 应事先在实例中创建。我说的对吗?
    • 用户可以选择任意用户。该限制迫使他们只能以该特定(预先创建的)用户身份登录。这可以防止他们获得太多特权(例如,如果他们使用管理员登录)。您可以在所需实例上创建特定用户,然后将它们限制为只能以该用户身份登录(而不是 ec2-user)。
    • 现在我很清楚了。非常非常感谢你。我会实施它,让你知道我发现了什么。再次感谢:)
    猜你喜欢
    • 2019-02-19
    • 2019-08-25
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2021-06-12
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多