【问题标题】:Obtaining RDS Cluster ResourceID using AWS CDK使用 AWS CDK 获取 RDS 集群 ResourceID
【发布时间】:2021-10-15 16:32:45
【问题描述】:

我有一个 AWS CDK 堆栈,它按顺序执行以下操作:

  1. 创建 Aurora RDS 集群
  2. 为 RDS IAM 身份验证创建 IAM 托管策略

实现第 2 点要求您知道集群 ResourceID,它是作为 described in the documentation 的策略资源的一部分。

政策资源:arn:aws:rds-db:region:account-id:dbuser:DbClusterResourceId/db-user-name

使用 AWS CDK 获取集群 ResourceID 的方法是什么?

顺便说一句,Terraform aws_rds_cluster resource 似乎正在导出cluster_resource_id

【问题讨论】:

    标签: aws-cdk amazon-aurora


    【解决方案1】:

    CDK 是一件很棒的事情,因为它为您完成了所有这些工作。

    您没有说明您的 CDK 使用什么语言,所以我将使用 Python,因为它是我最熟悉的:

    但此示例正确取自 CDK 文档,因此您应该能够根据需要找到适合您语言的版本:

    instance = rds.DatabaseInstance(stack, "Instance",
    engine=rds.DatabaseInstanceEngine.mysql(version=rds.MysqlEngineVersion.VER_8_0_19),
        vpc=vpc,
        iam_authentication=True
    )
    role = Role(stack, "DBRole", assumed_by=AccountPrincipal(stack.account))
    instance.grant_connect(role)
    

    它的 .grant_connect(role) 函数可以满足您的需求,而 cdk 会为您完成所有与资源、arns、主体和幕后无关的策略链接。 (https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_rds/README.html)

    假设两个构造(您的角色和集群)在同一个堆栈中,这只是简单的对象传递和调用与其关联的函数。

    如果它们在不同的堆栈中,它会变得有点困难,但仍然可能。通过将要作为参数添加到集群堆栈的角色公开,或者使用其中一个 from_* 函数将角色/集群导入另一个堆栈。

    【讨论】:

    • 你没看错,问题与语言无关。不幸的是,您的解决方案仅针对单个 RDS 实例,而不是 Aurora 集群。目的是创建托管策略,而不是角色。
    • 您可以使用 aws_iam 库来设置托管策略,而不是将其附加到您的集群。此外,您可以为 DatabaseCluster 切换 DatabaseInstance,并且几乎可以执行与我的解决方案相同的操作。我真的建议你仔细看那个自述页面,因为它特别说:The following examples use a DatabaseInstance, but the same usage is applicable to DatabaseCluster.
    • 您的示例仅适用于 DatabaseInstance 或 DatabaseProxy,但我看不到在不使用 DatabaseProxy 的情况下使用 DatabaseCluster 的方法。此外,grant_connect(IGrantable) 不适用于策略,因此您不能使用 aws_iam 来创建托管策略,您将使用 grant_connect(...) 在其中添加语句。
    • 并且托管策略附加到身份 - 角色或用户。我不相信您甚至可以将资源策略附加到 RDS,但我可能会弄错。鉴于这个 cdk 库不是实验性的,我冒昧地猜测你不能 - 如果可以的话,它会使用 Role 属性来完成。但是,无论如何,此类政策应该针对身份,而不是资源。您甚至会注意到您的文档谈到允许 IAM 用户(身份)访问数据库。资源中的 arn 是数据库集群的 arn,而不是 IAM 角色/用户 - 它最后只有一个用户名
    • 我不记得说过您所描述的内容,将策略分配给资源。为了保持重点,目的是为 RDS IAM Auth 创建托管策略并将其附加到将成为执行角色的角色(例如:ECS 任务角色)。我不想将内联策略分配给角色,也不想使用 DatabaseProxy。在创建这个问题之前,我使用 ECS 任务对其进行了测试,该任务的角色具有允许 RDS IAM Auth 的资源的策略。
    猜你喜欢
    • 2021-01-30
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多