De forma predeterminada, los usuarios y roles de IAM no tienen permiso para crear ni modificar recursos de API Gateway. Tampoco pueden realizar tareas mediante la AWS Management Console, la AWS CLI o los AWS SDK. Un administrador de IAM debe crear políticas de IAM que concedan permisos a los usuarios y a los roles para realizar operaciones de la API concretas en los recursos especificados que necesiten. El administrador debe adjuntar esas políticas a los usuarios o grupos de IAM que necesiten esos permisos.
Para obtener información sobre cómo crear políticas de IAM, consulte Creating Policies on the JSON Tab en la Guía del usuario de IAM. Para obtener información sobre las acciones, los recursos y las condiciones específicas de API Gateway, consulte Acciones, recursos y claves de condición de la administración de Amazon API Gateway y Acciones, recursos y claves de condición de la administración de Amazon API Gateway V2.
Temas
Prácticas recomendadas sobre las políticas
Las políticas basadas en identidades determinan si alguien puede crear, acceder o eliminar los recursos de API Gateway de la cuenta. Estas acciones pueden generar costos adicionales para su Cuenta de AWS. Siga estas directrices y recomendaciones al crear o editar políticas basadas en identidades:
-
Comienza con las políticas administradas por AWSy continúa con los permisos de privilegio mínimo: a fin de comenzar a conceder permisos a los usuarios y las cargas de tarea, utiliza las políticas administradas por AWS, que conceden permisos para muchos casos de uso comunes. Están disponibles en su Cuenta de AWS. Se recomienda definir políticas gestionadas por el cliente de AWS específicas para sus casos de uso a fin de reducir aún más los permisos. Con el fin de obtener más información, consulta las políticas administradas por AWS o las políticas administradas por AWS para funciones de tarea en la Guía de usuario de IAM.
-
Aplique permisos de privilegio mínimo: cuando establezca permisos con políticas de IAM, conceda solo los permisos necesarios para realizar una tarea. Para ello, debe definir las acciones que se puedes llevar a cabo en determinados recursos en condiciones específicas, también conocidos como permisos de privilegios mínimos. Con el fin de obtener más información sobre el uso de IAM para aplicar permisos, consulta Políticas y permisos en IAM en la Guía del usuario de IAM.
-
Utiliza condiciones en las políticas de IAM para restringir aún más el acceso: puedes agregar una condición a sus políticas para limitar el acceso a las acciones y los recursos. Por ejemplo, puedes escribir una condición de políticas para especificar que todas las solicitudes deben enviarse utilizando SSL. También puedes usar condiciones para conceder acceso a acciones de servicios si se emplean a través de un Servicio de AWS determinado como, por ejemplo, AWS CloudFormation. Para obtener más información, consulta Elementos de la política de JSON de IAM: Condición en la Guía del usuario de IAM.
-
Utiliza el analizador de acceso de IAM para validar las políticas de IAM con el fin de garantizar la seguridad y funcionalidad de los permisos: el analizador de acceso de IAM valida políticas nuevas y existentes para que respeten el lenguaje (JSON) de las políticas de IAM y las prácticas recomendadas de IAM. El analizador de acceso de IAM proporciona más de 100 verificaciones de políticas y recomendaciones procesables para ayudar a crear políticas seguras y funcionales. Para más información, consulte Validación de políticas con el Analizador de acceso de IAM en la Guía del usuario de IAM.
-
Solicite la autenticación multifactor (MFA): si se encuentra en una situación en la que necesite usuarios raíz o de IAM en su Cuenta de AWS, active la MFA para obtener una mayor seguridad. Para exigir la MFA cuando se invoquen las operaciones de la API, añada condiciones de MFA a sus políticas. Para más información, consulte Acceso seguro a la API con MFA en la Guía del usuario de IAM.
Para obtener más información sobre las prácticas recomendadas de IAM, consulte Prácticas recomendadas de seguridad en IAM en la Guía del usuario de IAM.
Cómo permitir a los usuarios consultar sus propios permisos
En este ejemplo, se muestra cómo podría crear una política que permita a los usuarios de IAM ver las políticas gestionadas e insertadas que se asocian a la identidad de sus usuarios. Esta política incluye permisos para llevar a cabo esta acción en la consola o mediante programación con la AWS CLI o la API de AWS.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ViewOwnUserInfo",
"Effect": "Allow",
"Action": [
"iam:GetUserPolicy",
"iam:ListGroupsForUser",
"iam:ListAttachedUserPolicies",
"iam:ListUserPolicies",
"iam:GetUser"
],
"Resource": ["arn:aws:iam::*:user/${aws:username}"]
},
{
"Sid": "NavigateInConsole",
"Effect": "Allow",
"Action": [
"iam:GetGroupPolicy",
"iam:GetPolicyVersion",
"iam:GetPolicy",
"iam:ListAttachedGroupPolicies",
"iam:ListGroupPolicies",
"iam:ListPolicyVersions",
"iam:ListPolicies",
"iam:ListUsers"
],
"Resource": "*"
}
]
}
Permisos sencillos de lectura
Esta política de ejemplo otorga a un usuario permiso para obtener información acerca de todos los recursos de una API HTTP o WebSocket con el identificador de a123456789
en la región de AWS us-east-1. El recurso arn:aws:apigateway:
incluye todos los subrecursos de la API, como autorizadores e implementaciones.us-east-1
::/apis/a123456789/*
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"apigateway:GET"
],
"Resource": [
"arn:aws:apigateway:us-east-1
::/apis/a123456789/*"
]
}
]
}
Crear solo autorizadores REQUEST o JWT
Esta política de ejemplo permite a un usuario crear API con solo autorizadores REQUEST
o JWT
, incluso mediante import. En la sección Resource
de la política, arn:aws:apigateway:us-east-1::/apis/??????????
requiere que los recursos tengan un máximo de 10 caracteres, lo que excluye los subrecursos de una API. Este ejemplo utiliza ForAllValues
en la sección Condition
porque los usuarios pueden crear varios autorizadores a la vez mediante la importación de una API.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OnlyAllowSomeAuthorizerTypes",
"Effect": "Allow",
"Action": [
"apigateway:PUT",
"apigateway:POST",
"apigateway:PATCH"
],
"Resource": [
"arn:aws:apigateway:us-east-1::/apis",
"arn:aws:apigateway:us-east-1::/apis/??????????",
"arn:aws:apigateway:us-east-1::/apis/*/authorizers",
"arn:aws:apigateway:us-east-1::/apis/*/authorizers/*"
],
"Condition": {
"ForAllValues:StringEqualsIfExists": {
"apigateway:Request/AuthorizerType": [
"REQUEST",
"JWT"
]
}
}
}
]
}
Requerir que el punto de enlace predeterminado execute-api
esté deshabilitado
Esta política de ejemplo permite a los usuarios crear, actualizar o importar una API, con el requisito de que DisableExecuteApiEndpoint
es true
. Cuando DisableExecuteApiEndpoint
es true
, los clientes no pueden utilizar el punto de enlace predeterminado execute-api
para invocar una API.
Utilizamos la condición BoolIfExists
para manejar una llamada para actualizar una API que no tiene la clave de condición DisableExecuteApiEndpoint
completa. Cuando un usuario intenta crear o importar una API, la clave de condición DisableExecuteApiEndpoint
siempre se completa.
Debido a que el recurso apis/*
también captura subrecursos, como autorizadores o métodos, explícitamente lo aplicamos a las API con una instrucción Deny
.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DisableExecuteApiEndpoint",
"Effect": "Allow",
"Action": [
"apigateway:PATCH",
"apigateway:POST",
"apigateway:PUT"
],
"Resource": [
"arn:aws:apigateway:us-east-1::/apis",
"arn:aws:apigateway:us-east-1::/apis/*"
],
"Condition": {
"BoolIfExists": {
"apigateway:Request/DisableExecuteApiEndpoint": true
}
}
},
{
"Sid": "ScopeDownToJustApis",
"Effect": "Deny",
"Action": [
"apigateway:PATCH",
"apigateway:POST",
"apigateway:PUT"
],
"Resource": [
"arn:aws:apigateway:us-east-1::/apis/*/*"
]
}
]
}
Permitir a los usuarios crear o actualizar solo API REST privadas
En esta política de ejemplo se utiliza una clave de condición para requerir que un usuario cree solo API PRIVATE
y para evitar actualizaciones que puedan cambiar una API de PRIVATE
a otro tipo, como REGIONAL
.
Utilizamos ForAllValues
para requerir que cada EndpointType
que se agregue a una API sea PRIVATE
. Utilizamos una clave de condición de recurso para permitir cualquier actualización de una API siempre que sea PRIVATE
. ForAllValues
se aplica solo si una clave de condición está presente.
Utilizamos la herramienta de coincidencia no codiciosa (?
) para hacer coincidir explícitamente los ID de API para evitar que se permitan recursos que no sean API, como los autorizadores.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ScopePutToPrivateApis",
"Effect": "Allow",
"Action": [
"apigateway:PUT"
],
"Resource": [
"arn:aws:apigateway:us-east-1::/restapis",
"arn:aws:apigateway:us-east-1::/restapis/??????????"
],
"Condition": {
"ForAllValues:StringEquals": {
"apigateway:Resource/EndpointType": "PRIVATE"
}
}
},
{
"Sid": "ScopeToPrivateApis",
"Effect": "Allow",
"Action": [
"apigateway:DELETE",
"apigateway:PATCH",
"apigateway:POST"
],
"Resource": [
"arn:aws:apigateway:us-east-1::/restapis",
"arn:aws:apigateway:us-east-1::/restapis/??????????"
],
"Condition": {
"ForAllValues:StringEquals": {
"apigateway:Request/EndpointType": "PRIVATE",
"apigateway:Resource/EndpointType": "PRIVATE"
}
}
},
{
"Sid": "AllowResourcePolicyUpdates",
"Effect": "Allow",
"Action": [
"apigateway:UpdateRestApiPolicy"
],
"Resource": [
"arn:aws:apigateway:us-east-1::/restapis/*"
]
}
]
}
Requerir que las rutas API tengan autorización
Esta política hace que los intentos de crear o actualizar una ruta (incluso mediante import) falle si la ruta no tiene autorización. ForAnyValue
lo evalúa como falso si la clave no está presente, tal como cuando no se crea o actualiza una ruta. Utilizamos ForAnyValue
porque se pueden crear varias rutas a través de la importación.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdatesOnApisAndRoutes",
"Effect": "Allow",
"Action": [
"apigateway:POST",
"apigateway:PATCH",
"apigateway:PUT"
],
"Resource": [
"arn:aws:apigateway:us-east-1::/apis",
"arn:aws:apigateway:us-east-1::/apis/??????????",
"arn:aws:apigateway:us-east-1::/apis/*/routes",
"arn:aws:apigateway:us-east-1::/apis/*/routes/*"
]
},
{
"Sid": "DenyUnauthorizedRoutes",
"Effect": "Deny",
"Action": [
"apigateway:POST",
"apigateway:PATCH",
"apigateway:PUT"
],
"Resource": [
"arn:aws:apigateway:us-east-1::/apis",
"arn:aws:apigateway:us-east-1::/apis/*"
],
"Condition": {
"ForAnyValue:StringEqualsIgnoreCase": {
"apigateway:Request/RouteAuthorizationType": "NONE"
}
}
}
]
}
Evitar que un usuario cree o actualice un enlace VPC
Esta política evita que un usuario cree o actualice un enlace VPC. Un enlace de VPC le permite exponer los recursos dentro de una Amazon VPC a clientes que están fuera de la VPC.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyVPCLink",
"Effect": "Deny",
"Action": [
"apigateway:POST",
"apigateway:PUT",
"apigateway:PATCH"
],
"Resource": [
"arn:aws:apigateway:us-east-1
::/vpclinks",
"arn:aws:apigateway:us-east-1
::/vpclinks/*"
]
}
]
}