Regras e Extensão de Funcionalidades

Configuração das chaves de acesso

343 views 22/11/2019 20/01/2020 lucas-schepers 2

Para que seja possível configurar o ambiente é necessário garantir que as chaves de acesso ao provedor cloud já estejam devidamente configuradas. Por padrão a plataforma Senior X já está configurada com as chaves da conta de customização da Senior, no entanto, existe a possibilidade de sobrescrever as chaves de acesso.

Alterar as Configurações do tenant

Navegar para Tecnologia > Configuração > Por tenant, e procurar os campos destinados às chaves de configuração ao provedor cloud:

As regiões atualmente suportadas pelo SDK são:

  • US East (N. Virginia)
  • US East (Ohio)
  • US West (Oregon)
  • Asia Pacific (Singapore)
  • Asia Pacific (Tokyo)
  • EU (Frankfurt)
  • EU (Ireland)

Após preencher as informações, basta clicar em Salvar e aguardar a notificação de sucesso.

Permissões Chave de Acesso

As chaves de acesso configuradas precisam de permissões específicas, com estas permissões o serviço está habilitado a configurar todo o ambiente na AWS.
Segue abaixo as permissões, que devem ser aplicadas através de um política de acesso, que o usuário dono das chaves deve possuir:

AWSLambdaFullAccess
Trata-se de uma policy default disponibilizada pela AWS.

customizationIAMPolicy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceSpecificCredential",
                "iam:DeleteAccessKey",
                "iam:ListRoleTags",
                "iam:ListServiceSpecificCredentials",
                "iam:PutRolePolicy",
                "iam:ListSigningCertificates",
                "iam:UploadSSHPublicKey",
                "iam:DetachGroupPolicy",
                "iam:ListRolePolicies",
                "iam:DeleteOpenIDConnectProvider",
                "iam:PutGroupPolicy",
                "iam:UpdateServiceSpecificCredential",
                "iam:GetRole",
                "iam:GetPolicy",
                "iam:RemoveClientIDFromOpenIDConnectProvider",
                "iam:ListEntitiesForPolicy",
                "iam:DeleteRole",
                "iam:UpdateRoleDescription",
                "iam:UpdateServerCertificate",
                "iam:GetOpenIDConnectProvider",
                "iam:GetRolePolicy",
                "iam:CreateInstanceProfile",
                "iam:UntagRole",
                "iam:PutRolePermissionsBoundary",
                "iam:TagRole",
                "iam:ResetServiceSpecificCredential",
                "iam:DeleteRolePermissionsBoundary",
                "iam:GetServiceLinkedRoleDeletionStatus",
                "iam:ListInstanceProfilesForRole",
                "iam:DeleteRolePolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListAccessKeys",
                "iam:DeleteInstanceProfile",
                "iam:ListGroupPolicies",
                "iam:GetSSHPublicKey",
                "iam:PutUserPermissionsBoundary",
                "iam:DeleteUser",
                "iam:DeleteUserPermissionsBoundary",
                "iam:CreatePolicy",
                "iam:CreateServiceLinkedRole",
                "iam:AttachGroupPolicy",
                "iam:PutUserPolicy",
                "iam:UpdateRole",
                "iam:GetUser",
                "iam:GetLoginProfile",
                "iam:SetDefaultPolicyVersion",
                "iam:UpdateAssumeRolePolicy",
                "iam:GetPolicyVersion",
                "iam:DeleteGroup",
                "iam:RemoveRoleFromInstanceProfile",
                "iam:UpdateGroup",
                "iam:CreateRole",
                "iam:AttachRolePolicy",
                "iam:CreateLoginProfile",
                "iam:ListSSHPublicKeys",
                "iam:DetachRolePolicy",
                "iam:SimulatePrincipalPolicy",
                "iam:ListAttachedRolePolicies",
                "iam:DetachUserPolicy",
                "iam:ChangePassword",
                "iam:UpdateLoginProfile",
                "iam:GetServerCertificate",
                "iam:CreateGroup",
                "iam:UpdateUser",
                "iam:GetAccessKeyLastUsed",
                "iam:DeleteUserPolicy",
                "iam:AttachUserPolicy",
                "iam:UpdateAccessKey",
                "iam:UpdateSSHPublicKey",
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:GetGroupPolicy",
                "iam:DeleteSSHPublicKey",
                "iam:DeletePolicy",
                "iam:ListMFADevices",
                "iam:CreateUser",
                "iam:GetGroup",
                "iam:CreateAccessKey",
                "iam:GetContextKeysForPrincipalPolicy",
                "iam:AddUserToGroup",
                "iam:RemoveUserFromGroup",
                "iam:GenerateOrganizationsAccessReport",
                "iam:ListAttachedUserPolicies",
                "iam:CreatePolicyVersion",
                "iam:GetSAMLProvider",
                "iam:DeleteLoginProfile",
                "iam:UploadSigningCertificate",
                "iam:GetInstanceProfile",
                "iam:ListUserPolicies",
                "iam:ListInstanceProfiles",
                "iam:TagUser",
                "iam:CreateOpenIDConnectProvider",
                "iam:UploadServerCertificate",
                "iam:UntagUser",
                "iam:ListPolicyVersions",
                "iam:UpdateSigningCertificate",
                "iam:DeleteGroupPolicy",
                "iam:DeletePolicyVersion",
                "iam:ListUserTags"
            ],
            "Resource": [
                "arn:aws:iam::*:saml-provider/*",
                "arn:aws:iam::*:policy/*",
                "arn:aws:iam::*:oidc-provider/*",
                "arn:aws:iam::*:instance-profile/*",
                "arn:aws:iam::*:user/*",
                "arn:aws:iam::*:role/*",
                "arn:aws:iam::*:server-certificate/*",
                "arn:aws:iam::*:access-report/*",
                "arn:aws:iam::*:group/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "iam:GenerateCredentialReport",
                "iam:GetAccountPasswordPolicy",
                "iam:GetServiceLastAccessedDetailsWithEntities",
                "iam:ListServerCertificates",
                "iam:GenerateServiceLastAccessedDetails",
                "iam:ListPoliciesGrantingServiceAccess",
                "iam:GetServiceLastAccessedDetails",
                "iam:ListVirtualMFADevices",
                "iam:GetOrganizationsAccessReport",
                "iam:SimulateCustomPolicy",
                "iam:CreateAccountAlias",
                "iam:DeleteAccountAlias",
                "iam:GetAccountAuthorizationDetails",
                "iam:GetCredentialReport",
                "iam:ListPolicies",
                "iam:DeleteAccountPasswordPolicy",
                "iam:ListSAMLProviders",
                "iam:ListRoles",
                "iam:GetContextKeysForCustomPolicy",
                "iam:ListOpenIDConnectProviders",
                "iam:UpdateAccountPasswordPolicy",
                "iam:ListAccountAliases",
                "iam:ListUsers",
                "iam:ListGroups",
                "iam:GetAccountSummary"
            ],
            "Resource": "*"
        }
    ]
}

customizationApiGatewayPolicy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "apigateway:*",
            "Resource": "arn:aws:apigateway:*::*"
        }
    ]
}

customizationFSCloud9InstancePolicy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1569933230414",
            "Action": [
                "ec2:AttachVolume",
                "ec2:CreateKeyPair",
                "ec2:DescribeInstanceAttribute",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstances",
                "ec2:DescribeVolumeStatus",
                "ec2:DescribeVolumes",
                "ec2:DetachVolume",
                "ec2:RunInstances",
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

customizationCloud9InstancePolicy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:*",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringLike": {
                    "aws:RequestTag/aws:cloudformation:stack-name": "aws-cloud9"
                }
            }
        }
    ]
}

Permissão para a execução das funções

A role seniorx@custom-lambda-execution deve conter as permissões necessárias ao executar funções provisionadas, estas permissões devem estar de acordo com as necessidades das regras executadas pelas funções podendo existir casos de nenhuma permissão precisar ser adicionada pois as regras não acessam outros serviços AWS.
Em cenários onde a função acessa algum recurso do provedor de nuvem as permissões são necessárias, alguns cenários comuns que necessitam permissão envolvem acesso ao SQS, DynamoDB e SNS, por exemplo.

Permissão função de autorização

Para verificar a autorização das chamadas às funções um authorizer foi criado, este autorizador precisa de permissão de leitura das Api Key do Api Gateway.
As permissões do authorizer devem ser adicionadas na role seniorx@authorizer-execution.

Este artigo foi útil para você?