「いつ」「誰が」「何を」したのか記録するサービス
セキュリティグループの設定やデバイスの登録など管理イベント
S3バケットの操作などアクティビティ
90日間は無料
Event Historyで確認できる
なるほど、90日無料だけど、きちんとした運用にするなら保存した方が良さそうだな…
ソフトウェアエンジニアの技術ブログ:Software engineer tech blog
随机应变 ABCD: Always Be Coding and … : хороший
「いつ」「誰が」「何を」したのか記録するサービス
セキュリティグループの設定やデバイスの登録など管理イベント
S3バケットの操作などアクティビティ
90日間は無料
Event Historyで確認できる
なるほど、90日無料だけど、きちんとした運用にするなら保存した方が良さそうだな…
5分おきの場合は
0/5 * ? * * * で設定する。Day of monthが?になるのは何故かわからん。
次の画面で、targetに Batch job queueを選択する
job queue, job definitionはarn, job nameは任意に入れる
Ruleができたら、cloud watchで確認する
うん、event bridgeからも実行できているのがわかります。
### 機能の流れ
Batchで実行したい処理を定義する(自動的にECSにクラスタが作られる)
-> Batchで処理を走らせる(EC2にインスタンスが立ち上がり、処理が完了したら自動でインスタンスが削除される)
– CloudWatch内のイベント機能で定期実行するようにする
1. Job definitionsでジョブを定義する
– platform: fargate, ecsTaskExecutionRole
– Job configuration: public.ecr.aws/amazonlinux/amazonlinux:latest
L Command syntax: Bash
L Command: echo ‘hello world
2. Compute environments 作成
3. test_job_queues作成
4. Jobsを作成
CannotPullContainerError: inspect image has been retried 5 time(s): failed to resolve ref “public.ecr.aws/amazonlinux/amazonlinux:latest”: failed to do request: Head https://public.ecr.aws/v2/amazonlinux/amazonlinux/manifests/latest: dial tcp 99.83.145…
うーん、うまくいかんな…
CannotPullContainerError: inspect image has been retried 5 time(s): failed to resolve ref “docker.io/library/busybox:latest”: failed to do request:
インターネットゲートウェイは設定されてると思うんだが...
色々試した結果、Assign public IPがENABLEDだと上手くいった
cloudwatch logsの /aws/batch/job で確認した結果
んで、これをcloudwatch eventsで実行させたい
WAFとは? … ALBまたはCloudFrontのオプションの様な形で動作する
### どのルールグループを使うか
ALBやCloudFrontに適用するには、WebACL(Web Access Control List)という単位になる
このWebACLにどの様なアクセスを不正アクセスとみなすかルールを適用する
※基本的には既に用意されたルールセットから選択する。組み合わせることも可能
※WCUは合計キャパシティが1500まで
パターン1) AWSマネージドルール・ルールグループ
コアルールセット
管理者保護
即知の不正な入力
SQLデータベース
Linux OS
POSIX OS
Windows OS
PHPアプリケーション
WorPressアプリケーション
PHPアプリケーション
WordPressアプリケーション
AmazonIPレピュテーション
匿名IPリスト
パターン2) AWS以外のマネージドサービス
パターン30 AWS WAFセキュリティオートメーション
ブロックするIPアドレスなど
パターン4) WafCharm
実際にコンソール画面から試してみる
なるほど、ALBにattachできるのね。
AWS OpsWorkとは?
Chef(Rubyで記述)やPuppet(manufestで記述)のマネージド型インスタンスを利用できるようになる構成管理サービス
Cloudformationと異なり、アプリケーション周りのリソースに限られる
Add Stackで始めてみます。
IAMでopsworksのfullaccessの権限を付与したroleを作成し、add stackとする。
My Sample Stackが出来ているのがわかる。
Statusがstopedなので、startをrequestする。
なるほど、簡易化されているのか…
これも何となくわかったわ
リソース配置、アプリケーション導入、バージョン管理、負荷分散など迅速にデプロイの実行と管理をまとめて行うサービス
プロビジョニング、AutoScaling, 状態モニタリングなどの作業を自動で行う
Elastic Benstalkはサーバ構築の設定を自動でやるサービス
とりあえず触ってみましょう
PlatformはPHPとして、branchはPHP 8.0 running on 64bit Amazonlinux 2にします。
そうすると、securitygroupの設定など、後は自動で設定してくれる
なんかErrorが出まくってるけど…
まあ やりたいことはわかった
コードソフトウェアの構築、テスト、でプライを自動化し、ci/cdをサポートする継続デリバリーサービス
パイプラインは複数のステージで構成されており、UIから手動で行うか、Cloudformationでstackを定義して行う
### 用語の定義
ステージ: 処理を実行する環境の単位
アクション: 実際に行われる処理の単位 source, build, test, deploy, approval
まずpipelineを作っていきます。
build stateでaws code buildを選択する
pipelineができる
git pushするとprogressになる。
なるほど、CIをAWSがやるのね。
何となく、イメージは掴めた。
CodeCommitとはAWSにあるバージョン管理システム
userに「AWSCodeCommitPowerUser」のpermissionを付与します。
userのsecurity credentialで、「HTTPS Git credentials for AWS CodeCommit」でuser nameとpasswordをgetします。
$ git init
Initialized empty Git repository in /home/vagrant/dev/app/.git/
$ git add .
$ git commit -m “first commit”
[master (root-commit) 2f0e85b] first commit
1 file changed, 11 insertions(+)
create mode 100644 index.html
$ git remote add origin https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/hpscript
$ git push -u origin master
なるほど、レポジトリね。
git hubの方が使いやすそうだが…
まー吉としましょう。
AWS Kinesis Firehouseとは?
ストリームデータをS3やRedshiftに送るサービス
import boto3 import uuid import json accesskey = "*" secretkey = "*" region = "ap-northeast-1" client = boto3.client('firehose', aws_access_key_id=accesskey, aws_secret_access_key= secretkey, region_name=region) data = { "musicID": 'xxxxxxxxxx', "userId": 1, "artistId": 1 } response = client.put_record( DeliveryStreamName = "PUT-S3-UNJQf", Record = { 'Data': f'{json.dumps(data)}\n' } )
{ "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": [ "arn:aws:firehose:ap-northeast-1:*:deliverystream/PUT-S3-UNJQf" ] }, {
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the PutRecord operation: User: arn:aws:iam::702423327513:user/kinesis is not authorized to perform: firehose:PutRecord on resource: arn:aws:firehose:ap-northeast-1:*:deliverystream/PUT-S3-UNJQf because no identity-based policy allows the firehose:PutRecord action
うむー なんかよくわからんが、どういうことができるかは何となく理解したかも
WAFはWeb Application Firewallの略でWebアプリケーションを保護するためのソリューション
ALB, CloudFront, API Gatewayに割り当てて利用する
リソースにWebACLを割り当てたら、WebACLにルールを登録する
番号が小さい順に評価される
– IP制限
– レートベース(同一IPからの接続数制限)
– 脆弱性に関するルール
– 悪意あるhttpリクエスト
WAF template
L DLします
https://aws.amazon.com/jp/about-aws/whats-new/2017/07/use-aws-waf-to-mitigate-owasps-top-10-web-application-vulnerabilities/
iamでAdministratorAccessを付与したロールを作成します。
cloudformationで先ほどDLしたowasp_10_base.ymlをuploadしてstackを作成します。
その際に、iam roleでcloudformation_roleを付与します。
これでWAFのWebACLsに作られているはずなのだが、、、、
なんとなくわかったようなわかってないような…