Amazon web services 如何创建一个AWS IAM策略,允许或拒绝基于一天中的特定时间,而不是日期?

Amazon web services 如何创建一个AWS IAM策略,允许或拒绝基于一天中的特定时间,而不是日期?,amazon-web-services,time,amazon-iam,Amazon Web Services,Time,Amazon Iam,显示如何基于日期和时间允许或拒绝: "Condition": { "DateGreaterThan" : { "aws:CurrentTime" : "2013-12-15T12:00:00Z" } } 我们希望限制对一天中特定时间的访问,而不指定特定日期。没有任何时间操作符,比如TimeGreaterThan,它允许 "Condition": { "TimeGreaterThan" : { "aws:CurrentTime" : "05:00:00Z"

显示如何基于日期和时间允许或拒绝:

"Condition": {
  "DateGreaterThan" : {
     "aws:CurrentTime" : "2013-12-15T12:00:00Z"
   }
}
我们希望限制对一天中特定时间的访问,而不指定特定日期。没有任何时间操作符,比如TimeGreaterThan,它允许

"Condition": {
  "TimeGreaterThan" : {
     "aws:CurrentTime" : "05:00:00Z"
   },
  "TimeLessThan" : {
     "aws:CurrentTime" : "06:00:00Z"
   }
}
有没有办法使用通配符

"Condition": {
  "DateGreaterThan" : {
     "aws:CurrentTime" : "*T05:00:00Z"
   },
  "DateGreaterThan" : {
     "aws:CurrentTime" : "*T06:00:00Z"
   }
}

我不确定这是否是一个选项,但一个解决方案可能是使用CloudWatch事件触发lambda,每天修改一次策略。这不是一个完美的选择,但它应该可以工作,如果您必须每天更改它,那么此方法可能很有价值。

据我所知,这是不可能的,但是您可以使用aws CLI每天运行一个脚本来更新策略(我知道它有点难看,但它可以工作)

假设策略ARN是
ARN:aws:iam::1234:policy/my policy
(策略ARN在策略编辑页面中查看)

执行下一个脚本:

aws iam获取策略版本--策略arn:aws:iam::1234:policy/my policy--版本id v2

它应该返回如下内容:

 "PolicyVersion": {
     "CreateDate": "2016-09-28T13:04:09Z",
     "VersionId": "v2",
     "Document": {
         "Version": "2012-10-17",
         "Statement": [
             {
                 "Action": "*",
                 "Resource": "*",
                 "Effect": "Allow",
                 "Sid": "...",
                 "condition" : //your time condition
             }
         ]
     },
     "IsDefaultVersion": true
 }
这是为了确保您使用正确的ARN,现在我们也可以修改此策略

编写一个脚本,在所需时间内动态生成json文件,有关nodejs代码示例,请参见example1

然后您只需执行下一个命令:
aws iam创建策略版本--策略arn:aws:iam::1234:策略/我的策略--策略文档file://path_to_generated_json.json --设置为默认值

你还真的更新了今天的政策

创建一个每天都运行此功能的服务

示例1

const fs = require("fs");

const dateBegin = new Date();
dateBegin.setHours(17);
dateBegin.setMinutes(0);
dateBegin.setSeconds(0);
dateBegin.setMilliseconds(0);

const dateEnd = new Date();
dateEnd.setHours(19);
dateEnd.setMinutes(0);
dateEnd.setSeconds(0);
dateEnd.setMilliseconds(0);

const policy = {
    "version" : "2012-10-17",
    "statement" : [
        {
            "condition" : {
                "DateGreaterThan" : {
                    "aws:CurrentTime" : dateBegin.toISOString()
                },
                "DateLessThan" : {
                    "aws:CurrentTime" : dateEnd.toISOString()
                },
                "allow" : "..."
            }
        }
    ]
}

fs.writeFileSync("path_to_file.json",JSON.stringify(policy))

//File Output:
{
  "version": "2012-10-17",
  "statement": [
    {
      "condition": {
        "DateGreaterThan": {
          "aws:CurrentTime": "2017-01-27T15:00:00.000Z"
        },
        "DateLessThan": {
          "aws:CurrentTime": "2017-01-27T17:00:00.000Z"
        },
        "allow": "..."
      }
    }
  ]
}