CloudTrailとは

「いつ」「誰が」「何を」したのか記録するサービス
セキュリティグループの設定やデバイスの登録など管理イベント
S3バケットの操作などアクティビティ
90日間は無料

Event Historyで確認できる

なるほど、90日無料だけど、きちんとした運用にするなら保存した方が良さそうだな…

Event BridgeでAWS Batchを動かしたい

5分おきの場合は
0/5 * ? * * * で設定する。Day of monthが?になるのは何故かわからん。

次の画面で、targetに Batch job queueを選択する
job queue, job definitionはarn, job nameは任意に入れる

Ruleができたら、cloud watchで確認する

うん、event bridgeからも実行できているのがわかります。

[AWS Batch] 触って理解する

### 機能の流れ
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で実行させたい

AWS WAFを理解する

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とは?

AWS OpsWorkとは?
 Chef(Rubyで記述)やPuppet(manufestで記述)のマネージド型インスタンスを利用できるようになる構成管理サービス
 Cloudformationと異なり、アプリケーション周りのリソースに限られる

Add Stackで始めてみます。

IAMでopsworksのfullaccessの権限を付与したroleを作成し、add stackとする。

My Sample Stackが出来ているのがわかる。
Statusがstopedなので、startをrequestする。
なるほど、簡易化されているのか…
これも何となくわかったわ

AWS Elastic Beanstalkとは?

リソース配置、アプリケーション導入、バージョン管理、負荷分散など迅速にデプロイの実行と管理をまとめて行うサービス
プロビジョニング、AutoScaling, 状態モニタリングなどの作業を自動で行う
Elastic Benstalkはサーバ構築の設定を自動でやるサービス

とりあえず触ってみましょう

PlatformはPHPとして、branchはPHP 8.0 running on 64bit Amazonlinux 2にします。
そうすると、securitygroupの設定など、後は自動で設定してくれる

なんかErrorが出まくってるけど…

まあ やりたいことはわかった

AWS CodePipelineとは?

コードソフトウェアの構築、テスト、でプライを自動化し、ci/cdをサポートする継続デリバリーサービス
パイプラインは複数のステージで構成されており、UIから手動で行うか、Cloudformationでstackを定義して行う

### 用語の定義
ステージ: 処理を実行する環境の単位
アクション: 実際に行われる処理の単位 source, build, test, deploy, approval

まずpipelineを作っていきます。

build stateでaws code buildを選択する
pipelineができる

git pushするとprogressになる。

なるほど、CIをAWSがやるのね。
何となく、イメージは掴めた。

AWS CodeCommitとは?

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の方が使いやすそうだが…
まー吉としましょう。

Kinesis Firehouseとは

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

うむー なんかよくわからんが、どういうことができるかは何となく理解したかも

AWS WAFを使っていく

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に作られているはずなのだが、、、、
なんとなくわかったようなわかってないような…