Acompanhar recursos da AWS em várias contas da AWS

1

Como posso gerenciar com eficiência os recursos da AWS em várias contas da AWS? Por enquanto, quero:

  • Obtenha uma lista de recursos como EC2, RDS, etc.
  • Executar ações básicas, como reiniciar / iniciar / parar instâncias
  • Programar a interrupção de instâncias após o horário comercial e iniciar durante o horário de expediente - Atualmente, tenho um evento do CloudWatch que aciona a interrupção / início de instâncias

Qual serviço devo explorar? Para todas essas tarefas, eu as implementei com sucesso em 1 conta da AWS.

Eu usei o AWS SDK para obter a lista de recursos e executar ações neles. Mas o desafio é o Lambda, acredito que para fazer isso, eu preciso instalar essas funções e todos os alarmes do CloudWatch para todas as regiões para todas as contas? Existe uma maneira melhor?

As organizações da AWS resolverão esse problema? Minhas contas são atualmente contas-raiz da AWS normais

Estou explorando o uso do CloudFormation para implantar essas funções do Lambda em todas as contas e regiões. Esta é a maneira mais eficaz? Existe uma opção melhor? Algumas regiões não suportam o Lambda, o que significa que o meu acompanhamento funciona apenas para regiões que o suportam.

    
por Jiew Meng 20.06.2017 / 05:57

1 resposta

2

Você pode tentar delegar acesso a várias contas da AWS usando papéis do IAM. Vamos supor que você tenha uma função lambda que interrompe / inicia instâncias do EC2 após / durante o horário de expediente. Isso significa que você pode ter implantado o lambda em uma conta master (sua 1 conta da AWS ) e chamar APIs da AWS em outras contas managed . Na conta master , você implantou a função e sua função de execução master do IAM. Essa função permite que a função assuma outra managed role implantada em managed accounts para chamar as respectivas APIs da AWS, por exemplo, boto3 ec2 client stop_instances ou start_instances methods. A função managed do IAM permite chamar APIs da AWS na conta managed e é compreendida pela função.

Exemplos importantes dos papéis do IAM (fragmentos do AWS CloudFormation):

    "MasterRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "RoleName": "master_role",
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "Path": "/",
        "Policies": [
          {
            "PolicyName": "master_assume_policy",
            "PolicyDocument": {
              "Version": "2012-10-17",
              "Statement": [
                {
                  "Effect": "Allow",
                  "Action": [
                    "sts:AssumeRole"
                  ],
                  "Resource": [
                    "*"
                  ]
                }

              ]
            }
          },
          ...

.

    "AccountRole": {
        "Type": "AWS::IAM::Role",
        "Properties": {
            "RoleName": "managed_role",
            "AssumeRolePolicyDocument": {
                "Version": "2012-10-17",
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Principal": {
                            "AWS": ">>> ARN_OF_MASTER_ROLE <<<"
                        },
                        "Action": "sts:AssumeRole"
                    }
                ]
            },
            "Path": "/",
            "Policies": [
                {
                    "PolicyName": "managed_ec2_policy",
                    "PolicyDocument": {
                        "Version": "2012-10-17",
                        "Statement": [
                            {
                                "Action": [
                                    "ec2:StopInstances",
                                    "ec2:StartInstances",
            ...

Você também precisa mudar para a função managed do IAM chamando AssumeRole API da função lambda. Existe uma documentação disponível descrevendo este procedimento. Em resumo, você precisa assumir a função managed do IAM por meio do STS, que retornará as credenciais necessárias para chamar a API.

Aqui estão mais alguns links que podem ajudar você a entender a delegação de várias contas do IAM:

Delegar acesso a contas da AWS usando as funções do IAM

Criando uma função para delegar permissões

Com relação às organizações da AWS, acho que ele pode ajudar você a gerenciar managed contas de maneira mais central. Você pode criar políticas de SCPs ou de controle de serviço que controlam centralmente o nível de acesso aos serviços da AWS em managed accounts. A política especifica os serviços e ações que os usuários e funções podem usar nas contas. Você também pode automatizar a criação de contas managed da AWS com o CloudFormation e configurá-lo conforme necessário. Isso pode incluir a criação de usuários, funções, políticas etc. do IAM. Há um artigo interessante sobre isso disponível no blog da AWS:

AWS Organizations - gerenciamento baseado em políticas para várias contas da AWS

    
por 20.06.2017 / 14:04