Segurança no AWS AppConfig
A segurança para com a nuvem na AWS é a nossa maior prioridade. Como cliente da AWS, você se beneficiará de um data center e de uma arquitetura de rede criados para atender aos requisitos das empresas com as maiores exigências de segurança.
A segurança é uma responsabilidade compartilhada entre a AWS e você. O Modelo de Responsabilidade Compartilhada
-
Segurança da nuvem: a AWS é responsável pela proteção da infraestrutura que executa os serviços da AWS na Nuvem AWS. A AWS também fornece serviços que podem ser usados com segurança. Auditores de terceiros testam e verificam regularmente a eficácia da nossa segurança como parte dos Programas de conformidade da AWS
. Para saber mais sobre os programas de conformidade que se aplicam ao AWS Systems Manager, consulte Serviços da AWS em escopo por programa de conformidade . -
Segurança na nuvem: sua responsabilidade é determinada pelo serviço da AWS que você usa. Você também é responsável por outros fatores, incluindo a confidencialidade de seus dados, os requisitos da empresa e as leis e regulamentos aplicáveis.
AWS AppConfig O é uma ferramenta do AWS Systems Manager. Para entender como aplicar o modelo de responsabilidade compartilhada ao usar o AWS AppConfig, consulte Segurança em AWS Systems Manager. Essa seção descreve como configurar o Systems Manager para atingir os objetivos de segurança e conformidade do AWS AppConfig.
Implemente o privilégio de acesso mínimo
Como prática recomendada de segurança, conceda o mínimo de permissões de que as identidades precisam para realizar ações em recursos específicos e em determinadas condições. O AWS AppConfig Agent oferece dois recursos que permitem que ele acesse o sistema de arquivos de uma instância ou um contêiner: backup e gravação em disco. Se você habilitar esses recursos, verifique se somente o AWS AppConfig Agent tem permissões para gravar nos arquivos de configuração designados no sistema de arquivos. Verifique também se somente os processos necessários para ler esses arquivos de configuração têm a capacidade de fazer isso. A implementação do acesso de privilégio mínimo é fundamental para reduzir o risco de segurança e o impacto que pode resultar de erros ou usuários mal-intencionados.
Para ter mais informações sobre como implementar o acesso de privilégio mínimo, consulte SEC03-BP02 Conceder acesso com privilégio mínimo no Guia do usuário do AWS Well-Architected Tool. Para ter mais informações sobre os recursos do AWS AppConfig Agent mencionados nesta seção, consulte Usar um manifesto para habilitar recursos de recuperação adicionais.
Criptografia de dados em repouso no AWS AppConfig
O AWS AppConfig fornece criptografia por padrão para proteger os dados em repouso do cliente usando Chaves pertencentes à AWS.
Chaves pertencentes à AWS: o AWS AppConfig usa essas chaves por padrão para criptografar automaticamente os dados implantados pelo serviço e hospedados no armazenamento de dados do AWS AppConfig. Você não pode visualizar, gerenciar ou usar Chaves pertencentes à AWS, nem auditar seu uso. No entanto, não é necessário realizar nenhuma ação nem alterar qualquer programa para proteger as chaves que criptografam seus dados. Para obter mais informações, consulte Chaves pertencentes à AWS no Guia do desenvolvedor do AWS Key Management Service.
Embora não seja possível desativar essa camada de criptografia nem selecionar um tipo alternativo de criptografia, você pode especificar uma chave gerenciada pelo cliente a ser usada ao salvar dados de configuração hospedados no armazenamento de dados do AWS AppConfig e ao implantar seus dados de configuração.
Chaves gerenciadas pelo cliente: o AWS AppConfig suporta o uso de uma chave simétrica gerenciada pelo cliente que você cria, possui e gerencia para adicionar uma segunda camada de criptografia sobre o Chave pertencente à AWS existente. Por ter controle total dessa camada de criptografia, você pode realizar tarefas como:
-
Estabelecer e manter as políticas e concessões de chaves
-
Estabelecer e manter políticas do IAM
-
Ativar e desativar políticas de chaves
-
Alternar os materiais de criptografia de chave
-
Adicionar etiquetas
-
Criar réplicas de chaves
-
Programar chaves para exclusão
Para obter mais informações, consulte Chave gerenciada pelo cliente no Guia do desenvolvedor do AWS Key Management Service.
AWS AppConfig O suporta chaves gerenciadas pelo cliente
O AWS AppConfig oferece suporte para criptografia de chaves gerenciadas pelo cliente para dados de configuração. Para versões de configuração salvas no armazenamento de dados hospedado pelo AWS AppConfig, os clientes podem definir um KmsKeyIdentifier no perfil de configuração correspondente. Cada vez que uma nova versão de dados de configuração é criada usando a operação CreateHostedConfigurationVersion da API, o AWS AppConfig gera uma chave de dados AWS KMS a partir de KmsKeyIdentifier para criptografar os dados antes de armazená-los. Quando os dados são acessados posteriormente, seja durante as operações GetHostedConfigurationVersion ou StartDeployment da API, o AWS AppConfig descriptografa os dados de configuração usando informações sobre a chave de dados gerada.
O AWS AppConfig também oferece suporte para criptografia de chaves gerenciadas pelo cliente para dados de configuração implantados. Para criptografar os dados de configuração, os clientes podem fornecer um KmsKeyIdentifier para sua implantação. O AWS AppConfig gera a chave de dados AWS KMS com esse KmsKeyIdentifier para criptografar dados na operação StartDeployment da API.
AWS AppConfig Acesso à criptografia do
Ao criar uma chave gerenciada pelo cliente, siga esta política de chaves para garantir que a chave possa ser usada.
Para criptografar dados de configuração hospedados com uma chave gerenciada pelo cliente, a chamada de identidade CreateHostedConfigurationVersion precisa da seguinte declaração de política, que pode ser atribuída a um usuário, grupo ou função:
Se estiver usando um segredo do Secrets Manager ou qualquer outro dado de configuração criptografado com uma chave gerenciada pelo cliente, o retrievalRoleArn precisará de kms:Decrypt para descriptografar e recuperar os dados.
Ao chamar a operação StartDeployment da API do AWS AppConfig, a chamada de identidade StartDeployment precisa da seguinte política do IAM, que pode ser atribuída a um usuário, grupo ou função:
Ao chamar a operação GetLatestConfiguration da API do AWS AppConfig, a chamada de identidade GetLatestConfiguration precisa da seguinte política, que pode ser atribuída a um usuário, grupo ou função:
Contexto de criptografia
Um contexto de criptografia é um conjunto opcional de pares chave-valor que pode conter informações contextuais adicionais sobre os dados.
AWS KMSO usa o contexto de criptografia como dados autenticados adicionais para viabilizar a criptografia autenticada. Quando você inclui um contexto de criptografia em uma solicitação para criptografar dados, o AWS KMS vincula de forma criptográfica o contexto da criptografia aos dados criptografados. Para descriptografar os dados, você inclui o mesmo contexto de criptografia na solicitação.
Contexto de criptografia do AWS AppConfig: o AWS AppConfig usa um contexto de criptografia em todas as operações criptográficas de AWS KMS para dados de configuração hospedados criptografados e implantações. O contexto contém uma chave correspondente ao tipo de dados e um valor que identifica o dado específico.
Monitoramento das chaves de criptografia da AWS
Ao usar chaves gerenciadas pelo cliente do AWS KMS com o AWS AppConfig, você pode usar AWS CloudTrail ou Amazon CloudWatch Logs para rastrear as solicitações que o AWS AppConfig envia para o AWS KMS.
O exemplo a seguir é um evento do CloudTrail para o Decrypt monitorar operações do AWS KMS chamadas por AWS AppConfig para acessar dados criptografados pela chave gerenciada pelo cliente:
{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "appconfig.amazonaws.com" }, "eventTime": "2023-01-03T02:22:28z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "Region", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "encryptionContext": { "aws:appconfig:deployment:arn": "arn:aws:appconfig:Region:account_ID:application/application_ID/environment/environment_ID/deployment/deployment_ID" }, "keyId": "arn:aws:kms:Region:account_ID:key/key_ID", "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "account_ID", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:Region:account_ID:key_ID" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "account_ID", "sharedEventID": "dc129381-1d94-49bd-b522-f56a3482d088" }
Acessar o AWS AppConfig usando um endpoint de interface (AWS PrivateLink)
É possível usar o AWS PrivateLink para criar uma conectividade privada entre a sua VPC e o AWS AppConfig. Você pode acessar o AWS AppConfig como se estivesse em sua VPC, sem usar um gateway da Internet, um dispositivo NAT, uma conexão VPN ou uma conexão Direct Connect. As instâncias na sua VPC não precisam de endereços IP públicos para acessar o AWS AppConfig.
Você estabelece essa conectividade privada criando um endpoint de interface, desenvolvido pelo AWS PrivateLink. Criaremos um endpoint de interface de rede em cada sub-rede que você habilitar para o endpoint de interface. Estas são interfaces de rede gerenciadas pelo solicitante que servem como ponto de entrada para o tráfego destinado ao AWS AppConfig.
Para obter mais informações, consulte Acessar os Serviços da AWS pelo AWS PrivateLink no Guia do AWS PrivateLink.
Considerações para o AWS AppConfig
Antes de configurar um endpoint de interface para o AWS AppConfig, revise as Considerações no Guia do AWS PrivateLink.
O AWS AppConfig aceita a realização de chamadas para os serviços appconfig e appconfigdata por meio do endpoint de interface.
Criar um endpoint de interface para AWS AppConfig
Você pode criar um endpoint de interface para AWS AppConfig usando o console da Amazon VPC ou o AWS Command Line Interface (AWS CLI). Para obter mais informações, consulte Criando um Endpoint de InterfaceAWS PrivateLink no Guia.
Crie um endpoint para o AWS AppConfig usando o seguinte nome de serviço:
com.amazonaws.region.appconfig
com.amazonaws.region.appconfigdata
Se você habilitar o DNS privado para o endpoint da interface, poderá fazer solicitações de API a AWS AppConfig usando seu nome DNS regional padrão. Por exemplo, appconfig.us-east-1.amazonaws.com e appconfigdata.us-east-1.amazonaws.com.
Criar uma política de endpoint para o endpoint de interface
Uma política de endpoint é um recurso do IAM que você pode anexar ao endpoint de interface. A política de endpoint padrão permite acesso total ao AWS AppConfig por meio de endpoint de interface. Para controlar o acesso permitido ao AWS AppConfig pela VPC, anexe uma política de endpoint personalizada ao endpoint de interface.
Uma política de endpoint especifica as seguintes informações:
-
As entidades principais que podem realizar ações (Contas da AWS, usuários do IAM e perfis do IAM).
-
As ações que podem ser executadas.
-
Os recursos nos quais as ações podem ser executadas.
Para obter mais informações, consulte Controlar o Acesso a Serviços Usando Políticas de Endpoint no AWS PrivateLink Guia.
Exemplo: política de endpoint da VPC para ações do AWS AppConfig
O exemplo a seguir refere-se a uma política de endpoint personalizada. Quando anexada ao endpoint da sua interface, essa política concede acesso às ações do AWS AppConfig listadas para todas as entidades principais em todos os recursos.
{ "Statement": [ { "Principal": "*", "Effect": "Allow", "Action": [ "appconfig:CreateApplication", "appconfig:CreateEnvironment", "appconfig:CreateConfigurationProfile", "appconfig:StartDeployment", "appconfig:GetLatestConfiguration" "appconfig:StartConfigurationSession" ], "Resource":"*" } ] }
Alternância de chaves do Secrets Manager
Esta seção descreve informações de segurança importantes sobre a integração do AWS AppConfig com o Secrets Manager. Para obter mais informações sobre o Secrets Manager, consulte O que é o AWS Secrets Manager? no Guia do usuário do AWS Secrets Manager.
Configuração da alternância automática dos segredos do Secrets Manager implantados pelo AWS AppConfig
Alternância é o processo de atualizar periodicamente um segredo armazenado no Secrets Manager. Quando o Secrets Manager alterna um segredo, ele atualiza as credenciais tanto no segredo quanto no banco de dados ou serviço. Você pode configurar a alternância automática de segredos no Secrets Manager usando uma função AWS Lambda para atualizar o segredo e o banco de dados. Para obter mais informações, consulte Alternar os segredos do AWS Secrets Manager no Guia do usuário do AWS Secrets Manager.
Para ativar a alternância de chaves de segredos do Secrets Manager implantados por AWS AppConfig, atualize sua função do Lambda para alternância e implante o segredo alternado.
nota
Implante seu perfil de configuração do AWS AppConfig depois que seu segredo for trocado e totalmente atualizado para a nova versão. Você pode determinar se o segredo foi alternado porque o status de VersionStage muda de AWSPENDING para AWSCURRENT. A conclusão da alternância de segredos ocorre dentro da função finish_secret dos modelos de alternância do Secrets Manager.
Veja um exemplo de função que inicia uma implantação do AWS AppConfig após a alternância de um segredo.
import time import boto3 client = boto3.client('appconfig') def finish_secret(service_client, arn, new_version): """Finish the rotation by marking the pending secret as current This method finishes the secret rotation by staging the secret staged AWSPENDING with the AWSCURRENT stage. Args: service_client (client): The secrets manager service client arn (string): The secret ARN or other identifier new_version (string): The new version to be associated with the secret """ # First describe the secret to get the current version metadata = service_client.describe_secret(SecretId=arn) current_version = None for version in metadata["VersionIdsToStages"]: if "AWSCURRENT" in metadata["VersionIdsToStages"][version]: if version == new_version: # The correct version is already marked as current, return logger.info("finishSecret: Version %s already marked as AWSCURRENT for %s" % (version, arn)) return current_version = version break # Finalize by staging the secret version current service_client.update_secret_version_stage(SecretId=arn, VersionStage="AWSCURRENT", MoveToVersionId=new_version, RemoveFromVersionId=current_version) # Deploy rotated secret response = client.start_deployment( ApplicationId='TestApp', EnvironmentId='TestEnvironment', DeploymentStrategyId='TestStrategy', ConfigurationProfileId='ConfigurationProfileId', ConfigurationVersion=new_version, KmsKeyIdentifier=key, Description='Deploy secret rotated at ' + str(time.time()) ) logger.info("finishSecret: Successfully set AWSCURRENT stage to version %s for secret %s." % (new_version, arn))