Configuración avanzada - AWS CodeBuild

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.

Configuración avanzada

Si sigue los pasos de Primeros pasos con la consola para acceder a AWS CodeBuild por primera vez, lo más probable es que no necesite la información de este tema. Sin embargo, si sigue usando CodeBuild, es posible que quiera realizar algunas acciones, como conceder a los grupos y usuarios de IAM de su organización acceso a CodeBuild, modificar los roles de servicio existentes en IAM o AWS KMS keys para acceder a CodeBuild, o configurar AWS CLI en las estaciones de trabajo de su organización para acceder a CodeBuild. En este tema se describe cómo realizar los pasos de configuración relacionados.

En él se presupone que ya tiene una cuenta de AWS. No obstante, si todavía no tiene una, vaya a http://aws.amazon.com, elija Sign In to the Console y siga las instrucciones en línea.

Agregar permisos de acceso de CodeBuild a un grupo o un usuario de IAM

Para acceder a AWS CodeBuild con un grupo o un usuario de IAM, debe agregar permisos de acceso. En esta sección, se describe cómo hacer esto con la consola de IAM o la AWS CLI.

Si va a obtener acceso a CodeBuild con una cuenta de usuario raíz de AWS (no se recomienda) o un usuario administrador de la cuenta de AWS, no es necesario que siga estas instrucciones.

Para obtener información sobre las cuentas de usuario raíz y los usuarios administradores de AWS, consulte El usuario raíz de Cuenta de AWS y Creación del primer usuario raíz y grupo de Cuenta de AWS en la Guía del usuario.

Para añadir permisos de acceso de CodeBuild a un grupo o a un usuario de IAM (consola)
  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

    Debe haber iniciado sesión en la AWS Management Console con alguna de las entidades siguientes:

  2. En el panel de navegación, seleccione Policies (Políticas).

  3. Para añadir un conjunto personalizado de permisos de acceso de AWS CodeBuild a un grupo o a un usuario de IAM, vaya al paso 4 de este procedimiento.

    Para añadir un conjunto predeterminado de permisos de acceso de CodeBuild a un grupo o a un usuario de IAM, seleccione Tipo de política, Administrada por AWS y, a continuación, haga lo siguiente:

    • Para agregar permisos de acceso completo a CodeBuild, seleccione el cuadro AWSCodeBuildAdminAccess, elija Acciones de la política y, a continuación, elija Asociar. Active la casilla situada junto al grupo o el usuario de IAM de destino y, a continuación, seleccione Asociar política. Repita esta operación para las políticas denominadas AmazonS3ReadOnlyAccess e IAMFullAccess.

    • Si desea agregar permisos de acceso a CodeBuild para todo excepto para la administración del proyecto de compilación, seleccione la casilla AWSCodeBuildDeveloperAccess, seleccione Acciones de la política y, a continuación, Asociar. Active la casilla situada junto al grupo o el usuario de IAM de destino y, a continuación, seleccione Asociar política. Repita esta operación para la política AmazonS3ReadOnlyAccess.

    • Para añadir permisos de solo lectura a CodeBuild, active las casillas AWSCodeBuildReadOnlyAccess. Active la casilla situada junto al grupo o el usuario de IAM de destino y, a continuación, seleccione Asociar política. Repita esta operación para la política AmazonS3ReadOnlyAccess.

    Ahora ha añadido un conjunto predeterminado de permisos de acceso de CodeBuild a un grupo o a un usuario de IAM. Omita el resto de los pasos de este procedimiento.

  4. Elija Create Policy (Crear política).

  5. En la página Create Policy, junto a Create Your Own Policy, elija Select.

  6. En la página Review Policy (Revisar política), en Policy Name (Nombre de política), escriba un nombre para la política (por ejemplo, CodeBuildAccessPolicy). Si elige otro nombre, no olvide utilizarlo durante todo este procedimiento.

  7. En Policy Document (Documento de la política), escriba lo siguiente y elija Create Policy (Crear política).

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccessPolicy", "Effect": "Allow", "Action": [ "codebuild:*" ], "Resource": "*" }, { "Sid": "CodeBuildRolePolicy", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-ID:role/role-name" }, { "Sid": "CloudWatchLogsAccessPolicy", "Effect": "Allow", "Action": [ "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Sid": "S3AccessPolicy", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:List*", "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    nota

    Esta política permite el acceso a todas las acciones de CodeBuild y a un número potencialmente grande de recursos de AWS. Para restringir los permisos a acciones de CodeBuild específicas, cambie el valor de codebuild:* en la instrucción de política de CodeBuild. Para obtener más información, consulte Administración de identidades y accesos. Para restringir el acceso a recursos de AWS específicos, cambie el valor del objeto Resource. Para obtener más información, consulte Administración de identidades y accesos.

    La declaración CodeBuildRolePolicy es necesaria para permitir la creación o modificación de un proyecto de compilación.

  8. En el panel de navegación, elija Groups o Users.

  9. En la lista de grupos o usuarios, elija el nombre del grupo o el usuario de IAM al que desea añadir permisos de acceso de CodeBuild.

  10. Si se trata de un grupo, en la página de configuración del grupo, en la pestaña Permissions (Permisos), expanda Managed Policies (Políticas administradas) y elija Attach Policy (Asociar política).

    Para un usuario, en la página de configuración del usuario, en la pestaña Permissions, seleccione Add permissions.

  11. En un grupo, en la página Asociar política, seleccione CodeBuildAccessPolicy y haga clic en Asociar política.

    Para un usuario, en la página Añadir permisos, elija Asociar políticas existentes directamente. Seleccione AccessCodeBuildAccessPolicy, Siguiente: revisión y Añadir permisos.

Para añadir permisos de acceso de CodeBuild a un grupo o a un usuario de IAM (AWS CLI)
  1. Asegúrese de que ha configurado la AWS CLI con la clave de acceso de AWS y la clave de acceso secreta de AWS correspondientes a alguna de las entidades de IAM, tal y como se ha descrito en el procedimiento anterior. Para obtener más información, consulte Configuración inicial de la AWS Command Line Interface en la Guía del usuario de AWS Command Line Interface.

  2. Para agregar un conjunto personalizado de permisos de acceso de AWS CodeBuild a un grupo o un usuario de IAM, vaya al paso 3 de este procedimiento.

    Para añadir un conjunto predeterminado de permisos de acceso de CodeBuild a un grupo o usuario de IAM, haga lo siguiente:

    Ejecute uno de los comandos siguientes, en función de si desea añadir permisos a un usuario o un grupo de IAM:

    aws iam attach-group-policy --group-name group-name --policy-arn policy-arn aws iam attach-user-policy --user-name user-name --policy-arn policy-arn

    Debe ejecutar el comando tres veces, reemplazando group-name o user-name por el nombre del grupo o de usuario de IAM, y reemplazando policy-arn una vez por cada uno de los siguientes nombres de recursos de Amazon (ARN) de políticas:

    • Para añadir permisos de acceso completos a CodeBuild, use los ARN de política siguientes:

      • arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess

      • arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

      • arn:aws:iam::aws:policy/IAMFullAccess

    • Para añadir permisos de acceso a CodeBuild para todo excepto para administrar proyectos de compilación, use los ARN de política siguientes:

      • arn:aws:iam::aws:policy/AWSCodeBuildDeveloperAccess

      • arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

    • Para añadir permisos de acceso de solo lectura a CodeBuild, use los ARN de política siguientes:

      • arn:aws:iam::aws:policy/AWSCodeBuildReadOnlyAccess

      • arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

    Ahora ha añadido un conjunto predeterminado de permisos de acceso de CodeBuild a un grupo o a un usuario de IAM. Omita el resto de los pasos de este procedimiento.

  3. En un directorio vacío de la estación de trabajo o la instancia local en la que esté instalada la AWS CLI, cree un archivo denominado put-group-policy.json o put-user-policy.json. Si elige otro nombre de archivo, no olvide utilizarlo durante todo este procedimiento.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccessPolicy", "Effect": "Allow", "Action": [ "codebuild:*" ], "Resource": "*" }, { "Sid": "CodeBuildRolePolicy", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-ID:role/role-name" }, { "Sid": "CloudWatchLogsAccessPolicy", "Effect": "Allow", "Action": [ "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Sid": "S3AccessPolicy", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:List*", "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    nota

    Esta política permite el acceso a todas las acciones de CodeBuild y a un número potencialmente grande de recursos de AWS. Para restringir los permisos a acciones de CodeBuild específicas, cambie el valor de codebuild:* en la instrucción de política de CodeBuild. Para obtener más información, consulte Administración de identidades y accesos. Para restringir el acceso a recursos de AWS específicos, cambie el valor del objeto Resource relacionado. Para obtener más información, consulte Administración de identidades y accesos o la documentación de seguridad del servicio de AWS específico.

    La declaración CodeBuildRolePolicy es necesaria para permitir la creación o modificación de un proyecto de compilación.

  4. Cambie al directorio donde ha guardado el archivo y, a continuación, ejecute uno de los siguientes comandos. Puede utilizar diferentes valores para CodeBuildGroupAccessPolicy y CodeBuildUserAccessPolicy. Si emplea valores diferentes, asegúrese de usarlos aquí.

    Para un grupo de IAM:

    aws iam put-group-policy --group-name group-name --policy-name CodeBuildGroupAccessPolicy --policy-document file://put-group-policy.json

    Para un usuario de :

    aws iam put-user-policy --user-name user-name --policy-name CodeBuildUserAccessPolicy --policy-document file://put-user-policy.json

    En los comandos anteriores, sustituya group-name o user-name por el nombre de grupo o de usuario de IAM de destino.

Crear un rol de servicio de CodeBuild

Necesita un rol de servicio de AWS CodeBuild para que CodeBuild pueda interactuar en su nombre con los servicios de AWS dependientes. Puede crear un rol de servicio de CodeBuild utilizando las consolas de CodeBuild o AWS CodePipeline. Para obtener información, consulte:

Si no tiene intención de utilizar estas consolas, en esta sección se describe cómo crear un rol de servicio de CodeBuild con la consola de IAM o la AWS CLI.

importante

CodeBuild utiliza el rol de servicio para todas las operaciones que se realizan en su nombre. Si el rol incluye permisos que el usuario no debería tener, puede escalar involuntariamente los permisos de un usuario. Asegúrese de que el rol concede privilegios mínimos.

El rol de servicio que se describe en esta página contiene una política que concede los permisos mínimos necesarios para utilizar CodeBuild. Es posible que tenga que añadir permisos adicionales en función del caso de uso.

Para crear un rol de servicio de CodeBuild (consola)
  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

    Debe haber iniciado sesión en la consola con alguna de las entidades siguientes:

    • Su cuenta raíz de AWS. No se recomienda. Para obtener más información, consulte El usuario raíz de Cuenta de AWS en la Guía del usuario.

    • Un usuario administrador en su cuenta de AWS. Para obtener más información, consulte Creación del primer usuario raíz y grupo de Cuenta de AWS en la Guía del usuario.

    • Un usuario en su cuenta de AWS con permiso para realizar el conjunto mínimo de acciones siguiente:

      iam:AddRoleToInstanceProfile iam:AttachRolePolicy iam:CreateInstanceProfile iam:CreatePolicy iam:CreateRole iam:GetRole iam:ListAttachedRolePolicies iam:ListPolicies iam:ListRoles iam:PassRole iam:PutRolePolicy iam:UpdateAssumeRolePolicy

      Para obtener más información, consulte Información general sobre las políticas de IAM en la Guía del usuario.

  2. En el panel de navegación, seleccione Policies (Políticas).

  3. Elija Create Policy (Crear política).

  4. En la página Create Policy, elija JSON.

  5. En la política JSON, escriba lo siguiente y elija Review Policy (Consultar política):

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsPolicy", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "CodeCommitPolicy", "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" }, { "Sid": "S3GetObjectPolicy", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*" }, { "Sid": "S3PutObjectPolicy", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "*" }, { "Sid": "ECRPullPolicy", "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" }, { "Sid": "ECRAuthPolicy", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    nota

    Esta política contiene instrucciones que permiten tener acceso a número potencialmente grande de recursos de AWS. Para restringir el acceso de AWS CodeBuild a recursos de AWS específicos, cambie el valor de la matriz Resource. Para obtener más información, consulte la documentación de seguridad del servicio de AWS.

  6. En la página Review Policy (Consultar política), en Policy Name (Nombre de la política), escriba un nombre para la política (por ejemplo, CodeBuildServiceRolePolicy) y elija Create policy (Crear política).

    nota

    Si elige otro nombre, no olvide utilizarlo durante todo este procedimiento.

  7. Seleccione Roles en el panel de navegación.

  8. Elija Create role (Crear rol).

  9. En la página Crear rol, con la opción Servicio AWS seleccionada, elija CodeBuild y después elija Siguiente: Permisos.

  10. En la página Asociar políticas de permisos, seleccione SerCodeBuildServiceRolePolicy y Siguiente: Revisión.

  11. En la página Create role and review (Crear función y revisar), en Role name (Nombre del rol), escriba un nombre para el rol (por ejemplo, CodeBuildServiceRole) y elija Create role (Crear rol).

Crear un rol de servicio de CodeBuild (AWS CLI)
  1. Asegúrese de que ha configurado la AWS CLI con la clave de acceso de AWS y la clave de acceso secreta de AWS correspondientes a alguna de las entidades de IAM, tal y como se ha descrito en el procedimiento anterior. Para obtener más información, consulte Configuración inicial de la AWS Command Line Interface en la Guía del usuario de AWS Command Line Interface.

  2. En un directorio vacío de la estación de trabajo o la instancia local donde se ha instalado la AWS CLI, cree dos archivos llamados create-role.json y put-role-policy.json. Si elige nombres de archivo diferentes, no olvide utilizarlos durante todo este procedimiento.

    create-role.json:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    nota

    Le recomendamos que utilice las claves de condición aws:SourceAccount y aws:SourceArn para protegerse contra el problema del suplente confuso. Por ejemplo, podría editar la política de confianza anterior con los bloques de condición siguientes. aws:SourceAccount es el propietario del proyecto de CodeBuild y aws:SourceArn es el ARN del proyecto de CodeBuild.

    Si desea restringir su rol de servicio a una cuenta de AWS, create-role.json podría tener un aspecto similar al siguiente:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": [ "account-ID" ] } } } ] }

    Si desea restringir su rol de servicio a un proyecto específico de CodeBuild, create-role.json podría tener un aspecto similar al siguiente:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:codebuild:region-ID:account-ID:project/project-name" } } } ] }
    nota

    Si no conoce o no ha elegido un nombre para su proyecto de CodeBuild y desea una restricción de la política de confianza para un patrón de ARN en particular, puede reemplazar esa parte del ARN por un comodín (*). Después de crear el proyecto, puede actualizar la política de confianza.

    put-role-policy.json:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsPolicy", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "CodeCommitPolicy", "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" }, { "Sid": "S3GetObjectPolicy", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*" }, { "Sid": "S3PutObjectPolicy", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    nota

    Esta política contiene instrucciones que permiten tener acceso a número potencialmente grande de recursos de AWS. Para restringir el acceso de AWS CodeBuild a recursos de AWS específicos, cambie el valor de la matriz Resource. Para obtener más información, consulte la documentación de seguridad del servicio de AWS.

  3. Cambie al directorio donde guardó los archivos anteriores y, a continuación, ejecute los dos comandos siguientes, uno cada vez, en este orden. Puede utilizar valores diferentes para CodeBuildServiceRole y CodeBuildServiceRolePolicy, pero no olvide emplearlos aquí.

    aws iam create-role --role-name CodeBuildServiceRole --assume-role-policy-document file://create-role.json
    aws iam put-role-policy --role-name CodeBuildServiceRole --policy-name CodeBuildServiceRolePolicy --policy-document file://put-role-policy.json

Creación y configuración de una clave administrada por el cliente para CodeBuild

Para que AWS CodeBuild cifre los artefactos de salida de la compilación, necesita acceso a una clave KMS. De forma predeterminada, CodeBuild utiliza Clave administrada de AWS para Amazon S3 en su cuenta de AWS.

Si no desea utilizar la Clave administrada de AWS, debe crear y configurar una clave administrada por el cliente por su cuenta. En esta sección se describe cómo hacer esto con la consola de IAM.

Para obtener más información acerca de las claves administradas por el cliente, consulte Conceptos de AWS Key Management Service y Creación de claves en la Guía para desarrolladores de AWS KMS.

Si desea configurar una clave administrada por el cliente para utilizarla en CodeBuildServiceRolePolicy, siga las instrucciones que se indican en la sección "Cómo modificar una política de claves" de Modificación de una política de claves en la Guía para desarrolladores de AWS KMS. A continuación, añada las siguientes instrucciones (entre ### BEGIN ADDING STATEMENTS HERE ### y ### END ADDING STATEMENTS HERE ###) a la política de la clave. Los puntos suspensivos (...) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir las instrucciones. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política de la clave.

{ "Version": "2012-10-17", "Id": "...", "Statement": [ ### BEGIN ADDING STATEMENTS HERE ### { "Sid": "Allow access through Amazon S3 for all principals in the account that are authorized to use Amazon S3", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "s3.region-ID.amazonaws.com", "kms:CallerAccount": "account-ID" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-ID:role/CodeBuild-service-role" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, ### END ADDING STATEMENTS HERE ### { "Sid": "Enable IAM User Permissions", ... }, { "Sid": "Allow access for Key Administrators", ... }, { "Sid": "Allow use of the key", ... }, { "Sid": "Allow attachment of persistent resources", ... } ] }
  • region-ID representa el ID de la región de AWS donde se encuentran los buckets de Amazon S3 asociados a CodeBuild (por ejemplo, us-east-1).

  • account-ID representa el ID de la cuenta de AWS que posee la clave administrada por el cliente.

  • CodeBuild-service-role representa el nombre del rol de servicio de CodeBuild que se ha creado o identificado anteriormente en este tema.

nota

Para crear o configurar una clave administrada por el cliente a través de la consola de IAM, primero debe iniciar sesión en AWS Management Console utilizando alguna de las opciones siguientes:

Instalación y configuración de AWS CLI

Para acceder a AWS CodeBuild, puede utilizar la AWS CLI con (o en lugar de) la consola de CodeBuild, la consola de CodePipeline o los SDK de AWS. Para instalar y configurar la AWS CLI, consulte Instalación de AWS Command Line Interface en la Guía del usuario de AWS Command Line Interface.

  1. Ejecute el comando siguiente para confirmar si la instalación de AWS CLI admite CodeBuild:

    aws codebuild list-builds

    Si el comando se ejecuta correctamente, aparecerá información similar a la siguiente en el resultado:

    { "ids": [] }

    Los corchetes vacíos indican que aún no ha ejecutado ninguna compilación.

  2. Si se produce un error, debe desinstalar la versión actual de la AWS CLI y, a continuación, instalar la versión más reciente. Para obtener más información, consulte el tema acerca de cómo desinstalar la AWS CLI y cómo instalar la AWS Command Line Interface en la Guía del usuario de AWS Command Line Interface.