Esta es la guía para AWS CDK desarrolladores de la versión 2. La CDK versión anterior entró en mantenimiento el 1 de junio de 2022 y finalizó el soporte el 1 de junio de 2023.
Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Los permisos y la AWS CDK
La biblioteca AWS Construct utiliza algunos modismos comunes y ampliamente implementados para administrar el acceso y los permisos. El IAM módulo le proporciona las herramientas que necesita para usar estos modismos.
AWS CDK utiliza AWS CloudFormation para implementar cambios. Cada implementación involucra a un actor (ya sea un desarrollador o un sistema automatizado) que inicia una AWS CloudFormation implementación. Al hacerlo, el actor asumirá una o más IAM identidades (usuario o roles) y, opcionalmente, pasará un rol a AWS CloudFormation.
Si lo utilizas AWS IAM Identity Center para autenticarte como usuario, el proveedor de inicio de sesión único proporciona credenciales de sesión de corta duración que te autorizan a actuar como un rol predefinido. IAM Para obtener información sobre cómo AWS CDK obtiene las AWS credenciales de la autenticación de IAM Identity Center, consulte Descripción de la autenticación de IAMIdentity Center en la Guía de referencia de herramientas y herramientas.AWS SDKs
Entidades principales
Un IAM principal es una AWS entidad autenticada que representa a un usuario, servicio o aplicación a la que puede llamar. AWS APIs La biblioteca AWS Construct permite especificar los directores de varias formas flexibles para permitirles acceder a sus AWS recursos.
En contextos de seguridad, el término «principal» se refiere específicamente a las entidades autenticadas, como los usuarios. Los objetos, como los grupos y las funciones, no representan a los usuarios (ni a otras entidades autenticadas), sino que los identifican indirectamente con el fin de conceder permisos.
Por ejemplo, si creas un IAM grupo, puedes conceder al grupo (y, por tanto, a sus miembros) acceso de escritura a una RDS tabla de Amazon. Sin embargo, el grupo en sí no es un principal porque no representa a una sola entidad (además, no puedes iniciar sesión en un grupo).
En CDK la IAM biblioteca, las clases que identifican directa o indirectamente a los principales implementan la IPrincipal
interfaz, lo que permite que estos objetos se usen indistintamente en las políticas de acceso. Sin embargo, no todos son principales en el sentido de la seguridad. Estos objetos incluyen:
-
Principios de servicio ()
new iam.ServicePrincipal('service.amazonaws.com')
-
Directores federados ()
new iam.FederatedPrincipal('cognito-identity.amazonaws.com')
-
Responsables de cuentas (
new iam.AccountPrincipal('0123456789012'))
-
Principales de usuario canónicos ()
new iam.CanonicalUserPrincipal('79a59d[...]7ef2be')
-
AWS Organizations directores ()
new iam.OrganizationPrincipal('org-id')
-
ARNPrincipios arbitrarios ()
new iam.ArnPrincipal(res.arn)
-
Y
iam.CompositePrincipal(principal1, principal2, ...)
confiar en varios directores
Concesiones
Cada construcción que representa un recurso al que se puede acceder, como un bucket de Amazon S3 o una tabla de Amazon DynamoDB, tiene métodos que conceden acceso a otra entidad. Todos estos métodos tienen nombres que comienzan por grant.
Por ejemplo, los buckets de Amazon S3 tienen los métodos grantRead
y grantReadWrite
(Python:grant_read
,grant_read_write
) para permitir el acceso de lectura y lectura/escritura, respectivamente, desde una entidad al bucket. La entidad no necesita saber exactamente qué IAM permisos de Amazon S3 son necesarios para realizar estas operaciones.
El primer argumento de un método de concesión es siempre el tipo IGrantable. Esta interfaz representa las entidades a las que se les pueden conceder permisos. Es decir, representa los recursos con funciones, como los IAM objetos Role
User
, yGroup
.
También se pueden conceder permisos a otras entidades. Por ejemplo, más adelante en este tema, mostraremos cómo conceder a un CodeBuild proyecto acceso a un bucket de Amazon S3. Por lo general, el rol asociado se obtiene a través de una role
propiedad de la entidad a la que se concede el acceso.
Los recursos que utilizan funciones de ejecución, por ejemplolambda.Function
, también se implementanIGrantable
, por lo que puedes concederles acceso directamente en lugar de concederles acceso a su función. Por ejemplo, si bucket
es un bucket de Amazon S3 y function
es una función Lambda, el siguiente código concede a la función acceso de lectura al bucket.
A veces, los permisos se deben aplicar mientras se implementa la pila. Uno de estos casos es cuando concedes a un recurso AWS CloudFormation personalizado acceso a otro recurso. El recurso personalizado se invocará durante la implementación, por lo que debe tener los permisos especificados en el momento de la implementación.
Otro caso es cuando un servicio verifica que la función que se le transfiere tiene aplicadas las políticas correctas. (Varios AWS servicios lo hacen para asegurarse de que no te olvides de configurar las políticas). En esos casos, la implementación podría fallar si los permisos se aplican demasiado tarde.
Para forzar la aplicación de los permisos de la concesión antes de crear otro recurso, puedes añadir una dependencia a la propia concesión, como se muestra aquí. Si bien el valor devuelto por los métodos de concesión suele descartarse, de hecho, todos los métodos de concesión devuelven un iam.Grant
objeto.
Roles
El IAM paquete contiene una Role
construcción que representa IAM los roles. El siguiente código crea un nuevo rol, de confianza en el EC2 servicio de Amazon.
Puede agregar permisos a un rol llamando al addToPolicy
método del rol (Python:add_to_policy
) y pasando una PolicyStatement
que defina la regla que se va a agregar. La declaración se agrega a la política predeterminada del rol; si no tiene ninguna, se crea una.
El siguiente ejemplo agrega una declaración de Deny
política al rol para las acciones ec2:SomeAction
y s3:AnotherAction
los recursos bucket
y otherRole
(Python:other_role
), con la condición de que el servicio autorizado lo sea AWS CodeBuild.
En el ejemplo anterior, hemos creado una nueva PolicyStatement
línea con la llamada addToPolicy
(Python:add_to_policy
). También puedes incluir una declaración de política existente o una que hayas modificado. El PolicyStatementobjeto tiene numerosos métodos para añadir principios, recursos, condiciones y acciones.
Si utiliza una construcción que requiere un rol para funcionar correctamente, puede realizar una de las siguientes acciones:
-
Transfiere un rol existente al crear una instancia del objeto de construcción.
-
Deje que la construcción cree un nuevo rol para usted, confiando en el director de servicio apropiado. En el ejemplo siguiente se utiliza una construcción de este tipo: un CodeBuild proyecto.
Una vez creado el objeto, el rol (ya sea el rol transferido o el predeterminado creado por la construcción) está disponible como propiedadrole
. Sin embargo, esta propiedad no está disponible en los recursos externos. Por lo tanto, estas construcciones tienen un método addToRolePolicy
(Python:add_to_role_policy
).
El método no hace nada si la construcción es un recurso externo y, de lo contrario, llama al método addToPolicy
(Python:add_to_policy
) de la role
propiedad. Esto le ahorra la molestia de tratar el caso indefinido de forma explícita.
El siguiente ejemplo demuestra lo siguiente:
Políticas de recursos
Algunos recursos AWS, como los buckets y las IAM funciones de Amazon S3, también tienen una política de recursos. Estas construcciones tienen un addToResourcePolicy
método (Python:add_to_resource_policy
), que toma a PolicyStatement
como argumento. Cada declaración de política agregada a una política de recursos debe especificar al menos un principal.
En el siguiente ejemplo, el bucket de Amazon S3 se bucket
otorga un rol con el s3:SomeAction
permiso para sí mismo.
Uso de IAM objetos externos
Si has definido un IAM usuario, director, grupo o rol fuera de AWS CDK la aplicación, puedes usar ese IAM objeto en AWS CDK la aplicación. Para ello, crea una referencia al mismo con su ARN nombre. (Use el nombre para los usuarios, grupos y roles). Luego, la referencia devuelta se puede usar para conceder permisos o para elaborar declaraciones de políticas, como se explicó anteriormente.
-
Para los usuarios, llame
User.fromUserArn()
oUser.fromUserName()
.User.fromUserAttributes()
también está disponible, pero actualmente ofrece la misma funcionalidad queUser.fromUserArn()
. -
Para los principales, cree una instancia de un objeto.
ArnPrincipal
-
Para grupos, llama o.
Group.fromGroupArn()
Group.fromGroupName()
-
Para funciones, llama
Role.fromRoleArn()
oRole.fromRoleName()
.
Las políticas (incluidas las políticas gestionadas) se pueden utilizar de forma similar mediante los siguientes métodos. Puede utilizar las referencias a estos objetos en cualquier lugar donde se requiera una IAM política.
nota
Como ocurre con todas las referencias a AWS recursos externos, no puedes modificar IAM objetos externos en tu CDK aplicación.