

# Concesión de acceso a las funciones a una organización
<a name="permissions-function-organization"></a>

Para conceder permisos a todas las cuentas de una organización de [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html), le recomendamos usar `put-resource-policy` para crear una política JSON completa con la clave de condición `aws:PrincipalOrgID`.

**importante**  
El uso de `put-resource-policy` reemplaza cualquier política basada en recursos existente en el recurso. Si el recurso ya tiene los permisos definidos con `add-permission`, `put-resource-policy` los sobrescribe. Use `get-resource-policy` para recuperar la política existente antes de realizar cambios.

## Uso de una política JSON completa (recomendado)
<a name="permissions-function-organization-json"></a>

La siguiente política de ejemplo concede acceso de invocación a todas las Cuentas de AWS de una organización `o-a1b2c3d4e5f`:

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "org-access",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "o-a1b2c3d4e5f"
                }
            }
        }
    ]
}
```

Guarde la política en un archivo denominado `policy.json` y aplíquela:

```
aws lambda put-resource-policy \
  --resource-arn arn:aws:lambda:{{us-east-2}}:{{123456789012}}:function:{{my-function}} \
  --policy file://policy.json
```

Con una política JSON completa, también puede denegar el acceso a cuentas específicas de una organización:

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allow-org",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "o-a1b2c3d4e5f"
                }
            }
        },
        {
            "Sid": "deny-specific-account",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::999888777666:root"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": [
                "arn:aws:lambda:us-east-2:123456789012:function:my-function",
                "arn:aws:lambda:us-east-2:123456789012:function:my-function:*"
            ]
        }
    ]
}
```

## Uso de add-permission
<a name="permissions-function-organization-add-permission"></a>

Para casos de uso sencillos, puede usar `add-permission` con la opción `principal-org-id`. Los siguientes ejemplos del comando de la otorga acceso de invocación a todos los usuarios de la organización `o-a1b2c3d4e5f`:

```
aws lambda add-permission \
  --function-name my-function \
  --statement-id org-access \
  --action lambda:InvokeFunction \
  --principal * \
  --principal-org-id o-a1b2c3d4e5f
```

**nota**  
En este comando, `Principal` es `*`. Esto significa que todos los usuarios de la organización `o-a1b2c3d4e5f`obtener permisos de invocación de funciones. Si especifica una Cuenta de AWS o un rol como `Principal`, entonces solo esa entidad principal obtiene permisos de invocación de funciones, pero solo si también forman parte de la organización `o-a1b2c3d4e5f`.

Para obtener más información, consulte [aws:PrincipalOrgID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) en la *Guía del usuario de IAM*.