¿Por qué los usuarios de otras cuentas reciben errores de acceso denegado cuando intentan acceder a objetos de S3 cifrados con una clave de AWS KMS personalizada?

5 minutos de lectura
0

Mi bucket de Amazon Simple Storage Service (Amazon S3) está cifrado con una clave personalizada de AWS Key Management Service (AWS KMS). Cuando los usuarios de otra cuenta de AWS intentan acceder a los objetos de mi bucket, reciben un error de acceso denegado. ¿Cómo puedo solucionar este problema?

Descripción breve

Para conceder acceso a un bucket cifrado por AWS KMS de la cuenta A a un usuario de la cuenta B, debe disponer de los siguientes permisos:

  • La política de bucket de la cuenta A debe permitir el acceso a la cuenta B.
  • La política de claves de AWS KMS de la cuenta A debe conceder acceso al usuario de la cuenta B.
  • La política de AWS Identity and Access Management (IAM) de la cuenta B debe conceder a los usuarios el acceso al bucket y a la clave de AWS KMS de la cuenta A.

Para solucionar el error de acceso denegado, compruebe que estos permisos estén configurados correctamente.

**Advertencia:Las políticas de claves de AWS KMS **administradas por AWS no se pueden modificar porque son de solo lectura. Sin embargo, siempre puede ver las políticas de claves de KMS administradas por AWS y las políticas de claves de KMS administradas por el cliente. Como las políticas de claves de KMS administradas por AWS no se pueden actualizar, tampoco se pueden conceder permisos entre cuentas para esas políticas de claves. Además, otras cuentas de AWS no pueden acceder a los objetos cifrados mediante una clave de KMS administrada por AWS. En el caso de las políticas de claves de KMS administradas por el cliente, solo puede cambiar la política de claves desde la cuenta de AWS que creó la política.

Si especifica su propia clave de AWS KMS (clave de KMS administrada por el cliente), debe utilizar un ARN de clave de AWS KMS completo para la configuración del cifrado del bucket. Al utilizar un alias de clave de AWS KMS, AWS KMS resolverá la clave solo dentro de la cuenta propietaria del bucket (cuenta A).

Use lo siguiente:

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

No use:

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

Resolución

La política de bucket de la cuenta A debe conceder acceso al usuario de la cuenta B

Desde la cuenta A, revise la política de bucket y confirme que haya una sentencia que permita el acceso desde el ID de cuenta de la cuenta B.

Por ejemplo, esta política de bucket permite a s3:GetObject acceder al ID de cuenta 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 política de claves de AWS KMS de la cuenta A debe conceder acceso al usuario de la cuenta B

La política de claves de AWS KMS debe conceder al usuario de la cuenta B permisos para la acción kms:Decrypt. Por ejemplo, para conceder acceso de clave a un solo usuario o rol de IAM, la sentencia de política de claves es similar a la siguiente:

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

Desde la cuenta A, revise la política de claves mediante la vista de políticas de la Consola de administración de AWS. En la política de claves, busca "Sid": "Allow use of the key". A continuación, confirme que el usuario de la cuenta B figura como entidad principal en esa sentencia.

Si no ve la sentencia "Sid": "Allow use of the key", cambie la vista para ver la política de claves mediante la vista predeterminada de la consola. A continuación, añada el ID de la cuenta B como cuenta externa con acceso a la clave.

La política de usuario de IAM de la cuenta B debe conceder acceso al bucket y a la clave de AWS KMS de la cuenta A

Desde la cuenta B, lleve a cabo los siguientes pasos:

1.Abra la consola de IAM.

2. Abra el usuario o rol de IAM asociado al usuario en la cuenta B.

3.Revise la lista de políticas de permisos aplicadas al usuario o rol de IAM.

4.Compruebe que se hayan aplicado políticas que permitan el acceso tanto al bucket como a la clave de AWS KMS.

Nota: Si el usuario o rol de IAM de la cuenta B ya tienen acceso de administrador, no es necesario que conceda el acceso a la clave.

La siguiente política de ejemplo permite el acceso al usuario de IAM de la cuenta B a los objetos y a la clave de AWS KMS (para descifrar los objetos de 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 política de bucket de la cuenta A debe permitir el acceso a la cuenta B.
  • La clave de AWS KMS de la cuenta A debe encontrarse en la misma región que el bucket de la cuenta A.
  • La política de claves de AWS KMS de la cuenta A debe conceder acceso al usuario de la cuenta B.
  • La política de IAM de la cuenta B debe conceder a los usuarios acceso tanto al bucket como a la clave de AWS KMS de la cuenta A.

Para obtener más información sobre cómo añadir o corregir los permisos de un usuario de IAM, consulte Cambiar los permisos de un usuario de IAM.


Información relacionada

Generador de políticas de AWS

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año