

# Especificación de ARN del recurso de AWS Glue
<a name="glue-specifying-resource-arns"></a>

En AWS Glue, puede controlar el acceso a los recursos a través de una política de AWS Identity and Access Management (IAM). En las políticas se emplean nombres de recurso de Amazon (ARN) para identificar los recursos a los que se aplican las políticas. No todos los recursos de AWS Glue admiten ARN.

**Topics**
+ [ARN de Data Catalog](#data-catalog-resource-arns)
+ [ARN para objetos que no están en el catálogo en AWS Glue](#non-catalog-resource-arns)
+ [Control de acceso para operaciones API singulares que no estén en el catálogo de AWS Glue](#non-catalog-singular-apis)
+ [Control de acceso para operaciones API que no están en el catálogo de AWS Glue que recuperan varios elementos](#non-catalog-plural-apis)
+ [Control de acceso para operaciones de API BatchGet que no están en el catálogo de AWS Glue](#non-catalog-batch-get-apis)

## ARN de Data Catalog
<a name="data-catalog-resource-arns"></a>

Los recursos de Data Catalog tienen una estructura jerárquica, con `catalog` como la raíz.

```
arn:aws:glue:{{region}}:{{account-id}}:catalog
```

Cada cuenta de AWS tiene un único Data Catalog en una región de AWS con el ID de cuenta de 12 dígitos como el ID de catálogo. Los recursos tienen ARN únicos asociados a ellos, tal y como se muestra en la siguiente tabla.


| **Tipo de recurso**  |  **Formato de ARN**  | 
| --- | --- | 
| Catálogo | `arn:aws:glue:{{region}}:{{account-id}}:catalog`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:catalog` | 
| Database | `arn:aws:glue:{{region}}:{{account-id}}:database/{{database name}}`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:database/db1` | 
| Tabla | `arn:aws:glue:{{region}}:{{account-id}}:table/{{database name}}/{{table name}}`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:table/db1/tbl1` | 
| Catálogo federado de tablas de S3 (todos los buckets de tabla) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/s3tablescatalog` <br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog` | 
| Catálogo federado de buckets de tabla de S3 (catálogo secundario) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/s3tablescatalog/{{bucket name}}` <br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog/amzn-s3-demo-bucket1` | 
| Base de datos federada de tablas de S3 |  `arn:aws:glue:{{region}}:{{account-id}}:database/s3tablescatalog/{{child catalog name}}/{{database name}}` <br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:database/s3tablescatalog/amzn-s3-demo-bucket1/nsdb1` | 
| Tabla federada de S3 |  `arn:aws:glue:{{region}}:{{account-id}}:table/s3tablescatalog/{{child catalog name}}/{{database name}}/{{table name}}` <br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:table/s3tablescatalog/amzn-s3-demo-bucket1/nsdb1/s3tbl1` | 
| Catálogo federado de tablas de S3 (un único bucket de tabla registrado en Lake Formation) | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{nombre del catálogo}} <br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:catalog/amzn-s3-demo-bucket1`  | 
| Base de datos federada de tablas de S3  | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{nombre del catálogo}}/{{nombre de la base de datos}}<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:database/amzn-s3-demo-bucket1/nsdb1` | 
| Tabla federada de S3 | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{nombre del catálogo}}/{{nombre de la base de datos}}/{{nombre de la tabla}}<br /> Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:table/amzn-s3-demo-bucket1/{{nsdb1}}/s3tbl1`  | 
| Catálogo federado o gestionado (catálogo de nivel superior en un catálogo múltiple) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/{{top-level catalog name}}` <br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:catalog/nscatalog`<br />El formato ARN de un catálogo gestionado sigue la misma estructura. | 
| Catálogo federado de varios niveles (catálogo secundario en un catálogo de varios niveles) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/{{top-level catalog name}}/{{child catalog name}}` <br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:catalog/nscatalog/dbcatalog` | 
| Base de datos federada |  `arn:aws:glue:{{region}}:{{account-id}}:database/{{name space catalog name}}/{{child catalog name}}/{{database name}}` <br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:database/nscatalog/dbcatalog/schemadb` | 
| Tabla federada |  `arn:aws:glue:{{region}}:{{account-id}}:table/{{name space catalog name}}/{{child catalog name}}/{{database name}}/{{table name}}` <br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:table/nscatalog/dbcatalog/schemadb/rstbl1` | 
| Contenedor de enlaces de catálogos | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{nombre del contenedor de enlaces}}<br />Por ejemplo: `arn:aws:glue:glue:us-east-1:123456789012:catalog`/linkcontainer-example  | 
| Database | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{nombre del contenedor de enlaces}}/{{nombre de la base de datos}}<br />Por ejemplo: `arn:aws:glue:glue:us-east-1:123456789012:database`/linkcontainer-example/link-db  | 
| Función definida por el usuario | `arn:aws:glue:{{region}}:{{account-id}}:userDefinedFunction/{{database name}}/{{user-defined function name}}`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:userDefinedFunction/db1/func1` | 
| Connection | `arn:aws:glue:{{region}}:{{account-id}}:connection/{{connection name}}`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:connection/connection1` | 
| Sesiones interactivas | `arn:aws:glue:{{region}}:{{account-id}}:session/{{interactive session id}}`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:session/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111` | 

Para habilitar el control de acceso detallado, puede utilizar estos ARN en sus políticas de IAM y las políticas de recursos para conceder y denegar el acceso a recursos específicos. Los comodines están permitidos en las políticas. Por ejemplo, el siguiente ARN coincide con todas las tablas de la base de datos `default`.

```
arn:aws:glue:us-east-1:123456789012:table/default/*
```

**importante**  
Todas las operaciones realizadas en un recurso de Data Catalog requieren permiso en el recurso y todos los antecesores de dicho recurso. Por ejemplo, para crear una partición de una tabla se requiere el permiso en la tabla, la base de datos y el catálogo donde se encuentra la tabla. El siguiente ejemplo muestra el permiso necesario para crear particiones en la tabla `PrivateTable` en la base de datos `PrivateDatabase` de Data Catalog.  

```
{
   "Sid": "GrantCreatePartitions",
   "Effect": "Allow",
   "Action": [
       "glue:BatchCreatePartitions"
   ],
   "Resource": [
       "arn:aws:glue:us-east-1:123456789012:table/PrivateDatabase/PrivateTable",
       "arn:aws:glue:us-east-1:123456789012:database/PrivateDatabase",
       "arn:aws:glue:us-east-1:123456789012:catalog"
   ]
}
```
Además de permiso en el recurso y todos sus antecesores, todas las operaciones de eliminación requieren permiso en todos los elementos secundarios de dicho recurso. Por ejemplo, para eliminar una base de datos, se requiere permiso en todas las tablas y funciones definidas por el usuario en la base de datos, así como en la base de datos y el catálogo donde se encuentra la base de datos. El siguiente ejemplo muestra el permiso necesario para eliminar la base de datos `PrivateDatabase` del Data Catalog.  

```
{
   "Sid": "GrantDeleteDatabase",
   "Effect": "Allow",
   "Action": [
       "glue:DeleteDatabase"
   ],
   "Resource": [
       "arn:aws:glue:us-east-1:123456789012:table/PrivateDatabase/*",
       "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/PrivateDatabase/*",
       "arn:aws:glue:us-east-1:123456789012:database/PrivateDatabase",
       "arn:aws:glue:us-east-1:123456789012:catalog"
   ]
}
```
En resumen, las acciones en los recursos de Data Catalog siguen estas reglas de permisos:  
Las acciones en el catálogo requieren permiso solo en el catálogo.
Las acciones en una base de datos requieren permiso en la base de datos y el catálogo.
Eliminar acciones en una base de datos requiere permiso en la base de datos y el catálogo, además de todas las tablas y funciones definidas por el usuario en la base de datos.
Las acciones en una tabla, partición o versión de tabla requieren el permiso en la tabla, base de datos y catálogo.
Las acciones en una función definida por el usuario requieren el permiso en la función definida por el usuario, la base de datos y el catálogo.
Las acciones en una conexión requieren permiso en la conexión y el catálogo.

## ARN para objetos que no están en el catálogo en AWS Glue
<a name="non-catalog-resource-arns"></a>

Algunos recursos de AWS Glue permiten permisos de nivel de recursos para controlar el acceso mediante un ARN. Puede utilizar estos ARN en sus políticas de IAM para habilitar el control de acceso detallado. En la siguiente tabla se enumeran los recursos que puede contener ARN de recursos.


| **Tipo de recurso**  |  **Formato de ARN**  | 
| --- | --- | 
| Rastreador | `arn:aws:glue:{{region}}:{{account-id}}:crawler/{{crawler-name}}`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:crawler/mycrawler` | 
| Trabajo | `arn:aws:glue:{{region}}:{{account-id}}:job/{{job-name}}`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:job/testjob` | 
| Desencadenador | `arn:aws:glue:{{region}}:{{account-id}}:trigger/{{trigger-name}}`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:trigger/sampletrigger` | 
| Punto de enlace de desarrollo | `arn:aws:glue:{{region}}:{{account-id}}:devEndpoint/{{development-endpoint-name}}`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:devEndpoint/temporarydevendpoint` | 
| Transformación de machine learning | `arn:aws:glue:{{region}}:{{account-id}}:mlTransform/{{transform-id}}`<br />Por ejemplo: .: `arn:aws:glue:us-east-1:123456789012:mlTransform/tfm-1234567890` | 

## Control de acceso para operaciones API singulares que no estén en el catálogo de AWS Glue
<a name="non-catalog-singular-apis"></a>

Las operaciones de API *singulares* que no estén en el catálogo de AWS Glue actúan sobre un solo elemento (punto de conexión de desarrollo). Algunos ejemplos son `GetDevEndpoint`, `CreateUpdateDevEndpoint` y `UpdateDevEndpoint`. Para estas operaciones, una política debe poner el nombre de la API en el bloque `"action"` y el ARN del recurso en el bloque `"resource"`.

Supongamos que desea permitir a un usuario llamar a la operación `GetDevEndpoint`. La siguiente política concede los permisos mínimos necesarios a un punto de enlace llamado `myDevEndpoint-1`.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "MinimumPermissions",
      "Effect": "Allow",
      "Action": "glue:GetDevEndpoint",
      "Resource": "arn:aws:glue:{{us-east-1}}:{{111122223333}}:devEndpoint/myDevEndpoint-1"
    }
  ]
}
```

------

La siguiente política permite a `UpdateDevEndpoint` el acceso a los recursos que coinciden con `myDevEndpoint-` con un asterisco (\*).

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "PermissionWithWildcard",
      "Effect": "Allow",
      "Action": "glue:UpdateDevEndpoint",
      "Resource": "arn:aws:glue:{{us-east-1}}:{{111122223333}}:devEndpoint/myDevEndpoint-*"
    }
  ]
}
```

------

Puede combinar los dos políticas tal y como se muestra en el siguiente ejemplo. Puede que vea `EntityNotFoundException` para cualquier punto de enlace de desarrollo cuyo nombre empiece por `A`. Sin embargo, se devuelve un error de acceso denegado cuando intenta acceder a otros puntos de enlace de desarrollo.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CombinedPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:UpdateDevEndpoint",
        "glue:GetDevEndpoint"
      ],
      "Resource": "arn:aws:glue:{{us-east-1}}:{{111122223333}}:devEndpoint/A*"
    }
  ]
}
```

------

## Control de acceso para operaciones API que no están en el catálogo de AWS Glue que recuperan varios elementos
<a name="non-catalog-plural-apis"></a>

Algunas operaciones API de AWS Glue recupera varios elementos (como varios puntos de enlace de desarrollo); por ejemplo, `GetDevEndpoints`. Para esta operación, solo puede especificar un recurso de asterisco (\*) y no ARN específicos.

Por ejemplo, para incluir `GetDevEndpoints` en la política, el ámbito del recurso debe establecer en el carácter comodín (\*). Las operaciones singulares (`GetDevEndpoint`, `CreateDevEndpoint` y `DeleteDevendpoint`) también se asignan a todos los recursos (\*) en el ejemplo.

```
{
            "Sid": "PluralAPIIncluded",
            "Effect": "Allow",
            "Action": [
                "glue:GetDevEndpoints",
                "glue:GetDevEndpoint",
                "glue:CreateDevEndpoint",
                "glue:UpdateDevEndpoint"
            ],
            "Resource": [
                "*"
            ]
}
```

## Control de acceso para operaciones de API BatchGet que no están en el catálogo de AWS Glue
<a name="non-catalog-batch-get-apis"></a>

Algunas operaciones API de AWS Glue recupera varios elementos (como varios puntos de enlace de desarrollo); por ejemplo, `BatchGetDevEndpoints`. En esta operación, puede especificar un ARN para limitar el ámbito de los recursos a los que se puede obtener acceso.

Por ejemplo, para permitir el acceso a un punto de enlace de desarrollo específico, incluya `BatchGetDevEndpoints` en la política con el ARN del recurso.

```
{
            "Sid": "BatchGetAPIIncluded",
            "Effect": "Allow",
            "Action": [
                "glue:BatchGetDevEndpoints"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:123456789012:devEndpoint/de1" 
            ]
}
```

Con esta política, puede obtener acceso correctamente al punto de enlace de desarrollo llamado `de1`. Sin embargo, si intenta obtener acceso al punto de enlace de desarrollo llamado `de2`, se devolverá un error.

```
An error occurred (AccessDeniedException) when calling the BatchGetDevEndpoints operation: No access to any requested resource.
```

**importante**  
Si desea conocer otros enfoques alternativos para configurar las políticas de IAM, como el uso de las operaciones API `List` y `BatchGet`, consulte [Ejemplos de políticas basadas en identidades para AWS Glue](security_iam_id-based-policy-examples.md). 