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": "..."
}
}
]
}