AWS Policy:允许route53托管区域

时间:2017-11-28 09:03:07

标签: amazon-web-services lets-encrypt

假设文档,我应该使用这样的策略:

{
   "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可以实现我的目标。但我想编写自己的自定义和简单脚本来执行此操作。

2 个答案:

答案 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记录集。 Create a record set of type NS并粘贴从 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}证明上述方法有效。