如果 IP 地址不在允许列表中,则拒绝 DynamoDB 访问

问题描述 投票:0回答:1

我正在尝试限制对状态锁管理 DynamoDB 表的访问。 (地形) 我知道 DynamoDB 不支持基于资源的策略,您必须将其设置为角色,但我实际上也不能 100% 确定这一点。

问题是,虽然政策适用性很大,但效果并不明显。可变的细节是完美的。重要的是,我通过设置您在门户中获得的 AW 环境变量,使用短期凭证对 Terraform 进行身份验证,并且我具有管理员访问权限。但是,我知道明确的拒绝总是会覆盖任何允许。

我知道它不起作用,因为我将 IP 变量的值更改为不同的值,并且当 terraform 应用时我仍然能够获取状态锁信息。

json(我也尝试过允许)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "dynamodb:*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": <myip>
                }
            },
            "Effect": "Deny",
            "Resource":<myarn>
        }
    ]
}

这就是使用数据 iam 政策文档的样子

resource "aws_iam_role" "role" {
    name                = "${var.dynamodb_name}-ip-restrict-role"
    assume_role_policy  = data.aws_iam_policy_document.assume_role.json
}


data "aws_iam_policy_document" "assume_role" {
    statement {
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["dynamodb.amazonaws.com"]
    }

    actions = ["sts:AssumeRole"]
    }
}




resource "aws_iam_role_policy" "dynamodb_policy" {
    name   = "${var.dynamodb_name}-ip-restrict-policy"
    policy = data.aws_iam_policy_document.dynamodb_policy_document.json
    role   = aws_iam_role.role.id
}

data "aws_iam_policy_document" "dynamodb_policy_document" {
     statement {
     resources = [aws_dynamodb_table.dynamodb.arn]
     effect    = "Deny"

     actions   = [
      "dynamodb:*"
     ]

     condition {
      test     = "NotIpAddress"
      variable = "aws:SourceIp"
      values   = var.whitelisted_ips_dynamo
       }
      }
   }
amazon-web-services amazon-dynamodb amazon-iam whitelist
1个回答
0
投票

您是对的,DynamoDB 不支持基于资源的权限,允许您限制对某些 IP 地址的访问。

我在我的 IAM 用户上尝试使用此策略进行设置:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "dynamodb:*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "1.1.1.1"
                }
            },
            "Effect": "Deny",
            "Resource": "arn:aws:dynamodb:eu-central-1:123123123:table/demotable"
        }
    ]
}

任何我被成功锁定:

$ aws dynamodb describe-table --table-name demotable

An error occurred (AccessDeniedException) when calling the DescribeTable operation:
User: arn:aws:iam::123123123123:user/myuser is not authorized to perform: 
dynamodb:DescribeTable on resource: arn:aws:dynamodb:eu-central-1:123123123123:table/demotable
with an explicit deny in an identity-based policy

SourceIp
更改为我的实际 IP 允许我描述该表(用户有管理策略)。

$ aws dynamodb describe-table --table-name demotable --output yaml --no-cli-pager
Table:
  AttributeDefinitions:
  - AttributeName: GSI1PK
    AttributeType: S
  - AttributeName: GSI1SK
    AttributeType: S
  - AttributeName: PK
    AttributeType: S
  - AttributeName: SK
# ...

我建议您仔细检查您的 IP 和资源 ARN,除此之外,策略本身看起来不错。

© www.soinside.com 2019 - 2024. All rights reserved.