Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Para administrar las características de políticas es necesario acceder a la sección de IAM de AWS.
Básicamente el uso de políticas permite gestionar las solicitudes de acceso hacia recursos dentro
de AWS, es decir, gestiona quién accede a que recursos validando si es que tiene o no tiene acceso
o permisos para realizar alguna acción.
Para comenzar contamos con 4 principales elementos: IAM, Cuenta Root(Cuenta main default
desde la cual se inicia la delegación de permisos), Users(Elementos usuario que interactúan con los
diferentes elementos de aws) y Groups(Contenedor de users).
Políticas: Las políticas se crean como una estructura en formato Json y definen los permisos,
preferentemente debe usarse el principio de privilegios minimos.
Aws recomienda no utilizar la root account para administar sino más bien, recomienda
Analizando código del allow-secret-access.ts
import yargs from 'yargs';
import {Generic} from "../utils/Generic";
import {IAMController} from "../controllers/IAMController";
import {ServiceConfiguration} from "../interfaces/ServiceConfiguration";
import {ServiceFactory} from "../services/ServiceFactory";
import {SecretsManagerController} from
"../controllers/SecretsManagerController";
import {KMSController} from "../controllers/KMSController";
controller.getService().getRolePolicy({
RoleName: role,
PolicyName: role
}).then(async data => {
const policyDocument =
Generic.getPolicyDocument(data.PolicyDocument);
const sid = 'secretAccess';
const referencePath = 'aws/reference/secretsmanager/';
const resources: string[] = [];
const secretsManagerController = new
SecretsManagerController(config);
const kmsController = new KMSController(config);
if (data.KmsKeyId) {
await kmsController.getService().describeKey({
KeyId: data.KmsKeyId
}).then(data => {
if (data.KeyMetadata && data.KeyMetadata.Arn)
if (!resources.includes(data.KeyMetadata.Arn))
resources.push(data.KeyMetadata.Arn);
}).catch(error => Generic.logError(error,
'describeKey'));
}
}).catch(error => Generic.logError(error, 'describeSecret'));
}
if (policyDocument.Statement) {
const statement = policyDocument.Statement.find(statement =>
statement.Sid === sid);
if (statement)
statement.Resource =
statement.Resource.concat(resources.filter(resource => !
statement.Resource.includes(resource)));
else {
policyDocument.Statement.push({
Sid: sid,
Effect: 'Allow',
Action: [
'ssm:GetParameter',
'kms:Decrypt',
'secretsManager:GetSecretValue'
],
Resource: resources
});
}
}
await controller.getService().putRolePolicy({
RoleName: role,
PolicyName: role,
PolicyDocument: JSON.stringify(policyDocument)
}).then(() => {
Generic.logMessage(`${role} now has access to ${secrets.join('
')}`);
}).catch(error => Generic.logError(error, 'putRolePolicy'));
}).catch(error => Generic.logError(error, 'getRolePolicy'));
JFROG
Start
Siguiente
palabra reléase
Aca en Maven se crean dos locales, solo uno de remoto y dos virtuales (reléase y snapshot)
Ahora virtuales:
Acá solo cargamos el de desarrollo y el remoto, el snapshot no
Tenemos esto:
Psss ya es lo mismo
Asi ya tenemos repos para Android, java, npm, nos falta los de cocoa
Esos tienen su particularidad, solo locales y remotos, no hay virtuales, pero se crean igual.
Luego Maven:
Luego el de cocoa:
Y ya tenemos todos:
Permissions
New permisos
Agregamos los repos
Un grupo tienen permisos d electura y despliegue, de los repos gradle locales en este ejemplo.
32 caracteres
Repositorios de dev, users, agregar kis repos commons son repos en donde todos comparten
librerías específicas agregar a todos los readers
Falta agregar esos users al codebuild y al secret.
Seleccionamos el secret value, ahí están todos los secrets, los JFROG_
Ahí esta la url donde estamos parados, en el clave valor se le agrega el devops: VALUE
Le damos update y codebuild ya esta preparado para poder hacer los deploys para JFROG, siempre
y cuando ellos hagan referencia a los users definidos en las variables de entorno.
Esas variables también se configuran en Jenkins, ya dependerá de cada nodo, deberían quedar.
Jfrog artifactos, dependencias, librerías, frameworks van a vivir en esta plataforma que están
hechos en casa, para evitar la parte dónde se hace la descarga, instalación local del Jar y se hace el
npm package.
¿Qué es un layer AWS? Para evitar estar repitiendo fragmentos de código, un layer es cpodigo
existente que se atacha en tu lambda, es como si descragaramos una dependencia.
Esto puede aplicar para sdks de Android, librerías de npm, IOS, Maven Java.
La idea es que todo aquello que se vaya a reuilizar no se tengan que estar pasando el jar en cada
proyecto, para evitar eso, usaremos Jfrog, estando ahpi disponible para cualquier lambda. Los
contras de un Layer, solo puedes atachar 5 layers a una lambda. Aunque tu jar de tu lambda se
pasa del máximo 270Mb creo es lo máximo aceptado en una lambda.
Ahora en la visat de los builds muestra tpodas las compilaciones que hemos hecho
Y si accedo a el
Me muestra dellaes, en la view anterior dónde entramos desde el repo me lleva al build.
El menú de artifacts es el que usaremos más seguido, acá me enseña los artifactos por repositorio
Y así tienen una vista más amplia de su repo:
Talntport tendrá un repo por tecnologpia, uno para mavebn, gradel, uno para, cocoapods,
Python(no existe de momemnto), npm, pero actualmente y habrá uno por cada ambiente,
talentport-Maven-{environment}
Tenemos 3 tipos de repo en Jfrog, local: aquí se despliegan librerías(base de datos, acceso a secret,
download files) librerías para trabajo interno no se puedan exponer al publico, virtual: une los
remostos con los locales, por ejemplo si tenemos 3 repos locales para talentport, que se quieren
tener separadospero al final se quieren usar los 3 locales, y además un remoto, así trabaja solo
como un repo, es decir los 3 locales más el remoto quedan en uno solo y finalmente el remoto:
espejo del repo provado o virtual que alguien nos proporciona, en Maven siempre van hacia el
repo central de maven, npm van a registri, cocoapods hacia github, dependencias de terceros de
internet.
¿Quién usa el local? R=codebuild, nadie más. Todo lo local debe ir por pipeline.
Crear un user
Descargar un repo
Vamos a trabajar todo que es releases, con el mismo repo
Trabajando con el repo asociado y para los snapshtots, teneos nuestro repo de snapshot,
praeciera que spn 4 pero al final solo serán 2
En el pom se referencia a esa librería, mvn package, o build o install y el archi este se añade
Para cocoapods
Y en nuestro pod file agreganmmos
Para IOS es diferente, no existen virtuales, solo locales y remotos, pero el proceso es similar.
Aunque acá se agregan locales y remotos.
Aquí se agregan repositorios remotos y locales.
Y corre comandos, crea el cliente glogaal de jfrog, sig línea jfrogconfigure agrega nueva config,
variables de entorno de la maquina virtual de codebuild passwors y url que no sea interactiva la
configuración. Siguiente línea, cual será el repo de consultas, cualquiera que es gradele, npm
usamos los virtuales igual ya está configurado para no moverle nada, buscamos los artifactos
virtuales, donde se van a desplegar los cambios y d+onde se despliegan los repos de snapshots, lo
único que se cambia es la parte del user JFROG_{PROYECTO}, la url es la misma para todos los
proyects
Borra las dependencias con el mismo name y misma versión y luego ese podemos ver los datos en
el build_id en JFrog, debemos tener cuidado con el versionado semántico 2.0.0, no se podrán
sobreescribir versiones.
Si alguien la caga, les dirá que no tienen permisos de sobreescritura, luego vamos al repo local y
podríamos ver la nueva dependencia, lo siguiente es generar el output templeate que es el que
usará ecloudformation para desplegar
Que archivos ocupamos en cloudformation para desplegar el layer
Eroores:
1.-
No existia el user anterior, se inetntab accaeder desde las variables de entorno, pero el secret
tenia al user viejo en lugar del nuevo, solo lo actualizo
2.-
Rechazado el artifacto, porque excluye ciertas rutas, la lirería era com.infra solo debía recibir
com.upax.infra error de configuración solo se lo quitó
MRC:
Se le da en Ok
Nos vamos a codepipeline y le das en crear canalización, con el mismo nombre del proyecto.
Debe ser el arn rol devops
Configuración avcanzada
Ahora si siguiente
En proveedor de origen vanmos a buscar el repo del pipelien se queda con codecommit
Y predeterminadps
Project name el mismo que el name del repo y el path lo sacamos de la url
Siguiente
mobile/ios/sdk/{nombre_objeto_pipeline}.tar.gz
Tar.gz, no confucnir con la imagen
Configuración adicional:
arn:aws:kms:us-east-1:197631145735:alias/devops
Ahí esta
En Jenkins en historia de tareas vemos si hay un nuevo build
La hira que nos muestra es la ec2 de jenkis o la utc de USA, NOS APARECE UNA DOCUMENTACION
Apara validar al darle click en el linbk de la fase 2
Nos deja cver que está vinculado correctamentes, nos dice que se logro compilar
¿Qué pasa si alguien la caga y le pone los datos de otra cuenta al desplegar desde el build?