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になるのね。
なかなか面白い。

AWS Global Acceleratorとは?

AWS Global AcceleratorはALB, NLB, EC2などのコンポーネントの前段に配置することで、可用性とパフォーマンスを改善してくれるネットワークサービス

既存のALBに追加したり、ALB新規作成時に追加できる

### 使ってみる
– Create accelerator
– Listenerを80 TCPに設定します
– Endpointに対象リージョンのEC2を紐付ける

Global Acceleratorを作成すると、Static IPアドレス2つとDNSが作られる。
なるほど、なんとなくイメージはわかったかも。

AWS Batchとは?

AWSのフルマネージド型バッチ処理実行サービスのこと
– 最適なコンピューティングリソースの動的プロビジョニングができる
– 「ジョブ」という概念を定義しておき多岐に渡る処理を管理実行できる

事前に定義したジョブ定義をキューで管理、処理
複数の子ジョブを実行させる事が出来る

AWS Batchの用語
– jobs, job definitions, job queues, compute environments
– マルチノード並列ジョブ: 複数のインスタンスにまたがるジョブ

とりあえず触ってみる

– create compute environment

job definitionsを設定する

あれええええ なんか違うなーーーーーーーーーwwww

AWS EventBridgeとは

AWS内外でのイベントをトリガーにLambdaなどを動かせるhubがEventBridgeらしい。
PagerDutyを触ってみたがよく分からないので、とりあえず動かしてみることに。

service providerをAWS, service nameをEC2として、Event typeでEC2 Instance State-change Notificationで Specific stateがstoppedとなったら、Lambda functionを実行するようruleを作成できる。

scheduleとcron expressionを使うと、cronと同じようなことができる

ふむ、なるほどー

AWS DirectConnectとは

AWSが提供する専用接続サービスでユーザのネットワーク環境からAWSまでのインターネットを経由せずにプライベートな接続を確立する
エクイニクス社の「TY2(東京)」、「OS1(大阪)」およびアット東京社の「CC1(東京)」のAWS Direct Connectロケーションを利用できる

AWS DirectConnectは、インターネット回線を利用しないで接続する方法

AWS Secret ManagerをPython3で使ってみる

Secret Managerを使っていきます。
今回はkeyとvalueにします。

secret nameも設定します。

RDSのpassだとrotationができるらしい。このrotationって機能は面白いですね。

iamでSecret Managerのread/writeの権限を付与します。

### Pythonで取得してみる
$ pip3 install boto3
L boto3.client の書き方は、s3へのget/uploadとほぼ同じ。あとは、client.get_secret_valueとするだけ。

import boto3
import base64
from botocore.exceptions import ClientError
 
accesskey = ""
secretkey = ""
region = "ap-northeast-1"
secret_name = "stg/beta/name"

  
client = boto3.client('secretsmanager', aws_access_key_id=accesskey, aws_secret_access_key= secretkey, region_name=region)
  
try:
    get_secret_value_response = client.get_secret_value(
        SecretId=secret_name
    )
except ClientError as e:
    if e.response['Error']['Code'] == 'DecryptionFailureException':
        raise e
    elif e.response['Error']['Code'] == 'InternalServiceErrorException':
        raise e
    elif e.response['Error']['Code'] == 'InvalidParameterException':
        raise e
    elif e.response['Error']['Code'] == 'InvalidRequestException':
        raise e
    elif e.response['Error']['Code'] == 'ResourceNotFoundException':
        raise e
else:
    if 'SecretString' in get_secret_value_response:
        secret = get_secret_value_response['SecretString']
    else:
        decoded_binary_secret = base64.b64decode(get_secret_value_response['SecretBinary'])

print(get_secret_value_response)

response
{‘ARN’: ‘arn:aws:secretsmanager:ap-northeast-1:702423327513:secret:stg/beta/name-FgtB23’, ‘Name’: ‘stg/beta/name’, ‘VersionId’: ‘cbe2dfcb-2e5b-4032-a919-a6213f3436db’, ‘SecretString’: ‘{“name”:”hpscript”}’, ‘VersionStages’: [‘AWSCURRENT’], ‘CreatedDate’: datetime.datetime(2022, 2, 11, 23, 43, 4, 732000, tzinfo=tzlocal()), ‘ResponseMetadata’: {‘RequestId’: ‘3c41a108-4cee-46a4-aa9f-af3d2252637c’, ‘HTTPStatusCode’: 200, ‘HTTPHeaders’: {‘x-amzn-requestid’: ‘3c41a108-4cee-46a4-aa9f-af3d2252637c’, ‘content-type’: ‘application/x-amz-json-1.1’, ‘content-length’: ‘265’, ‘date’: ‘Sat, 12 Feb 2022 00:02:59 GMT’}, ‘RetryAttempts’: 0}}

おおおおおおおおおおおおおおおおおおおお

AWS Secret Managerとは?

機密情報の管理を簡単にするAWSマネージド・サービス
アプリケーション内のハードコードされた機密情報を削除する
JSONで格納できる。最大4096バイト。
e.g. サーバ名、IPアドレス、ポート番号、データベース接続情報、APIキーなど

機密情報の構造

メタ情報
– 機密情報の名前、説明、ARN
– 暗号化、複合化に利用するAWS Key
バージョン情報
– 変更時には新バージョンが作成される
– 各バージョンには暗号化された値のコピーが保持
– 機密情報がローテーション上のどこにあるかを識別するステージングラベルが添付

月額$0.40
1万APIコールで$0.05

リクエストが多い場合は考慮する必要がある。