

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Sicurezza in AWS AppConfig
<a name="appconfig-security"></a>

La sicurezza del cloud AWS è la massima priorità. In qualità di AWS cliente, puoi beneficiare di un data center e di un'architettura di rete progettati per soddisfare i requisiti delle organizzazioni più sensibili alla sicurezza.

La sicurezza è una responsabilità condivisa tra AWS te e te. Il [modello di responsabilità condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/) descrive questo aspetto come sicurezza *del* cloud e sicurezza *nel* cloud:
+ **Sicurezza del cloud**: AWS è responsabile della protezione dell'infrastruttura che gestisce AWS i servizi in Cloud AWS. AWS fornisce inoltre servizi che è possibile utilizzare in modo sicuro. Third-party i revisori testano e verificano regolarmente l'efficacia della nostra sicurezza nell'ambito dei [AWS Programmi di AWS conformità dei Programmi di conformità](https://aws.amazon.com/compliance/programs/) dei di . Per ulteriori informazioni sui programmi di conformità applicabili AWS Systems Manager, consulta [AWS Servizi nell'ambito del programma di conformitàAWS](https://aws.amazon.com/compliance/services-in-scope/) .
+ **Sicurezza nel cloud**: la tua responsabilità è determinata dal AWS servizio che utilizzi. L’utente è anche responsabile di altri fattori, tra cui la riservatezza dei dati, i requisiti della propria azienda e le leggi e normative vigenti. 

AWS AppConfig è uno strumento in AWS Systems Manager. Per capire come applicare il modello di responsabilità condivisa durante l'utilizzo AWS AppConfig, consulta [Security in AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/security.html). Questa sezione descrive come configurare Systems Manager per soddisfare gli obiettivi di sicurezza e conformità per AWS AppConfig.

## Implementazione dell'accesso con privilegi minimi
<a name="appconfig-security-least-privilege-access"></a>

Come best practice di sicurezza, concedi le autorizzazioni minime richieste dalle identità per eseguire azioni specifiche su risorse specifiche in condizioni specifiche. AWS AppConfig *L'agente offre due funzionalità che consentono all'agente di accedere al file system di un'istanza o di un contenitore: *backup* e scrittura su disco.* Se abiliti queste funzionalità, verifica che solo l' AWS AppConfig agente disponga delle autorizzazioni di scrittura sui file di configurazione designati sul file system. Verifica inoltre che solo i processi necessari per leggere da questi file di configurazione siano in grado di farlo. L'applicazione dell'accesso con privilegio minimo è fondamentale per ridurre i rischi di sicurezza e l'impatto risultante da errori o intenzioni dannose. 

Per ulteriori informazioni sull'implementazione dell'accesso con privilegi minimi, consulta [SEC03-BP02 Garantire l'accesso con privilegi minimi nella Guida](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec_permissions_least_privileges.html) per l'*AWS Well-Architected Tool utente*. Per ulteriori informazioni sulle funzionalità dell' AWS AppConfig agente menzionate in questa sezione, vedere. [Utilizzo di un manifesto per abilitare funzionalità di recupero aggiuntive](appconfig-agent-how-to-use-additional-features.md)

## Crittografia dei dati a riposo per AWS AppConfig
<a name="appconfig-security-data-encryption"></a>

AWS AppConfig fornisce la crittografia di default per proteggere i dati dei clienti inutilizzati. Chiavi di proprietà di AWS

**Chiavi di proprietà di AWS**— AWS AppConfig utilizza queste chiavi per impostazione predefinita per crittografare automaticamente i dati distribuiti dal servizio e ospitati nell'archivio AWS AppConfig dati. Non è possibile visualizzare, gestire Chiavi di proprietà di AWS, utilizzare o controllare il loro utilizzo. Tuttavia, non è necessario effettuare alcuna operazione o modificare programmi per proteggere le chiavi che eseguono la crittografia dei dati. Per ulteriori informazioni, consulta la sezione [Chiavi di proprietà di AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) nella *Guida per gli sviluppatori di AWS Key Management Service *.

Sebbene non sia possibile disabilitare questo livello di crittografia o selezionare un tipo di crittografia alternativo, è possibile specificare una chiave gestita dal cliente da utilizzare quando si salvano i dati di configurazione ospitati nel AWS AppConfig data store e quando si distribuiscono i dati di configurazione.

**Chiavi gestite dal cliente**: AWS AppConfig supporta l'uso di una chiave simmetrica gestita dal cliente che puoi creare, possedere e gestire per aggiungere un secondo livello di crittografia rispetto a quello esistente. Chiave di proprietà di AWS Avendo il pieno controllo di questo livello di crittografia, è possibile eseguire operazioni quali:
+ Stabilire e mantenere politiche e sovvenzioni chiave
+ Stabilire e mantenere le policy IAM
+ Abilitare e disabilitare le policy delle chiavi
+ Ruotare i materiali crittografici delle chiavi
+ Aggiungere tag
+ Creare alias delle chiavi
+ Pianificare l’eliminazione delle chiavi

Per ulteriori informazioni, consulta [Customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) nella *AWS Key Management Service Developer Guide*.

**AWS AppConfig supporta chiavi gestite dal cliente**

AWS AppConfig offre supporto per la crittografia a chiave gestita dal cliente per i dati di configurazione. Per le versioni di configurazione salvate nell'archivio dati AWS AppConfig ospitato, i clienti possono impostare un profilo di configurazione `KmsKeyIdentifier` sul profilo di configurazione corrispondente. Ogni volta che viene creata una nuova versione dei dati di configurazione utilizzando l'operazione `CreateHostedConfigurationVersion` API, AWS AppConfig genera una chiave AWS KMS dati da cui `KmsKeyIdentifier` crittografare i dati prima di archiviarli. Quando successivamente si accede ai dati, durante le operazioni `GetHostedConfigurationVersion` o tramite l'`StartDeployment`API, AWS AppConfig decripta i dati di configurazione utilizzando le informazioni sulla chiave dati generata.

AWS AppConfig offre inoltre supporto per la crittografia a chiave gestita dal cliente per i dati di configurazione distribuiti. Per crittografare i dati di configurazione, i clienti possono fornire una procedura `KmsKeyIdentifier` di implementazione. AWS AppConfig genera la chiave AWS KMS dati con questa chiave `KmsKeyIdentifier` per crittografare i dati sul funzionamento dell'`StartDeployment`API.

**AWS AppConfig accesso alla crittografia**

Quando crei una chiave gestita dal cliente, utilizza la seguente politica di chiave per assicurarti che la chiave possa essere utilizzata. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/{{role_name}}"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Per crittografare i dati di configurazione ospitati con una chiave gestita dal cliente, la chiamata di identità `CreateHostedConfigurationVersion` richiede la seguente dichiarazione di politica, che può essere assegnata a un utente, gruppo o ruolo:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kms:GenerateDataKey",
            "Resource": "arn:aws:kms:{{us-east-1}}:{{111122223333}}:key/{{key-ID}}"
        }
    ]
}
```

------

Se utilizzi un segreto di Secrets Manager o qualsiasi altro dato di configurazione crittografato con una chiave gestita dal cliente, `retrievalRoleArn` dovrai `kms:Decrypt` decrittografare e recuperare i dati. 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:{{us-east-1}}:{{111122223333}}:key/{{key-ID}}"
    }
  ]
}
```

------

Quando si chiama l'operazione AWS AppConfig [StartDeployment](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_StartDeployment.html)API, la chiamata di identità `StartDeployment` richiede la seguente policy IAM, che può essere assegnata a un utente, gruppo o ruolo:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:GenerateDataKey*"
      ],
      "Resource": "arn:aws:kms:{{us-east-1}}:{{111122223333}}:key/{{key-ID}}"
    }
  ]
}
```

------

Quando si chiama l'operazione AWS AppConfig [GetLatestConfiguration](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html)API, la chiamata di identità `GetLatestConfiguration` richiede la seguente politica che può essere assegnata a un utente, gruppo o ruolo:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:{{us-east-1}}:{{111122223333}}:key/{{key-ID}}"
        }
    ]
}
```

------

**Contesto di crittografia**

Un [contesto di crittografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) è un set facoltativo di coppie chiave-valore che contengono ulteriori informazioni contestuali sui dati.

AWS KMS utilizza il contesto di crittografia come dati autenticati aggiuntivi per supportare la crittografia autenticata. Quando includi un contesto di crittografia in una richiesta di crittografia dei dati, AWS KMS associa il contesto di crittografia ai dati crittografati. Per decrittografare i dati, nella richiesta deve essere incluso lo stesso contesto di crittografia.

 **AWS AppConfig contesto di crittografia**: AWS AppConfig utilizza un contesto di crittografia in tutte le operazioni AWS KMS crittografiche per i dati e le distribuzioni di configurazione ospitati crittografati. Il contesto contiene una chiave corrispondente al tipo di dati e un valore che identifica l'elemento di dati specifico.

**Monitoraggio delle chiavi di crittografia per AWS**

Quando utilizzi chiavi gestite AWS KMS dal cliente con AWS AppConfig, puoi utilizzare AWS CloudTrail o Amazon CloudWatch Logs per tenere traccia delle richieste AWS AppConfig inviate a AWS KMS.

L'esempio seguente è un CloudTrail evento per `Decrypt` monitorare AWS KMS le operazioni richiamate per accedere AWS AppConfig ai dati crittografati dalla chiave gestita dal 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"
}
```

## Accesso AWS AppConfig tramite un'interfaccia endpoint ()AWS PrivateLink
<a name="vpc-interface-endpoints"></a>

Puoi usarlo AWS PrivateLink per creare una connessione privata tra il tuo VPC e. AWS AppConfig Puoi accedere AWS AppConfig come se fosse nel tuo VPC, senza l'uso di un gateway Internet, un dispositivo NAT, una connessione VPN o una connessione. Direct Connect Le istanze del tuo VPC non necessitano di indirizzi IP pubblici per accedervi. AWS AppConfig

Stabilisci questa connessione privata creando un *endpoint di interfaccia* attivato da AWS PrivateLink. In ciascuna sottorete viene creata un'interfaccia di rete endpoint da abilitare per l'endpoint di interfaccia. Queste sono interfacce di rete gestite dal richiedente che fungono da punto di ingresso per il traffico destinato a AWS AppConfig.

Per ulteriori informazioni, consulta la sezione [Accesso a Servizi AWS tramite AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html) nella *Guida di AWS PrivateLink *.

### Considerazioni per AWS AppConfig
<a name="vpc-endpoint-considerations"></a>

*Prima di configurare un endpoint di interfaccia per AWS AppConfig, consulta [le considerazioni nella Guida](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#considerations-interface-endpoints).AWS PrivateLink *

AWS AppConfig supporta l'effettuazione di chiamate verso [https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_Operations_Amazon_AppConfig.html](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_Operations_Amazon_AppConfig.html)e [https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_Operations_AWS_AppConfig_Data.html](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_Operations_AWS_AppConfig_Data.html)servizi tramite l'endpoint dell'interfaccia.

### Crea un endpoint di interfaccia per AWS AppConfig
<a name="vpc-endpoint-create"></a>

Puoi creare un endpoint di interfaccia per AWS AppConfig utilizzare la console Amazon VPC o AWS Command Line Interface ().AWS CLI Per ulteriori informazioni, consulta la sezione [Creazione di un endpoint di interfaccia](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws) nella *Guida per l'utente di AWS PrivateLink *.

Crea un endpoint di interfaccia per AWS AppConfig utilizzare i seguenti nomi di servizio:

```
com.amazonaws.{{region}}.appconfig
```

```
com.amazonaws.{{region}}.appconfigdata
```

Se abiliti il DNS privato per l'endpoint dell'interfaccia, puoi effettuare richieste API AWS AppConfig utilizzando il nome DNS regionale predefinito. Ad esempio `appconfig.us-east-1.amazonaws.com` e `appconfigdata.us-east-1.amazonaws.com`.

### Creazione di una policy dell' endpoint per l'endpoint dell'interfaccia
<a name="vpc-endpoint-policy"></a>

Una policy dell'endpoint è una risorsa IAM che è possibile allegare all'endpoint dell'interfaccia. La policy predefinita per gli endpoint consente l'accesso completo AWS AppConfig tramite l'endpoint dell'interfaccia. Per controllare l'accesso consentito AWS AppConfig dal tuo VPC, collega una policy endpoint personalizzata all'endpoint di interfaccia.

Una policy di endpoint specifica le informazioni riportate di seguito:
+ I principali che possono eseguire azioni (Account AWS, utenti IAM e ruoli IAM).
+ Le azioni che possono essere eseguite.
+ Le risorse in cui è possibile eseguire le operazioni.

Per ulteriori informazioni, consulta la sezione [Controllo dell'accesso ai servizi con policy di endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html) nella *Guida di AWS PrivateLink *.

**Esempio: policy degli endpoint VPC per le azioni AWS AppConfig**  
Di seguito è riportato l'esempio di una policy dell'endpoint personalizzata. Se collegata a un endpoint dell'interfaccia, questa policy concede l'accesso alle operazioni AWS AppConfig elencate per tutti i principali su tutte le risorse.

```
{
   "Statement": [
      {
         "Principal": "*",
         "Effect": "Allow",
         "Action": [
            "{{appconfig}}:{{CreateApplication}}",
            "{{appconfig}}:{{CreateEnvironment}}",
            "{{appconfig}}:{{CreateConfigurationProfile}}",
            "{{appconfig}}:{{StartDeployment}}",
            "{{appconfig}}:{{GetLatestConfiguration}}"
            "{{appconfig}}:{{StartConfigurationSession}}"
         ],
         "Resource":"*"
      }
   ]
}
```

## Rotazione dei tasti di Secrets Manager
<a name="appconfig-security-secrets-manager-key-rotation"></a>

Questa sezione descrive importanti informazioni di sicurezza sull' AWS AppConfig integrazione con Secrets Manager. Per informazioni su Secrets Manager, vedi [Cos'è Gestione dei segreti AWS?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) nella *Guida Gestione dei segreti AWS per l'utente*.

### Impostazione della rotazione automatica dei segreti di Secrets Manager distribuita da AWS AppConfig
<a name="appconfig-security-secrets-manager-key-rotation-setting-up"></a>

La *rotazione* è il processo di aggiornamento periodico di un segreto archiviato in Secrets Manager. Quando si ruota un segreto, vengono aggiornati sia il segreto in Secrets Manager che le credenziali del database o del servizio. È possibile configurare la rotazione automatica dei segreti in Secrets Manager utilizzando una AWS Lambda funzione per aggiornare il segreto e il database. Per ulteriori informazioni, consulta [Ruotare Gestione dei segreti AWS i segreti](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html) nella *Guida per l'Gestione dei segreti AWS utente*.

Per abilitare la rotazione delle chiavi dei segreti di Secrets Manager distribuiti da AWS AppConfig, aggiorna la funzione di rotazione Lambda e distribuisci il segreto ruotato.

**Nota**  
Implementa il tuo profilo di AWS AppConfig configurazione dopo che il segreto è stato ruotato e completamente aggiornato alla nuova versione. Puoi determinare se il segreto è ruotato perché lo stato `VersionStage` cambia da a. `AWSPENDING` `AWSCURRENT` Il completamento della rotazione segreta avviene all'interno della `finish_secret` funzione Secrets Manager Rotation Templates.

Ecco un esempio di funzione che avvia una AWS AppConfig distribuzione dopo la rotazione di un segreto.

```
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))
```