仅可信网络/预期网络

通过定义预期网络可以解决以下安全问题:

  • 防止意外泄漏的AKSK从非公司网络访问;

  • 防止意外泄漏的凭证窃取数据;

您可以使用以下 IAM 全局条件键来执行控制目标:

  • aws:SourceIp: 可以使用这个条件设置仅允许从指定的 IP CIDR 段访问。比如使用你们公司的 IP CIDR段限制仅能从办公网络访问。

  • aws:SourceVpc: 可以使用这个条件定义指定的VPCs才能访问。比如,只能从指定的VPC ID访问S3存储桶。

  • aws:SourceVpce: 可以使用这个条件定义指定的 VPC 端点才能访问。增加这个条件可以帮助你限制API请求来自指定的VPC端点。

  • aws:ViaAWSService: 你可以使用这个条件允许AWS service 使用你的安全凭据代表你执行操作。 比如,当你上传文件到 Amazon S3 使用客户端加密,因此,S3 要请求 AWS KMS 生成一个密钥加密对象。

  • aws:PrincipalIsAWSService: 这个条件帮助你实现允许 AWS 服务主体访问你的资源。比如你创建了 AWS CloudTrail trail 并且指定了一个 S3 存储桶作为存放目标,CloudTrail 使用服务主体cloudtrail.amazonaws.com, 推送日志到你的 S3 存储桶。从 CloudTrail 发起的API请求 从服务网络来。

结合标签使用可以设置一些绕过SCP控制的资源,比如请求者添加了标签IpRestrictedExempt:true,则不会受到SCP控制。

简单禁用所有操作可以使用SCP如下, IP段为信任的网络,意思是除了给出的IP段访问过来的请求都会被拒绝:

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Deny",
        "Action": "*",
        "Resource": "*",
        "Condition": {
            "NotIpAddress": {
                "aws:SourceIp": [
                    "192.0.2.0/24",
                    "203.0.113.0/24"
                ]
            }
        }
    }
}

细化部分操作从可信网络访问过来才允许时设置如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "NotAction": [
        "es:ESHttp*",
        "dax:PutItem",
        "dax:Query",
        "dax:Scan",
        "dax:GetItem",
        "dax:DeleteItem",
        "dax:BatchGetItem",
        "dax:BatchWriteItem",
        "dax:ConditionCheckItem",
        "iam:PassRole"
      ],
      "Resource": "*",
      "Condition": {
        "NotIpAddressIfExists": {
          "aws:SourceIp": [
            "<my-corporate-cidr>",
            "203.0.113.0/24"
          ]
        },
        "StringNotEqualsIfExists": {
          "aws:SourceVpc": [
            "vpc-012abc01",
            "vpc-023edf34"
          ]
        },
        "Bool": {
          "aws:ViaAWSService": "false"
        },
        "Null": {
          "aws:PrincipalTag/IpRestrictedExempt": true
        },
        "ArnNotLike": {
          "aws:PrincipalArn": "arn:aws:iam::*:role/aws:ec2-infrastructure"
        }
      }
    }
  ]
}

替换<my-data-bucket>, <my-corporate-cidr>和<my-vpc>为你自己的信息:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "EnforceNetworkPerimeter",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::<my-data-bucket>",
        "arn:aws:s3:::<my-data-bucket>/*"
      ],
      "Condition": {
        "NotIpAddressIfExists": {
          "aws:SourceIp": "<my-corporate-cidr>"
        },
        "StringNotEqualsIfExists": {
          "aws:SourceVpc": "<my-vpc>"
        },
        "BoolIfExists": {
          "aws:PrincipalIsAWSService": "false",
          "aws:ViaAWSService": "false"
        }
      }
    }
  ]
}

参考资料

Establishing a data perimeter on AWS: Allow access to company data only from expected networks

AWS: Denies access to AWS based on the source IP

最后更新于