我正在尝试限制对状态锁管理 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
}
}
}
您是对的,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,除此之外,策略本身看起来不错。