Perché gli utenti multi-account ricevono errori di accesso negato quando cercano di accedere a oggetti S3 crittografati da una chiave AWS KMS personalizzata?

4 minuti di lettura
0

Il mio bucket Amazon Simple Storage Service (Amazon S3) è crittografato con una chiave personalizzata del Servizio di gestione delle chiavi AWS (AWS KMS). Quando gli utenti di un altro account AWS cercano di accedere agli oggetti nel mio bucket, ricevono un errore di accesso negato. Come posso risolvere questo problema?

Breve descrizione

Per concedere l'accesso a un bucket crittografato AWS KMS nell'Account A a un utente nell'Account B, devi disporre delle seguenti autorizzazioni:

  • La policy di bucket nell'Account A deve concedere l'accesso all'Account B.
  • La policy della chiave AWS KMS nell'Account A deve concedere l'accesso all'utente nell'Account B.
  • La policy di AWS Identity and Access Management (IAM) nell'Account B deve concedere agli utenti l'accesso al bucket e alla chiave AWS KMS nell'Account A.

Per risolvere l'errore di Accesso negato, verifica che queste autorizzazioni siano impostate correttamente.

Avvertenza: Le policy della chiave AWS KMS gestite da AWS non possono essere modificate perché sono di sola lettura. Tuttavia, puoi sempre visualizzare le policy della chiave KMS gestite sia da AWS che dai clienti. Poiché le policy della chiave KMS gestite da AWS non possono essere aggiornate, non è inoltre possibile concedere autorizzazioni tra account per tali policy della chiave. Inoltre, gli oggetti crittografati utilizzando una chiave KMS gestita da AWS non sono accessibili da altri account AWS. Per le policy della chiave KMS gestite dai clienti, puoi modificare la policy della chiave solo dall'account AWS che ha creato la policy.

Se specifichi la tua chiave AWS KMS (chiave KMS gestita dal cliente), devi utilizzare una chiave AWS KMS ARN completa per l'impostazione di crittografia del bucket. Quando si utilizza un alias della chiave AWS KMS, AWS KMS risolverà la chiave solo all'interno dell'account proprietario del bucket (Account A).

Usa questo:

"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"

Non usare:

arn:aws:kms:us-west-2:111122223333:alias/<alias-name>

Risoluzione

La policy di bucket nell'Account A deve concedere l'accesso all'utente nell'Account B

Dall'Account A, consulta la policy di bucket e conferma che sia presente una dichiarazione che consente l'accesso dall'ID dell'Account B.

Ad esempio, questa policy di bucket consente a s3:GetObject l'accesso all'account ID 111122223333:

{
  "Id": "ExamplePolicy1",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": [
          "111122223333"
        ]
      }
    }
  ]
}

La policy della chiave AWS KMS nell'Account A deve concedere l'accesso all'utente nell'account B

La policy della chiave AWS KMS deve concedere all'utente nell'Account B le autorizzazioni per l'azione kms:Decrypt. Ad esempio, per concedere l'accesso a un solo utente o ruolo IAM, la dichiarazione della policy della chiave è la seguente:

{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::111122223333:role/role_name"
    ]
  },
  "Action": [
    "kms:Decrypt"
  ],
  "Resource": "*"
}

Dall'Account A, rivedi la policy della chiave utilizzando la visualizzazione delle policy della Console di gestione AWS. Nella policy della chiave, cerca "Sid": "Consenti l'uso della chiave". Quindi, conferma che l'utente dell'Account B sia elencato come principale in tale dichiarazione.

Se non vedi la dichiarazione "Sid": "Consenti l'uso della chiave", passa a visualizzare la policy della chiave utilizzando la visualizzazione predefinita della console. Quindi, aggiungi l'ID dell'Account B come account esterno con accesso alla chiave.

La policy dell’utente IAM nell'Account B deve concedere all'utente l'accesso sia al bucket che alla chiave AWS KMS nell'Account A

Dall'Account B, procedi come segue:

  1. Apri la console IAM.

  2. Apri l'utente o il ruolo IAM associato all'utente nell'Account B.

  3. Esamina l'elenco delle policy di autorizzazione applicate all'utente o al ruolo IAM.

  4. Verifica che siano applicate policy che concedono l'accesso sia al bucket che alla chiave AWS KMS.

Nota: Se l'utente o il ruolo IAM nell'Account B dispone già di accesso come amministratore, non è necessario concedere l'accesso alla chiave.

La seguente policy di esempio concede all'utente IAM nell'Account B l'accesso agli oggetti e alla chiave AWS KMS (per decrittografare gli oggetti in un bucket):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    },
    {
      "Sid": "ExampleStmt2",
      "Action": [
        "kms:Decrypt"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }
  ]
}

Nota:

  • La policy di bucket nell'Account A deve concedere l'accesso all'Account B.
  • La chiave AWS KMS nell'Account A deve risiedere nella stessa regione del bucket nell'Account A.
  • La policy della chiave AWS KMS nell'Account A deve concedere l'accesso all'utente nell'Account B.
  • La policy IAM nell'Account B deve concedere all'utente l'accesso sia al bucket che alla chiave AWS KMS nell'Account A.

Per ulteriori informazioni su come aggiungere o correggere le autorizzazioni dell'utente IAM, consulta Modifica delle autorizzazioni per un utente IAM.


Informazioni correlate

Generatore di policy AWS

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa