假设文档,我应该使用这样的策略:
{
"Version": "2017-11-27",
"Statement":[
{
"Effect":"Allow",
"Action": [
"route53:ChangeResourceRecordSets"
],
"Resource": [
"arn:aws:route53:::hostedzone/<ZONE_ID>"
]
]
}
我需要一个非常安全的政策。
我无法在arn中添加特定资源记录集(区域中的一条记录)。
我可以使用Condition
来检查应使用ChangeResourceRecordSets
API调用更改哪条记录。如果我没弄错的话。
这对于自动更新公共域区域中的一条记录是必需的。更新_acme-challenge.ldap.example.com.
记录以自动更新我们的加密证书。我知道acme.sh
可以实现我的目标。但我想编写自己的自定义和简单脚本来执行此操作。
答案 0 :(得分:5)
我可以使用Condition来检查应该使用ChangeResourceRecordSets API调用更改哪条记录。如果我没弄错的话。
我相信你可能会弄错。
Amazon Route 53没有可在IAM策略中使用的特定于服务的[条件]上下文密钥。
http://docs.aws.amazon.com/IAM/latest/UserGuide/list_route53.html
此外,global condition keys似乎都不适用。
但是,我相信这是一个解决方法。
为域_acme-challenge.ldap.example.com
创建第二个公共托管区域。我知道你可能在思考&#34;但那不是一个领域!&#34;但从相关意义上说,它实际上仍然是一个领域。
Route 53将为此新托管区域分配4个新名称服务器。记下这些服务器。
返回原始托管区域,为_acme-challenge.ldap.example.com
类型NS
创建一条记录。用于创建此记录的值将是Route 53分配给新托管区域的4个名称服务器,每行一个。不要更改任何一个区域中的任何现有NS记录。
这称为委托 - 您将此特定子域的权限委派给不同的托管区域,您会注意到该托管区域会自动分配一组完全不同的4路53服务器与处理您的父域的服务器
您现在可以在新托管区域的根目录中创建新记录,当您对_acme-challenge.ldap.example.com
执行DNS查询时,返回的答案将是新托管区域的答案。
现在,您只能授予您的脚本权限以修改新区域中的记录,并且它将无法修改父区域中的任何内容,因为您在那里没有给予任何权限。
答案 1 :(得分:1)
在允许使用脚本启动EC2实例以编程方式添加/删除域的记录集,但安全地限制对特定记录的访问而又不损害example.com的情况下。
创建另一个公共托管区域(无需从任何人那里购买其他域),只需使用 子域,如 delegate.example.com 。复制AWS分配给 delegate.example.com 的名称服务器,例如:
Class ToolMap()
{
friend class std::map;
public (std::map)Object ToolMap()
{
return Object;
}
}
例如,创建的区域是 ZONEABCD
创建域的目标将是 instance-xxx.delegate.example.com example.com
在根example.com下的托管区域中创建NS Type记录集。 并粘贴从 delegate.example.com 复制的4个名称服务器。
您可以使用以下策略创建一个IAM用户(复制脚本的accesskey / secretkey)。将资源限制为创建的arn:aws:route53 ::: hostedzone / {ZONEABCD}。
ns-1143.awsdns-14.org.
ns-1686.awsdns-18.co.uk.
ns-133.awsdns-16.com.
ns-965.awsdns-56.net.
使用名称instance-xxx启动虚拟机,并使用aws-cli运行脚本
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets"
],
"Resource": [
"arn:aws:route53:::hostedzone/{ZONEABCD}"
]
},
{
"Effect": "Allow",
"Action": [
"route53:ListHostedZonesByName"
],
"Resource": [
"*"
]
}
]}
返回instance-xxx.delegate.example.com的{some.ip.v4.address}证明上述方法有效。