AWS Direct connectとは?

AWSが提供する専用接続サービスで、ユーザのネットワーク環境からAWSまでインターネットを経由せずプライベートな接続を確立することができる。
ユーザがAWSのパートナー設備に用意された相互接続ポイント(AWS Direct Connectロケーション)と間接的に接続する
「安定性」「セキュリティ」「コスト」

HULFTとは?

HULFTとは、ファイルという形になった情報を転送し、その情報を転送する際に発生する前後の処理を統合的に扱うためのソフトウェア

→ TPC SYN (TCP接続を確立する際にクライアントから送られるパケット)
← TCP SYN+ACK(接続を受け入れる際にはACKフラグが一緒になったSYN/ACKパケットで応答する。TCPの3way handshake)
→ TPC ACK
→ 配信情報を送信
← 応答
→ ファイルデータ送信(小分けにしてデータを送信)
← 受信済みデータ量返信
→ TPC FIN
← TCP FIN+ACK
→ TPC ACK
TCP接続確立後、配信側で必要に応じてコード変換、圧縮、暗号化などの前処理が行われる
配信側は前処理が終わったファイルをTCP接続で集信側に送信
集信側は、暗号化されたデータの複合、圧縮されたデータの解凍、コード変換などの処理を必要に応じて行う
ファイル転送終了後、TCP接続が切断され、HULFT配信が終了する

ファイル転送前処理: ファイル入力、コード返還(各種汎用機で使われている文字コードに対応)、圧縮(ランレングス法に似た圧縮とDeflate圧縮の2種類)、暗号化(HULFT暗号、C4S暗号、AES)、転送の順番で配信が行われる
※メモリ上で行われるため、前後処理のための中間ファイル等は生成されない

hulftのistall
# pwd
/usr/local/HULFT/insttmp
# ./installer
インストールの開始
シリアル番号とプロダクトキーの入力
利用期間ライセンスキー
インストール方法の選択
トレースログ出力方式の選択
インストール条件の確認
インストールの終了
環境変数の設定
実行モジュール格納ディレクトリの設定
L HULFTの実行モジュールがある、実行モジュール格納ディレクトリをシェルの環境変数に設定します。環境変数名は、「HULEXEP」です。この環境変数を設定することにより、HULFTが実行するプログラムのPATHを自動的に検索できます。また、このディレクトリをPATHに設定することにより、HULFTの実行モジュールがあるディレクトリ以外からもHULFTを起動できます。
# HULEXEP=/usr/local/HULFT/bin
# export HULEXEP
# PATH=/usr/local/HULFT/bin:$PATH
# export PATH

環境設定ファイル格納ディレクトリの設定
L HULFTが使用する環境設定ファイルのある、環境設定ファイル格納ディレクトリをシェルの環境変数に設定します

環境変数の確認
# echo $HULPATH
/usr/local/HULFT/etc
# echo $HULEXEP
/usr/local/HULFT/bin

# echo $PATH (sh系の場合)
/usr/local/HULFT/bin:/usr/local/bin:/bin:/usr/bin:/usr/sbin ..

配信処理を行うためには、配信デーモンを起動する必要があります。
# hulsndd
集信デーモンの起動
L 集信処理を行うためには、集信デーモンを起動する必要があります。
# hulrcvd
要求受付デーモンの起動
L 相手からの要求を受け付けるためには、要求受付デーモンを起動する必要があります。
HULFTの起動確認
L 各デーモン起動コマンド入力後、以下のコマンドなどによりプロセスの状態を確認します。
# hulsndd
# hulrcvd
# hulobsd
# ps -ef | grep hul
root 21207 1 0 22:49:30 ? 0:00 hulrcvd
root 21205 1 0 22:49:26 ? 0:00 hulsndd
root 21209 1 0 22:49:32 ? 0:00 hulobsd

管理情報の登録
L HULFTでは配信側と集信側に同一のファイルIDを指定します。ファイルIDは50文字以内の英数字で指定します。ファイルIDに関連付けられた管理情報を元にファイル転送を行います。ファイルIDは1ファイルごとに配信側(配信管理情報)および集信側(集信管理情報)に登録する必要があります。
配信要求(配信側起動のファイル転送)
L 配信要求は転送するファイルを持つ側からの起動でファイル転送を行う場合に使用します。
履歴の確認(配信側起動のファイル転送)
送信要求(集信側起動のファイル転送)
要求状態の確認(集信側起動のファイル転送)
L「送信要求(集信側起動のファイル転送)」で行ったファイル転送の結果を確認します。配信側ホストには配信履歴が表示され、集信側ホストには集信履歴が表示されます。

FTP接続の場合はファイルの整合性チェックまで行わない

HULFTが何やってるかは大体わかった。

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

AWS CIDR

CIDR(Classless Inter-Domain Routing)
CIDRはIPアドレスの範囲で、172.10.0.0〜172.10.255.255と書くと面倒なので、172.10.0.0/16と書く
この”/16″というのは左の”16ビット固定” という意味
“172.10.0.4/32” は、32ビット(全部固定)という意味
RFC1918とは、プライベートIPアドレスについて記載したRFC文章

RFC1918の範囲
– クラスA(大規模ネットワーク): 10.0.0.0 ~ 10.255.255.255
– クラスB(大規模ネットワーク): 172.16.0.0 ~ 172.31.255.255
– クラスC(大規模ネットワーク): 192.168.0.0 ~ 192.168.255.255

予約されている5つのアドレス
10.0.0.0 ネットワークアドレス
10.0.0.1 VPCルータ
10.0.0.2 Amazonが提供するDNS
10.0.0.3 AWSで予約されているアドレス
10.0.0.255 ブロードキャストアドレス

そーゆーことか、めちゃくちゃ勉強になった

AWS Session Managerを使ってみよう

AWS Session Managerを使うと、SSHを使わずにEC2に接続できる

### Session Managerの使い方
IAM -> Roles -> Create role -> EC2
AmazonEC2RoleforSSM を選択する

Role Name: SSM
ssmはsession managerの略だと思われる。smでもよかったのにww

IAM role “SSM” で再度EC2インスタンスを作成します。

### AWS Systems Manager
Start sessionを押下すると、Target instanceが表示される

sh-4.2$ pwd
/usr/bin

うおおおおおおおおおおおお
なんだこれ

というか、最初は/usr/binがcurrentになるのね。
なかなか面白い。