投稿時間:2022-04-10 10:12:25 RSSフィード2022-04-10 10:00 分まとめ(12件)

カテゴリー等 サイト名等 記事タイトル・トレンドワード等 リンクURL 頻出ワード・要約等/検索ボリューム 登録日
TECH Techable(テッカブル) 聞こえの悩みを抱えている人向け! 補聴器とイヤホンの機能を備える「Olive Max」 https://techable.jp/archives/176565 indiegogo 2022-04-10 00:00:42
AWS AWSタグが付けられた新着投稿 - Qiita Databricks SCIMを用いたIAMクレディンシャルパススルーによるS3バケットへのアクセス https://qiita.com/taka_yayoi/items/5ed1c07debb4fecd474e bricksscimdatabricksonaws 2022-04-10 09:12:23
海外TECH DEV Community Remote Access Private EC2 Instances via System Manager https://dev.to/entest/remote-access-private-ec2-instances-via-system-manager-42en Remote Access Private EC Instances via System Manager SummarySystem manager enable remote access to EC instances both private and public subnet without using SSH and opening port In addition from the private EC it is possible to access other services such as S via VPC service endpoints In this post I would like share how to deploy these by using CDK Remote access a prviate EC by system manangerThe private EC can access S via VPC endpointDeply by a CDK stackGitHub Architecture CDK StackCreate a VPC with a S VPC endpoint const vpc new aws ec Vpc this VpcWithSEndpoint gatewayEndpoints S service aws ec GatewayVpcEndpointAwsService S Add system manager VPC interface endpoint vpc addInterfaceEndpoint VpcIterfaceEndpointSSM service aws ec InterfaceVpcEndpointAwsService SSM Create an IAM role for the EC const role new aws iam Role this RoleForEcToAccessS roleName RoleForEcToAccessS assumedBy new aws iam ServicePrincipal ec amazonaws com Role for EC to communicate with SSM role addManagedPolicy aws iam ManagedPolicy fromManagedPolicyArn this PolicySSMMangerAccessS arn aws iam aws policy AmazonSSMManagedInstanceCore Policy for EC to access S role attachInlinePolicy new aws iam Policy this PolicyForEcAccessS policyName PolicyForEcAccessS statements new aws iam PolicyStatement actions s resources Launch an EC in a private subnet const ec new aws ec Instance this EcConnectVpcEndpointS role role keyName hai ec tg large vpc vpc instanceName EcConnectVpcEndpointS instanceType aws ec InstanceType of aws ec InstanceClass T aws ec InstanceSize SMALL machineImage aws ec MachineImage latestAmazonLinux securityGroup sg vpcSubnets subnetType aws ec SubnetType PRIVATE 2022-04-10 00:19:27
海外TECH DEV Community [Parte 7] ASP.NET: Creando un Sistema Auditable https://dev.to/isaacojeda/parte-7-aspnet-creando-un-sistema-auditable-31nf Parte ASP NET Creando un Sistema Auditable IntroducciónSiguiendo con la serie de publicaciones sobre ASP NET Core y sobre todo lo que se nos ocurra hoy aprenderemos a crear sistemas auditables El código de este post lo encontrarás aquí Sistemas AuditablesEn el mundo de los estándares y software corporativo es demasiado importante poder registrar los movimientos que se hacen en un sistema ISO por ejemplo te pide que debes de tener al menos días de registros de los movimientos realizados en tu sistema para poder auditarlo días puede ser demasiado dependiendo de la cantidad de usuarios que usen el sistema y agregar este overhead en una aplicación crítica puede ser delicado si este recibe muchas solicitudes por segundo Por eso hay que pensar bien como implementamos este requerimiento Y ¿para quéauditar siempre ocurren cosas desafortunadas y sío sídebes de saber quién hizo ciertas operaciones delicadas en tu sistema En este post veremos dos opciones para hacer nuestro sistema auditable aunque yo suelo usar las dos AuditableEntity y una librería Audit NET Entities AuditablesUn Entity Auditable significa que todos los Entities de nuestra base de datos podemos saber quién lo creóy quien lo editó Este concern realmente no nos debe de afectar al momento crear Commands porque realmente es una tarea repetitiva por lo que configuraremos nuestro DbContext para que haga esta tarea por nosotros Para hacer que nuestros entities sean auditables crearemos un Entity base el cual todos los entities deberán heredar namespace MediatrExample ApplicationCore Domain public class BaseEntity public DateTime CreatedAt get set public string CreatedBy get set public DateTime LastModifiedByAt get set public string LastModifiedBy get set Y actualizamos nuestro único entity public class Product BaseEntity lt código omitido El entity Product contarácon nuevas propiedades que más adelante actualizaremos las migraciones y la DB En un Post anterior ya hemos implementado la autenticación y autorización de usuarios y pues para poder auditar necesitamos identificar a los usuarios individualmente Necesitamos actualizar el DbContext para guardar la información automáticamente cada vez que guardamos el contexto de la DB using MediatrExample ApplicationCore Common Interfaces using MediatrExample ApplicationCore Domain using Microsoft AspNetCore Identity using Microsoft AspNetCore Identity EntityFrameworkCore using Microsoft EntityFrameworkCore namespace MediatrExample ApplicationCore Infrastructure Persistence public class MyAppDbContext IdentityDbContext lt IdentityUser gt private readonly CurrentUser user public MyAppDbContext DbContextOptions lt MyAppDbContext gt options ICurrentUserService currentUserService base options user currentUserService User public DbSet lt Product gt Products gt Set lt Product gt public override async Task lt int gt SaveChangesAsync CancellationToken cancellationToken default foreach var entry in ChangeTracker Entries lt BaseEntity gt switch entry State case EntityState Added entry Entity CreatedBy user Id entry Entity CreatedAt DateTime UtcNow break case EntityState Modified entry Entity LastModifiedBy user Id entry Entity LastModifiedByAt DateTime UtcNow break return await base SaveChangesAsync cancellationToken Aquíhay dos cosas importantes que notar Inyectamos ICurrentUserService para poder acceder al usuario actual que hace la operaciónSobrescribimos SaveChangesAsync para poder emplear este mecanismo para guardar la información de quien hace la operaciónDentro de SaveChangesAsync también ocurren cosas muy importantes la magia El método ChangeTracker Entries lt BaseEntity gt regresa todos los registros que fueron creados o modificados en el DbContext Todos los Entities deben de heredar de BaseEntity para que esto funcione Entonces dependiendo de la operación realizada crear o editar se actualizan los campos correspondientes del entity modificado Esto es genial porque este proceso siempre seráautomático Para poder continuar y crear las respectivas migraciones hay que actualizar la implementación de ICurrentUservice porque probablemente va romper todo si no cuidamos los posibles null al crear migraciones u otras cosas que no involucran un Http Request Nota Cualquier duda que tengas respecto al código visita el repo con el código de este postpublic CurrentUserService IHttpContextAccessor httpContextAccessor httpContextAccessor httpContextAccessor Probablemente se estáinicializando la aplicación if httpContextAccessor is null httpContextAccessor HttpContext is null User new CurrentUser Guid Empty ToString string Empty false return El Http Request existe pero es un usuario no autenticado var httpContext httpContextAccessor HttpContext if httpContext User Identity IsAuthenticated false User new CurrentUser Guid Empty ToString string Empty false return var id httpContext User Claims FirstOrDefault q gt q Type ClaimTypes Sid Value var userName httpContext User Identity Name Unknown User new CurrentUser id userName true Se agregóuna nueva propiedad al record CurrentUser para determinar si es un usuario válido autenticado o no Se agregóesta opción porque el DbContext ahora accesa al usuario actual pero cuando se inicializa el DbContext como por ejemplo por una migración en modo desarrollo el CurrentUser no va a existir por lo que de igual forma inicializamos la propiedad User para que no existan problemas Nota Claro que pudimos revisar si usuario es null cuando se intentara usar en el DbContext esto es a criterio de cada uno lo importante es la idea de la implementaciónCon esto ya deberíamos poder crear migraciones desde el proyecto WebApi dotnet ef migrations add AddedBaseEntity o Infrastructure Persistence Migrations p MediatrExample ApplicationCore dotnet ef database updateLa forma en cómo hacemos la migración es diferente a otros posts en el post hicimos un refactor en la estructura del proyecto y lo convertimos algo más parecido a Vertical Slice Architecture Nota Cualquier pregunta siempre puedes buscarme en mi twitterSi tienes errores lo más fácil seráborrar el archivo de la base de datos de SQLite y ejecutar todo de nuevo Una vez ejecutada la migración podemos crear o editar productos agreguéel comando para editar puedes visitar el código fuente para revisarlo y veremos cómo se guarda la información en la base de datos De esta forma podemos cumplir con el requerimiento auditable de una manera muy sencilla Cualquier creación o modificación quedaráregistrado en cada entity Nota El CreatedBy con el Guid vacío fue creado por el método Seed dentro de Program csQueda claro que esto no es ninguna bitácora de cambios o logs auditables este es el primer paso para facilitar el acceso de esta información Esta implementación es útil para cuando en la aplicación se quiere mostrar el usuario que creócierto registro o el último en modificar Siempre se pide esto por ejemplo en un catálogo de Clientes Implementando Audit NETAudit NET es una librería que nos facilita implementar este requerimiento Tiene bastantes extensiones y opciones para persistencia de los logs Nota Con Audit NET puedes hacer integraciones con Web API MVC Entity Framework SignalR entre otros También tiene para que la persistencia sea en SQL Server MySQL Azure Storage Tables Azure Storage Blobs Elastic Search entre muchos másLo que vamos a hacer a continuación es un nuevo decorador de MediatR para ahíregistrar en una bitácora la operación La persistencia que usaremos es Azure Storage Accounts y Blobs ya que estamos esperando una gran cantidad de logs y no queremos ser afectados en rendimiento o costos de almacenamiento Es importante pensar que vamos a querer consultar los logs según la operación realizada y según el usuario que la efectuó es por eso que debemos diseñar bien la forma en como guardamos los logs para que no sea imposible consultar la información si al final terminamos con millones de registros Algo que aprendítambién realmente no queremos guardar logs de todas las operaciones Queries y Comandos de un sistema hace poco nos dimos cuenta de que este tipo de mecanismos afectaba el rendimiento en el sistema porque SIEMPRE registrábamos en la bitácora sea Query o Comando y hay Queries que son accesibles mucho más frecuentemente que ciertos comandos y no es necesario guardar en bitácora Para evitar este problema y solo guardar en los logs las operaciones que nos interesan auditar que deberían de ser todos los Comandos crearemos un Atributo para decorar los IRequest y que el Behavior revise si es necesario guardar en bitácora el IRequest que estápor ejecutarse Instalando Audit NetAudit NET incluye todo el mecanismo de recolección de información como la duración de la operación y que datos fueron modificados Es muy flexible y útil si quieres saber que más puedes hacer visita su repositorio en github El paquete de Azure Storage Blobs es el que nos ayudaráa guardar los logs en blobs de un Storage Account Para poder probar esto debes de tener instalado el emulador del Storage que generalmente viene junto con Visual Studio Si no lo tienes o no sabes que es coméntame y con gusto escribo respecto a este tema Para instalar estos paquetes nos vamos al ApplicationCore y ejecutamos dotnet add package Audit NETdotnet add package Audit NET AzureStorageBlobs ApplicationCore gt Common gt Attributes gt AuditLogAttributenamespace MediatrExample ApplicationCore Common Attributes lt summary gt Atributo para determinar que IRequest debe ser auditado lt summary gt AttributeUsage AttributeTargets Class Inherited true public class AuditLogAttribute Attribute Esto es muy simple ya que no requiere información adicional solo necesitamos este tipo de atributo para detectar IRequests que queremos guardar en bitácora ApplicationCore gt Common gt Behaviours gt AuditLogsBehaviorPara guardar en bitácora como mencionéantes utilizaremos un Behavior de MediatR para llevar a cabo esta tarea using Audit Core using MediatR using MediatrExample ApplicationCore Common Attributes using MediatrExample ApplicationCore Common Interfaces using Microsoft Extensions Configuration using Microsoft Extensions Logging using System Reflection namespace MediatrExample ApplicationCore Common Behaviours public class AuditLogsBehavior lt TRequest TResponse gt IPipelineBehavior lt TRequest TResponse gt where TRequest IRequest lt TResponse gt private readonly ICurrentUserService currentUserService private readonly ILogger lt AuditLogsBehavior lt TRequest TResponse gt gt logger private readonly IConfiguration config public AuditLogsBehavior ICurrentUserService currentUserService ILogger lt AuditLogsBehavior lt TRequest TResponse gt gt logger IConfiguration config currentUserService currentUserService logger logger config config public async Task lt TResponse gt Handle TRequest request CancellationToken cancellationToken RequestHandlerDelegate lt TResponse gt next logger LogInformation User User with request Request currentUserService User request IAuditScope scope null var auditLogAttributes request GetType GetCustomAttributes lt AuditLogAttribute gt if auditLogAttributes Any amp amp config GetValue lt bool gt AuditLogs Enabled El IRequest cuenta con el atributo AuditLog para ser auditado scope AuditScope Create gt EventType typeof TRequest Name ExtraFields new currentUserService User Request request var result await next if scope is not null await scope DisposeAsync return result ¿Quéestápasando aquí aquíva el resumen logger LogInformation Primero que nada estamos mostrando la solicitud realizada para en modo desarrollo poder ver información adicional de cada Query o Command que se ejecuta por el mediador Este cuenta con un Template que es recomendable siempre hacerlo así logging templates es útil cuando usamos herramientas como Serilog y un Sink a Elastic Search por ejemplo posible post a futuro Jamás debes de crear strings concatenados cuando mandas logs siempre debes de usar log templates como lo estoy haciendo tal vez ahorita no se vea bonito el log pero cuando usemos Serilog otro post y un Sink a Application Insights otro post veremos lo útil que es poder guardar logs de esta forma Buscamos si el IRequest actual llega con el atributo AuditLog ya que como no queremos guardar logs auditables de todas las operaciones solo los Comandos debemos hacer esta condición Si sícontiene un AuditLog procedemos a usar los métodos de Audit NET nos provee para auditar la operación Creamos un scope de Audit NET para que todo lo que ocurra dentro de la creación y su DisposeAsync Audit NET contaráel tiempo y entre otras cosas que se pueden agregar Hay que registrar este Behavior y agregar AuditLog en los comandos que queremos que sean auditables por ejem CreateProductCommand AuditLog public class CreateProductCommand Código omitido Y el pipeline behavior dentro de ApplicationCore gt DependencyInjection justo donde registramos el behavior anterior services AddTransient typeof IPipelineBehavior lt gt typeof AuditLogsBehavior lt gt También en appsettings json tendremos esta nueva sección AuditLogs Enabled true ConnectionString UseDevelopmentStorage true Es útil porque probablemente en modo desarrollo o staging no vamos a querer estar guardando logs Con eso ya podemos correr la Web API y ver cómo se comporta aunque no hemos configurado aun el Storage Account por default se crean archivos json en la raiz del proyecto Ejecutando CreateProductCommand se genera el siguiente log Environment UserName isaac MachineName DELL G DomainName DELL G CallingMethodName MediatrExample ApplicationCore Common Behaviours AuditLogsBehavior u uB uCHandle uEd MoveNext AssemblyName MediatrExample ApplicationCore Version Culture neutral PublicKeyToken null Culture es MX EventType CreateProductCommand StartDate T Z EndDate T Z Duration User Id aa f ed bebb UserName test user IsAuthenticated true Request Description Random product Price Como pueden ver en el Audit Scope agregamos las propiedades que más nos interesan el Request y el Usuario actual Si un usuario realiza una operación quedaráguardada Esto es lo útil y hasta aquípodríamos dar por terminado pero necesitamos un mejor lugar en donde guardar todos estos logs Primero para que estén seguros y segundo que no se pierdan Configurando el Azure Storage AccountEl NuGet Package instalado previamente cuenta con los métodos para configurar la persistencia de una forma muy sencilla public static IServiceCollection AddPersistence this IServiceCollection services IConfiguration configuration omitido Configuration Setup UseAzureStorageBlobs config gt config WithConnectionString configuration AuditLogs ConnectionString ContainerName ev gt mediatrlogs DateTime Today yyyyMMdd BlobName ev gt var currentUser ev CustomFields User as CurrentUser return ev EventType currentUser Id DateTime UtcNow Ticks json return services Estamos configurando como se van a guardar los logs en el storage account WithConnectionString Se indica la cadena de conexión del Azure Storage Account ContainerName Los archivos son guardados en contenedores aquíharemos un contenedor diferente según el día usando el formato mediatrlogs por ejemplo BlobName La ruta donde se guardaráen el contenedor aquíagruparemos por carpetas según el nombre del Comando y el archivo incluiráel ID del usuario Esto para tener la posibilidad de buscar por ID de usuario y poder ver todas las acciones que ha realizadoSi vemos como se ve desde el Azure Storage Explorer se veráalgo así Y si visitamos una carpeta Así podemos buscar por ID aunque podremos buscar por día no podremos poner un rango de hora al buscar Si se necesitan búsquedas de ese tipo serámejor usar Azure Storage Tables o cualquier otro que pueda guardar mucha información y buscarla Nuevamente un ejemplo del JSON Environment UserName isaac MachineName DELL G DomainName DELL G CallingMethodName MediatrExample ApplicationCore Common Behaviours AuditLogsBehavior u uB uCHandle uEd MoveNext AssemblyName MediatrExample ApplicationCore Version Culture neutral PublicKeyToken null Culture es MX EventType UpdateProductCommand StartDate T Z EndDate T Z Duration User Id aa f ed bebb UserName test user IsAuthenticated true Request ProductId Description iPhone SE Price ConclusiónEspero que esta información te sea útil estos dos mecanismos son buenas herramientas para crear sistemas auditables realmente no es difícil Te recuerdo que aquíte dejóel código de este post ReferenciasAudit NETAudit NET AzureStorageBlobsJason Taylor Clean Architecture 2022-04-10 00:12:22
Apple AppleInsider - Frontpage News BenQ ScreenBar Halo Review: Monitor lamp cozily lights up your workspace https://appleinsider.com/articles/22/04/09/benq-screenbar-halo-review-monitor-lamp-cosily-light-up-your-workspace?utm_medium=rss BenQ ScreenBar Halo Review Monitor lamp cozily lights up your workspaceThe BenQ ScreenBar Halo casts a pool of light on your desk that helps you concentrate lets you see your working tools and papers better and creates an unexpectedly cozy atmosphere around your Mac ScreenBar Halo fits even curved monitorsIf you need more light where you work it s unlikely that your first thought will be to buy one that shines down onto that glassy reflective monitor of yours Yet BenQ s Screenbar Halo sits atop that monitor it shines down and it s excellent Read more 2022-04-10 00:09:31
ニュース BBC News - Home Rishi Sunak demands inquiry into Akshata Murty tax leak https://www.bbc.co.uk/news/uk-politics-61055789?at_medium=RSS&at_campaign=KARANGA domicile 2022-04-10 00:30:33
ニュース BBC News - Home Masters: Scottie Scheffler leads at Augusta, Cameron Smith & Shane Lowry chasing https://www.bbc.co.uk/sport/golf/61055709?at_medium=RSS&at_campaign=KARANGA Masters Scottie Scheffler leads at Augusta Cameron Smith amp Shane Lowry chasingScottie Scheffler remains in a good position to win his first major at the Masters despite giving hope to his rivals late in Saturday s third round 2022-04-10 00:44:35
ニュース BBC News - Home Masters: Scottie Scheffler and Cameron Smith shine in Masters day three best shots https://www.bbc.co.uk/sport/av/golf/61054433?at_medium=RSS&at_campaign=KARANGA Masters Scottie Scheffler and Cameron Smith shine in Masters day three best shotsLeaderboard heavyweights Scottie Scheffler Cameron Smith and Charl Schwartzel all feature in the best shots of day three at the Masters at Augusta 2022-04-10 00:09:19
北海道 北海道新聞 映画「モルエラニの霧の中」一本桜元気に 室蘭のNPOが世話「今年も花は見応え」 https://www.hokkaido-np.co.jp/article/667709/ 見応え 2022-04-10 09:26:07
北海道 北海道新聞 <卓上四季>難民の居場所 https://www.hokkaido-np.co.jp/article/667746/ 難民 2022-04-10 09:22:56
北海道 北海道新聞 レッドソックス沢村は1回無失点 ヤンキース戦 https://www.hokkaido-np.co.jp/article/667780/ 無失点 2022-04-10 09:14:00
海外TECH reddit For American people: What do you consider to be “countryside”? https://www.reddit.com/r/japanlife/comments/u05sv9/for_american_people_what_do_you_consider_to_be/ For American people What do you consider to be “countryside Non American here I live in a place that Japanese people would definitely call “inaka but for me it s a relatively large town The population is similar to Salt Lake City Utah or Des Moines Iowa I m just wondering what American people would consider to be the countryside and whether the feeling is significantly different from Japanese people s Is there a certain population cutoff submitted by u fiyamaguchi to r japanlife link comments 2022-04-10 00:10:30

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)