доступ к динамической учетной записи AWS с ролью IAM - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть экземпляр aws ecs ec2 в одной учетной записи, и он пытается получить доступ к таблицам динамической базы данных в другой учетной записи aws.Я не использую какой-либо ключ доступа aws и идентификатор, вместо этого я использую роль AWS iam, прикрепленную к экземпляру ec2.

Это проект .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» >> это учетная запись 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 пытается подключиться к таблице в той же учетной записи.Я добавил другую учетную запись aws в доверенную сущность в роли ecsInstanceRole, которая все еще не работает.

Есть ли способ, чтобы экземпляр aws sdk или aws ecs / ec2 автоматически находил таблицу dynamicodb в другой учетной записи aws?

1 Ответ

0 голосов
/ 24 апреля 2019

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

В обеих учетных записях потребуется политика ролей для ec2, а также политика доверия, позволяющая службе EC2 выполнять эти роли.Политика ролей в учетной записи-получателе будет предоставлять разрешения IAM для таблицы Dynamodb.

Тогда экземпляр Source 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"
        }
      ]
    }

Предоставление доступа к ролиDynamodb с именем ACCESS_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"}
        }
    ]
}
...