Verifica il documento di identità dell'istanza per un'EC2istanza Amazon - Amazon Elastic Compute Cloud

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à.

Verifica il documento di identità dell'istanza per un'EC2istanza Amazon

Se si intende utilizzare i contenuti del Documenti di identità dell'istanza per uno scopo importante, occorre verificarne il contenuto e l'autenticità prima di utilizzarlo.

Il Documenti di identità dell'istanza di testo normale è accompagnato da tre firme con hash e crittografate. Puoi utilizzare queste firme per verificare l'origine e l'autenticità del Documenti di identità dell'istanza e delle informazioni incluse. Vengono fornite le seguenti firme:

  • Firma con codifica Base64: si tratta di un hash con codifica base64 del documento di identità dell'istanza che viene crittografato utilizzando SHA256 una coppia di chiavi. RSA

  • PKCS7Firma: si tratta di un SHA1 hash del documento di identità dell'istanza che viene crittografato utilizzando una key pair. DSA

  • RSAFirma -2048: si tratta di un SHA256 hash del documento di identità dell'istanza crittografato utilizzando una coppia di chiavi -2048. RSA

Ogni firma è disponibile in un endpoint diverso nei metadati dell'istanza. Puoi utilizzare una di queste firme qualsiasi a seconda dei requisiti di hashing e di crittografia. Per verificare le firme, è necessario utilizzare il certificato pubblico corrispondente. AWS

Opzione 1: verifica il documento di identità dell'istanza utilizzando la firma PKCS7

Questo argomento spiega come verificare il documento di identità dell'istanza utilizzando la PKCS7 firma e il certificato AWS DSA pubblico.

Per verificare il documento di identità dell'istanza utilizzando la PKCS7 firma e il certificato AWS DSA pubblico
  1. Collegati all'istanza.

  2. Recuperate la PKCS7 firma dai metadati dell'istanza e aggiungetela a un nuovo file denominato pkcs7 insieme all'intestazione e al piè di pagina richiesti. Utilizzate uno dei seguenti comandi a seconda della IMDS versione utilizzata dall'istanza.

    IMDSv2
    $ echo "-----BEGIN PKCS7-----" >> pkcs7 \ && TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/pkcs7 >> pkcs7 \ && echo "" >> pkcs7 \ && echo "-----END PKCS7-----" >> pkcs7
    IMDSv1
    $ echo "-----BEGIN PKCS7-----" >> pkcs7 \ && curl -s http://169.254.169.254/latest/dynamic/instance-identity/pkcs7 >> pkcs7 \ && echo "" >> pkcs7 \ && echo "-----END PKCS7-----" >> pkcs7
  3. Trova il certificato DSApubblico per la tua regione in AWS certificati pubblici, ad esempio firme di documenti di identità e aggiungi il contenuto a un nuovo file denominatocertificate.

  4. Usa il comando Open SSL smime per verificare la firma. Includere l'opzione -verify per indicare che la firma deve essere verificata e l'opzione -noverify per indicare che il certificato non deve essere verificato.

    $ openssl smime -verify -in pkcs7 -inform PEM -certfile certificate -noverify | tee document

    Se la firma è valida, viene visualizzato il messaggio Verification successful.

    Il comando, inoltre, scrive i contenuti del documento di identità dell'istanza in un nuovo file denominato document. Puoi confrontare i contenuti del documento di identità dell'istanza dai metadati dell'istanza con i contenuti di questo file utilizzando i comandi seguenti.

    $ openssl dgst -sha256 < document
    $ curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document | openssl dgst -sha256

    Se non è possibile verificare la firma, contattare AWS Support.

Prerequisiti

Questa procedura richiede System.Security Microsoft. NETClasse principale. Per aggiungere la classe alla PowerShell sessione, esegui il comando seguente.

PS C:\> Add-Type -AssemblyName System.Security
Nota

Il comando aggiunge la classe solo alla PowerShell sessione corrente. Se avvii una nuova sessione, devi eseguire nuovamente il comando.

Per verificare il documento di identità dell'istanza utilizzando la PKCS7 firma e il certificato AWS DSA pubblico
  1. Collegati all'istanza.

  2. Recuperate la PKCS7 firma dai metadati dell'istanza, convertitela in un array di byte e aggiungetela a una variabile denominata. $Signature Utilizzate uno dei seguenti comandi a seconda della IMDS versione utilizzata dall'istanza.

    IMDSv2
    PS C:\> [string]$token = (Invoke-WebRequest -Method Put -Headers @{'X-aws-ec2-metadata-token-ttl-seconds' = '21600'} http://169.254.169.254/latest/api/token).Content
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/pkcs7).Content)
    IMDSv1
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/pkcs7).Content)
  3. Recuperare il documento di identità dell'istanza in testo normale dai metadati dell'istanza, convertirlo in un array di byte e aggiungerlo a una variabile denominata $Document. Utilizzate uno dei seguenti comandi a seconda della IMDS versione utilizzata dall'istanza.

    IMDSv2
    PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
    IMDSv1
    PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
  4. Trova il certificato DSApubblico per la tua regione in AWS certificati pubblici, ad esempio firme di documenti di identità e aggiungi il contenuto a un nuovo file denominatocertificate.pem.

  5. Estrarre il certificato dal file del certificato e archiviarlo in una variabile denominata $Store.

    PS C:\> $Store = [Security.Cryptography.X509Certificates.X509Certificate2Collection]::new([Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Path certificate.pem)))
  6. Verifica la firma.

    PS C:\> $SignatureDocument = [Security.Cryptography.Pkcs.SignedCms]::new()
    PS C:\> $SignatureDocument.Decode($Signature)
    PS C:\> $SignatureDocument.CheckSignature($Store, $true)

    Se la firma è valida, il comando non restituisce alcun output. Se non è possibile verificare la firma, il comando restituisce Exception calling "CheckSignature" with "2" argument(s): "Cannot find the original signer. Se non è possibile verificare la firma, contattare AWS Support.

  7. Convalidare il contenuto del documento di identità dell'istanza.

    PS C:\> [Linq.Enumerable]::SequenceEqual($SignatureDocument.ContentInfo.Content, $Document)

    Se il contenuto del documento di identità dell'istanza è valido, il comando restituisce True. Se il documento di identità dell'istanza non può essere convalidato, contatta AWS Support.

Opzione 2: verifica il documento di identità dell'istanza utilizzando la firma con codifica base64

Questo argomento spiega come verificare il documento di identità dell'istanza utilizzando la firma con codifica base64 e il certificato pubblico. AWS RSA

Per convalidare il documento di identità dell'istanza utilizzando la firma con codifica base64 e il certificato pubblico AWS RSA
  1. Collegati all'istanza.

  2. Recuperare la firma con codifica base64 dai metadati dell'istanza, convertirla in un formato binario e aggiungerla a un file denominato signature. Utilizzate uno dei seguenti comandi a seconda della versione utilizzata dall'IMDSistanza.

    IMDSv2
    $ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/signature | base64 -d >> signature
    IMDSv1
    $ curl -s http://169.254.169.254/latest/dynamic/instance-identity/signature | base64 -d >> signature
  3. Recuperare il Documenti di identità dell'istanza in testo normale dai metadati dell'istanza e aggiungerlo a un file denominato document. Utilizzate uno dei seguenti comandi a seconda della IMDS versione utilizzata dall'istanza.

    IMDSv2
    $ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document >> document
    IMDSv1
    $ curl -s http://169.254.169.254/latest/dynamic/instance-identity/document >> document
  4. Trova il certificato RSApubblico per la tua regione in AWS certificati pubblici, ad esempio firme di documenti di identità e aggiungi il contenuto a un nuovo file denominatocertificate.

  5. Estrai la chiave pubblica dal certificato AWS RSA pubblico e salvala in un file denominatokey.

    $ openssl x509 -pubkey -noout -in certificate >> key
  6. Usa il comando Open SSL dgst per verificare il documento di identità dell'istanza.

    $ openssl dgst -sha256 -verify key -signature signature document

    Se la firma è valida, viene visualizzato il messaggio Verification successful.

    Il comando, inoltre, scrive i contenuti del documento di identità dell'istanza in un nuovo file denominato document. Puoi confrontare i contenuti del documento di identità dell'istanza dai metadati dell'istanza con i contenuti di questo file utilizzando i comandi seguenti.

    $ openssl dgst -sha256 < document
    $ curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document | openssl dgst -sha256

    Se non è possibile verificare la firma, contattare AWS Support.

Per convalidare il documento di identità dell'istanza utilizzando la firma con codifica base64 e il certificato pubblico AWS RSA
  1. Collegati all'istanza.

  2. Recuperare la firma con codifica base64 dai metadati dell'istanza, convertirla in un array di byte e aggiungerla alla variabile denominata $Signature. Utilizzate uno dei seguenti comandi a seconda della versione utilizzata dall'IMDSistanza.

    IMDSv2
    PS C:\> [string]$token = (Invoke-WebRequest -Method Put -Headers @{'X-aws-ec2-metadata-token-ttl-seconds' = '21600'} http://169.254.169.254/latest/api/token).Content
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/signature).Content)
    IMDSv1
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/signature).Content)
  3. Recuperare il documento di identità dell'istanza in testo normale dai metadati dell'istanza, convertirlo in un array di byte e aggiungerlo a una variabile denominata $Document. Utilizzate uno dei seguenti comandi a seconda della IMDS versione utilizzata dall'istanza.

    IMDSv2
    PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
    IMDSv1
    PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
  4. Trova il certificato RSApubblico per la tua regione in AWS certificati pubblici, ad esempio firme di documenti di identità e aggiungi il contenuto a un nuovo file denominatocertificate.pem.

  5. Verificare il documento di identità dell'istanza.

    PS C:\> [Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Path certificate.pem)).PublicKey.Key.VerifyData($Document, 'SHA256', $Signature)

    Se la firma è valida, il comando restituisce True. Se non è possibile verificare la firma, contattare AWS Support.

Opzione 3: verifica il documento di identità dell'istanza utilizzando la firma RSA -2048

Questo argomento spiega come verificare il documento di identità dell'istanza utilizzando la firma RSA -2048 e il AWS RSA certificato pubblico -2048.

Per verificare il documento di identità dell'istanza utilizzando la firma -2048 e il certificato RSA pubblico -2048 AWS RSA
  1. Collegati all'istanza.

  2. Recuperate la firma RSA -2048 dai metadati dell'istanza e aggiungetela a un file denominato lungo l'intestazione e il piè di pagina richiesti. rsa2048 Utilizzate uno dei seguenti comandi a seconda della versione utilizzata dall'IMDSistanza.

    IMDSv2
    $ echo "-----BEGIN PKCS7-----" >> rsa2048 \ && TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/rsa2048 >> rsa2048 \ && echo "" >> rsa2048 \ && echo "-----END PKCS7-----" >> rsa2048
    IMDSv1
    $ echo "-----BEGIN PKCS7-----" >> rsa2048 \ && curl -s http://169.254.169.254/latest/dynamic/instance-identity/rsa2048 >> rsa2048 \ && echo "" >> rsa2048 \ && echo "-----END PKCS7-----" >> rsa2048
  3. Trova il certificato pubblico RSA-2048 per la tua regione in AWS certificati pubblici, ad esempio firme di documenti di identità e aggiungi il contenuto a un nuovo file denominato. certificate

  4. Utilizzate il comando Open SSL smime per verificare la firma. Includere l'opzione -verify per indicare che la firma deve essere verificata e l'opzione -noverify per indicare che il certificato non deve essere verificato.

    $ openssl smime -verify -in rsa2048 -inform PEM -certfile certificate -noverify | tee document

    Se la firma è valida, viene visualizzato il messaggio Verification successful. Se non è possibile verificare la firma, contattare AWS Support.

Prerequisiti

Questa procedura richiede System.Security Microsoft. NETClasse principale. Per aggiungere la classe alla PowerShell sessione, esegui il comando seguente.

PS C:\> Add-Type -AssemblyName System.Security
Nota

Il comando aggiunge la classe solo alla PowerShell sessione corrente. Se avvii una nuova sessione, devi eseguire nuovamente il comando.

Per verificare il documento di identità dell'istanza utilizzando la firma RSA -2048 e il certificato pubblico AWS RSA -2048
  1. Collegati all'istanza.

  2. Recuperate la firma RSA -2048 dai metadati dell'istanza, convertitela in un array di byte e aggiungetela a una variabile denominata. $Signature Utilizzate uno dei seguenti comandi a seconda della IMDS versione utilizzata dall'istanza.

    IMDSv2
    PS C:\> [string]$token = (Invoke-WebRequest -Method Put -Headers @{'X-aws-ec2-metadata-token-ttl-seconds' = '21600'} http://169.254.169.254/latest/api/token).Content
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/rsa2048).Content)
    IMDSv1
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/rsa2048).Content)
  3. Recuperare il documento di identità dell'istanza in testo normale dai metadati dell'istanza, convertirlo in un array di byte e aggiungerlo a una variabile denominata $Document. Utilizzate uno dei seguenti comandi a seconda della IMDS versione utilizzata dall'istanza.

    IMDSv2
    PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
    IMDSv1
    PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
  4. Trova il certificato pubblico RSA-2048 per la tua regione in AWS certificati pubblici, ad esempio firme di documenti di identità e aggiungi il contenuto a un nuovo file denominato. certificate.pem

  5. Estrarre il certificato dal file del certificato e archiviarlo in una variabile denominata $Store.

    PS C:\> $Store = [Security.Cryptography.X509Certificates.X509Certificate2Collection]::new([Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Path certificate.pem)))
  6. Verifica la firma.

    PS C:\> $SignatureDocument = [Security.Cryptography.Pkcs.SignedCms]::new()
    PS C:\> $SignatureDocument.Decode($Signature)
    PS C:\> $SignatureDocument.CheckSignature($Store, $true)

    Se la firma è valida, il comando non restituisce alcun output. Se non è possibile verificare la firma, il comando restituisce Exception calling "CheckSignature" with "2" argument(s): "Cannot find the original signer. Se non è possibile verificare la firma, contattare AWS Support.

  7. Convalidare il contenuto del documento di identità dell'istanza.

    PS C:\> [Linq.Enumerable]::SequenceEqual($SignatureDocument.ContentInfo.Content, $Document)

    Se il contenuto del documento di identità dell'istanza è valido, il comando restituisce True. Se il documento di identità dell'istanza non può essere convalidato, contatta. AWS Support