【问题标题】:aws cross account dynamodb access with IAM role具有 IAM 角色的 aws 跨账户 dynamodb 访问
【发布时间】:2019-09-13 12:34:29
【问题描述】:

我在一个帐户中有一个 aws ecs ec2 实例,它正在尝试访问另一个 aws 帐户上的 dynamob 数据库表。我没有使用任何 aws 访问密钥和 ID,而是使用附加到 ec2 实例的 AWS iam 角色。

这是一个 .net 项目,我的 appsettings.Staging.json 就是这个。

{
  "aws": {
    "region": "ap-southeast-1"
  },
  "DynamoDbTables": {
    "BenefitCategory": "stag_table1",
    "Benefit": "stag_table2"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

这是我附加到“ecsInstanceRole”的内联策略

"xxxxxxxxxxxxx" >> 这是 dynamodb 表所在的 aws 帐户。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:DescribeTable",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteTable",
                "dynamodb:UpdateTable",
                "dynamodb:GetRecords"
            ],
            "Resource": [
                "arn:aws:dynamodb:ap-southeast-1:xxxxxxxxxxx:table/stag_table1",
                "arn:aws:dynamodb:ap-southeast-1:xxxxxxxxxxx:table/stag_table2",
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "dynamodb:ListGlobalTables",
                "dynamodb:ListTables"
            ],
            "Resource": "*"
        }
    ]
}

在此设置中,api 正在尝试连接到同一帐户中的表。我已在角色 ecsInstanceRole 中的受信任实体中添加了其他 aws 帐户,但仍然无法正常工作。

aws sdk 或 aws ecs/ec2 实例有没有办法自动在另一个 aws 帐户中找到 dynamodb 表?

【问题讨论】:

    标签: amazon-dynamodb aws-sdk amazon-iam amazon-ecs aws-sdk-net


    【解决方案1】:

    https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html

    两个账户都需要一个 ec2 角色策略,以及一个允许 EC2 服务代入这些角色的信任策略。目标账户中的角色策略将授予 IAM 对 Dynamodb 表的权限。

    然后源 EC2 实例将必须承担该角色才能访问表。

    授予 EC2 服务器访问权限以代入该角色

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "abcdTrustPolicy",
                "Effect": "Allow",
                "Action": "sts:AssumeRole",
                "Principal": {"AWS": "arn:aws:iam::SOURCE_ACCOUNT_ID:role/NAME_A"}
            }
        ]
    }
    

    允许 NAME_A 实例配置文件角色切换到另一个帐户中的角色

        {
          "Version": "2012-10-17",
          "Statement": [
           {
             "Sid": "AllowToAssumeCrossAccountRole",
             "Effect": "Allow",
             "Action": "sts:AssumeRole",
             "Resource": "arn:aws:iam::DESTINATION_ACCOUNT_ID:role/ACCESS_DYNAMODB"
            }
          ]
        }
    

    授予访问名为 ACCESS_DYNAMODB 的 Dynamodb 的角色

        {
           "Version": "2012-10-17",
           "Statement": [
              {
                  "Sid": "AllowDDBActions",
                  "Effect": "Allow",
                  "Action": [
                    "dynamodb:*"
                  ],
                 "Resource": "*"
              }
           ]
        }
    

    目标中的信任策略

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "DestinationTrustPolicy",
                "Effect": "Allow",
                "Action": "sts:AssumeRole",
                "Principal": {"Service": "ec2.amazonaws.com"}
            }
        ]
    }
    

    【讨论】:

    • 谢谢,我正在调查。有点困惑第一个和最后两个策略是在目标 aws 帐户下添加的。即仅具有 dynamodb 表和第二个策略的帐户将添加到具有 aws ecs ec2 实例的源 aws 帐户中吗?
    • 我们是否也应该在 .net 代码中使用提及目标 aws 帐号?
    • @sandeepkrishna 你明白了吗?我想知道你是否必须修改你的代码才能首先承担这个角色?谢谢。
    • @void 我没有时间检查它。我将整个开发环境移至新的 aws 帐户,因此现在不需要跨帐户 dynamodb。但我想它应该可以工作。
    猜你喜欢
    • 2017-03-16
    • 2020-07-01
    • 1970-01-01
    • 2017-10-01
    • 2021-04-25
    • 2015-07-11
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多