AWS Policy:允许route53托管区域中的更新特定记录

vsk*_*iev 2 amazon-web-services lets-encrypt

假设文档,我应该使用策略,如下所示:

{
   "Version": "2017-11-27",
   "Statement":[
      {   
         "Effect":"Allow",
         "Action": [
           "route53:ChangeResourceRecordSets"
         ],  
         "Resource": [
          "arn:aws:route53:::hostedzone/<ZONE_ID>"
         ]
   ]   
}
Run Code Online (Sandbox Code Playgroud)

我需要一个非常安全的政策.

我无法在arn中添加特定的资源记录集(区域中的一条记录).我可以Condition用来检查应该通过ChangeResourceRecordSetsAPI调用更改哪条记录.如果我没错的话.

这对于自动更新公共域区域中的一条记录是必需的.更新_acme-challenge.ldap.example.com.记录自动更新让我们加密证书.我知道acme.sh可以实现我的目标.但我想编写自己的自定义和简单脚本来执行此操作.

Mar*_*arc 7

截至 2022 年 9 月,这已成为可能: https://aws.amazon.com/about-aws/whats-new/2022/09/amazon-route-53-support-dns-resource-record-set-permissions/

\n
\n

以前,使用 Route 53 的客户只能在托管区域级别指定权限,这为授权用户提供了对托管区域内所有资源记录集的访问权限,但客户无法限制用户仅管理他们所属的资源记录集。负责任的。在今天\xe2\x80\x99s 版本中,您现在可以指定精细的 IAM 策略来控制谁可以在托管区域内创建、编辑或删除单个资源记录集。

\n
\n

他们在以下位置记录了示例政策: https: //docs.aws.amazon.com/Route53/latest/DeveloperGuide/specifying-rrset-conditions.html#route53_rrset_conditionkeys-examples

\n
{\n    "Version": "2012-10-17",\n    "Statement": [\n        {\n            "Effect": "Allow",\n            "Action": "route53:ChangeResourceRecordSets",\n            "Resource": "arn:aws:route53:::hostedzone/Z11111112222222333333",\n            "Condition": {\n                "ForAllValues:StringEquals": {\n                    "route53:ChangeResourceRecordSetsNormalizedRecordNames": [\n                        "example.com",\n                        "marketing.example.com"\n                    ]\n                }\n            }\n        }\n    ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n


Mic*_*bot 5

我可以使用Condition来检查应该使用ChangeResourceRecordSets API调用更改哪条记录.如果我没错的话.

我相信你可能会弄错.

Amazon Route 53没有可在IAM策略中使用的特定于服务的[条件]上下文密钥.

http://docs.aws.amazon.com/IAM/latest/UserGuide/list_route53.html

此外,没有一个全局条件键似乎适用.

但是,我相信这有一个解决方法.

为域创建第二个公共托管区域_acme-challenge.ldap.example.com.我知道你可能在想"但这不是一个领域!" 但从相关意义上说,它实际上仍然是一个领域.

Route 53将为此新托管区域分配4个新名称服务器.记下这些服务器.

返回原始托管区域,创建_acme-challenge.ldap.example.com类型记录NS.用于创建此记录的值将是Route 53分配给新托管区域的4个名称服务器,每行一个.不要更改任何一个区域中的任何现有NS记录.

这称为委托 - 您将此特定子域的权限委派给不同的托管区域,您将注意到该托管区域自动分配了一组与处理父域的服务器完全不同的4路53服务器.

您现在可以在新托管区域的根目录中创建新记录,当您执行DNS查询时_acme-challenge.ldap.example.com,返回的答案将是新托管区域的答案.

现在,您只能授予您的脚本权限以修改新区域中的记录,并且它将无法修改父区域中的任何内容,因为您在那里没有授予任何权限.

  • @BrunoBronosky,当递归解析器尚未缓存目标记录或委托时,确实需要第二次旅行......但这通常是一个次要的考虑因素,特别是在问题中的情况下:*“我需要一个非常安全策略。”* 第二个托管区域甚至不需要位于同一个 AWS 账户中。在具体情况下,这里“acmechallenge”用于验证您获取TLS证书的权限,因此查找只会每隔几天进行一次。我根据你的建议起草了一份编辑,但它太长了,我觉得它会偏离答案。 (2认同)