💭

マネジメント系 AWSサービス

2023/11/05に公開

AWS CLI

AWS Command Line Interface (CLI) は、コマンドラインを介してAmazon Web Services (AWS) を操作するためのツールです。AWSリソースの管理や設定、デプロイ、クエリなどを実行するのに役立ちます。

インストールとセットアップ

AWS CLIを利用するためには、次の手順に従います:

ローカルにAWS CLIをインストール:
公式ウェブサイトからAWS CLIをダウンロードし、ローカルコンピュータにインストールします。インストール方法は、オペレーティングシステムに依存します。

権限設定を行う:
AWS CLIを使用するために、IAMユーザーやロールに適切なアクセス権限を設定します。このために、AWSのIAM (Identity and Access Management) サービスを使用します。設定が不正確であると、AWSリソースにアクセスできないか、誤ったアクセス権を持つ可能性があるため、慎重に設定する必要があります。

設定ファイルの構築:
AWS CLIの設定情報は、~/.aws ディレクトリ内の2つの主要なファイルで管理されます。

config: このファイルは、AWS CLIがリージョンや出力フォーマットなどの設定情報を格納するためのものです。

credentials: このファイルには、IAMユーザーまたはロールに関連付けられたアクセスキーとシークレットキーが含まれます。これらの資格情報はAWSに対するアクセスを認証するために使用されます。これらの資格情報は絶対に外部に漏らさないようにし、セキュリティを確保する必要があります。

実際に設定する内容は以下のような形になる
aws configureで設定可能

~/.aws
base ❯ cat config
[default]
region = ap-northeast-1
output = json
cli_pager=

~/.aws
base ❯ cat credentials 
[default]
aws_access_key_id = XXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXX

その他プロファイルを追加できるのでユーザーごとの設定が可能
aws configure --profile ec2-user

MFAを設定してよりセキュアにすることができる
例)
何も権限が付与されていないユーザー「user-1」
S3の閲覧権限のIAM Role
これを付与するときにMFAを設定することでよりセキュアになる

configの設定に以下を追記

source_profile = user-1
role_arn = [Roleのarn]
mfa_serial = [MFAデバイスの割り当てarn]

S3で実行例を
aws s3 cp コピー元 コピー先
ローカルのファイルをS3から保存することができる
逆も行うことができる
--recursiveを使うとディレクトリは以下を全て扱うことができる

aws s3 mv 変更前 変更後
aws s3 rm 削除ファイル
aws s3 rb 削除バケット

syncコマンド
aws s3 sync 同期もと 同期先
S3の内容が全て一緒になる
逆にS3に中身がある場合はローカルが同期される
条件がある
最新の更新日のファイルが必要
同期先に存在しないファイルがあること

aws s3 sync 同期もと 同期先 --exclude 条件 --include 条件
上記コマンドを逆にすると実行不可
正規表現のような書き方ができるので調べる
例を書いてほしい

--dryrun前もって実行結果を確認することができる

利用例

  • EC2インスタンスの起動、停止、タグ付け、セキュリティグループの管理
  • S3バケットの作成、オブジェクトのアップロード、ダウンロード
  • Lambda関数のデプロイとトリガーの設定
  • IAMユーザーやロールの作成、ポリシーの管理
  • CloudFormationスタックの作成、更新、削除
  • ネットワーキングリソース(VPC、サブネット、ルートテーブル)の設定

AWS CLIは、AWSコンソールを使用せずに、コマンドラインでこれらのタスクを自動化および効率化するのに役立ちます。

CloudWatch

AWS CloudWatchは、Amazon Web Services (AWS) が提供する監視マネージドサービスで、リソースのパフォーマンス監視、アラートの設定、アクションのトリガー、データの収集および可視化を行うためのサービスです。

メイン機能

メトリクス収集

CloudWatchはEC2やRDSなどのAWSリソースから、CPU使用率、メモリ使用量、ディスク利用率などのさまざまなメトリクス情報を収集します。
また、ログデータの収集も可能で、これらのデータを保存および分析できます。

リアルタイム監視

特定のメトリクスに対するアラームを設定し、監視条件が満たされると通知を受けることができます。これにより、リソースの異常な変化を素早く検出できます。

カスタムアクション

CloudWatchでは、アラームがトリガーされた場合に、Auto Scalingグループのサイズを調整したり、SNSを介してメール通知を送信したりするなど、カスタムアクションを設定できます。

メトリクスの可視化

収集したメトリクスデータを視覚的に分析するためのダッシュボードを提供し、リアルタイムでリソースの動作とパフォーマンスを監視できます。

メリット

CloudWatchはAWSリソースに関するメトリクスデータを自動的に収集できます。収集の標準的な頻度は5分間隔ですが、1分間隔でのデータ収集も可能で、これには追加の料金がかかります。
また、オンプレミス環境にエージェントを設定することで、AWS以外の環境も監視できます。

メトリクス

標準メトリクス:

AWSが提供するあらかじめ用意されたメトリクスで、例にはCPU使用率、ネットワークパフォーマンスなどがあります。

カスタムメトリクス:

ユーザーが設定した独自のメトリクスで、メモリ使用率などの特定のパフォーマンス指標を監視できます。

CloudWatchエージェント

EC2インスタンスにCloudWatchエージェントをインストールし、IAMロール(CloudWatchデータ送信用)をアタッチすることが必要です。エージェントを使うことで、詳細なシステムメトリクスやログデータを収集できます。
プライベートネットワーク環境の場合、VPCエンドポイントの設定が必要です。これにより、セキュアなデータ転送を確保します。

https://awstut.com/2021/12/28/cloudwatch-agent-linux/

CloudWatch Logs

CloudWatch Logs はログの収集、保管、監視、および連携を実現するAWSのサービスです。

収集対象

アプリケーションログ
システムログ
Lambdaの実行ログ
VPC Flow Logs など、多くの種類のログを収集できます。

※ 適切な書き込み権限が必要で、ログデータをCloudWatch Logsに送信するためにエージェントやSDKを使用できます。

ログの保管

ログデータは階層構造に組織化されています

ロググループ:
ログデータの論理的なグルーピング単位で、アプリケーションやリソースに関連するログを含みます。

ログストリーム:
ロググループ内での個々のログデータのストリームで、通常、時間に基づいて区切られます。

ログイベント:
ログストリーム内の個別のログエントリです。
保存期間は無期限で、ロググループごとに異なる保持期間を設定できます。


https://dev.classmethod.jp/articles/cloudwatch-logs-log-stream-remove-transaction-quota/

暗号化

ログデータは転送中も保管中も暗号化されており、セキュリティが確保されています。

ログフィルタリング

ログフィルタリングを使用して、ログデータを特定の条件に基づいて検出し、アラートをトリガーできます。例えば、特定のエラーメッセージがログに現れるたびにアラートを生成することができます。

CloudWatch Logs Insights

CloudWatch Logs Insights を使用すると、ログデータを簡単に分析し、カスタムクエリを実行したり、ログデータをグラフに可視化したりすることができます。特有のクエリ言語を使用して、高度なログデータの探索と分析を行います。

ログの連携

ログデータをS3に連携することで、長期的な保存およびバックアップを低コストで実現できます。また、他のAWSサービス(例: Lambda、Kinesisなど)との連携も可能です。

CloudWatch 統合エージェント

CloudWatch 統合エージェント をEC2インスタンスやオンプレミスサーバーにインストールすることで、メトリクスおよびログデータを収集できます。これにより、さまざまなリソースからのデータを集約し、監視および分析できるようになります。

AWS Systems Manager

AWS Systems Manager は、運用管理に特化したサービスで、ソフトウェア情報の収集、一覧化、パッチ適用の自動化、構成管理などの機能を提供します。オンプレミス環境を含む多くの環境で使用できます。

概要

  1. ソフトウェア情報の収集と一覧化
    AWS Systems Managerは、運用するリソースのソフトウェア情報を一元管理し、可視化するための機能を提供します。これにより、リソースの状態を把握しやすくなります。

  2. パッチ適用の自動化
    パッチマネージャーを使用すると、OSおよびアプリケーションのパッチ適用を自動化し、セキュリティの脆弱性を迅速に修正できます。

  3. オンプレミスおよびクラウドの構成管理
    Systems Managerを使用して、オンプレミス環境やクラウドリソースの構成管理を行えます。必要なリソースの状態を維持し、自動化された設定管理を実現できます。

前提条件

SSM Agent:
対象リソースにはSSM Agentがインストールされている必要があります。エージェントはSystems Managerとの通信を可能にします。

ネットワーク設定:
適切なネットワーク設定が必要で、特にエンドポイントに向かうアウトバウンドトラフィックの設定が重要です。

IAMロール:
Systems Managerに必要なアクセス権を持つIAMロールが設定されている必要があります。

サブサービス

1. セッションマネージャー
セッションマネージャー は、プライベートなEC2インスタンスへのアクセスを改善し、踏み台サーバーを不要にします。ブラウザを介してセッションを開始し、SSM Agentを使用してSSH接続などが行えます。SSHポートを直接解放する必要がないため、セキュリティが向上し、アクセス権の管理はIAMによって行えます。

2. RunCommand
RunCommand は、複数のリソースに対してリモートでコマンドを実行できる機能を提供します。複雑なタスクやスクリプトの自動化に使用できます。

3. パッチマネージャー
パッチマネージャー は、OSおよびアプリケーションのパッチ適用を一括で実行し、スケジューリングが可能です。セキュリティの脆弱性を修正し、リソースを常に最新の状態に保ちます。

CloudFormation

AWS CloudFormationは、AWSリソースをコード化し、マネージドなサービスを提供するツールです。ユーザーはYAMLまたはJSON形式でテンプレートを記述し、それに基づいてAWSリソースを作成、管理できます。

スタック (Stack)

CloudFormationで作成されたAWSリソースのまとまりを指します。

ロールバック:
スタックは単位でロールバックを実行でき、問題が発生した場合に過去の安定した状態に戻すことができます。

更新:
過去のテンプレートを修正するのではなく、新しいテンプレートをアップロードして構成を変更できます。スタックを更新することでリソースの状態を変更します。

削除:
スタックは単位で削除でき、関連するリソースをすべて一度に削除します。

差分検知:
手動操作によってスタックの状態が変更された場合、差分が生じることがあります。これを解決するために、CloudFormationはDrift Detectionという機能を提供し、スタックの差分を検知できます。

テンプレート (Template)

CloudFormationのテンプレートはAWSリソースを定義するためのファイルで、以下の要素が含まれます:

Version:
テンプレートのバージョンを指定します。

Resources:
作成したいAWSリソースを記述します。各リソースにはタイプ(リソースの種類)が指定され、プロパティ(設定値)も含めて宣言されます。例えば、AWSのリソースのタイプ、配置先のAvailability Zone、その他の設定が含まれます。

CloudFormation作成例
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyVPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: '10.0.8.0/21'
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: MyVPC
  Subnet1A:
    Type: 'AWS::EC2::Subnet'
    Properties:
      AvailabilityZone: 'ap-northeast-1a'
      VpcId: !Ref MyVPC
      CidrBlock: '10.0.8.0/24'
      Tags:
        - Key: Name
          Value: subnet-1a
  SecurityGroup:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupName: Groupname-SG
      GroupDescription: "TEST"
      VpcId: !Ref MyVPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: '22'
          ToPort: '22'
          CidrIp: '0.0.0.0/0'
        - IpProtocol: tcp
          FromPort: '80'
          ToPort: '80'
          CidrIp: '0.0.0.0/0'
      Tags:
        - Key: Name
          Value: TESTSG

!Ref組み込み関数
!RefはCloudFormationテンプレート内で定義されたパラメーターやリソースの値を参照するために使用されます。

クロススタック参照
異なるCloudFormationスタック間で値を共有することを「クロススタック参照」と呼びます。値を他のスタックから参照するために、Outputsセクションでエクスポートした値は、!ImportValueを使用して他のスタックで取得できます。

AWS CLIを使用したCloudFormation
AWS CLIを使用して、AWS CloudFormationスタックを作成、更新、削除できます。以下は一般的なコマンドの例です。

デプロイ
aws cloudformation deploy --template-file stack_s3_param.yml --stack-name [s3bucketcreate]

削除
aws cloudformation delete-stack --stack-name [s3bucketcreate]

パラメーターオーバーライド
パラメーターオーバーライドを使用して、スタックをデプロイする際にパラメーターの値を指定できます。外部ファイルからパラメーター値を読み込む方法もあります。

aws cloudformation deploy --template-file stack_s3.yml --stack-name s3bucketcreate --parameter-overrides S3BucketName=samplecloudtechbucket

外部ファイルを使用したパラメーター管理
パラメーターを外部ファイルに格納し、外部ファイルからパラメーターの値を読み込む方法もあります。外部ファイルはテキストファイルやYAML形式でパラメーターを設定するのに便利です。

s3config.cfg
S3BucketName=samplecloudtechbucket2
デプロイ
aws cloudformation deploy --template-file stack_s3.yml --stack-name s3bucketcreate --parameter-overrides $(cat s3config.cfg)

AWS Config

AWS Configは、AWSリソースの設定と変更履歴を自動的に記録し、設定ルールに準拠しているかどうかを監視

構成管理:
AWS Configは、AWSリソースの設定と変更を記録し、リソースの状態を把握します。この情報はS3に保管されます。

ルール違反検知:
ユーザーが設定したルールに違反する変更が行われた場合、AWS Configはそれを検知し、違反したことを通知できます。例えば、S3の読み書き権限の変更、セキュリティグループのルール違反、タグの不足などを検知できます。

通知と統合:
ルール違反が検知された際、SNSやEventBridgeなどのAWSサービスと統合して通知や自動アクションを実行できます。

AWS Config ルール例)

S3のアクセス権限の監査:
AWS Configを使用して、S3バケットのアクセス許可ポリシーに変更が加えられた場合を監視できます。たとえば、新しいバケットがパブリックにアクセス可能に設定された場合、AWS Configはそれを検知し、通知を送信します。

セキュリティグループの監査:
セキュリティグループの設定を監視するためにAWS Configを使用できます。例えば、SSHのポートが全開放になっていないことを確認するルールを設定し、セキュリティグループの変更があれば通知を受け取ることができます。

リソースのタグ付けの監査:
AWS Configを使用して、リソースが正しくタグ付けされているかどうかを確認できます。タグが欠落しているリソースがある場合、AWS Configはそれを検知し、適切な通知を生成します。

https://bftnagoya.hateblo.jp/entry/2022/05/17/105728

CloudTrail

AWS CloudTrailは、AWS内で行われたAPI呼び出しを監査および記録するサービスです。

APIの監査:
CloudTrailは、誰がどのAPI呼び出しを行ったか、いつ実行されたかなどの情報を記録し、監査に使用できます。例えば、IAMユーザーがログインしたり、EC2インスタンスが削除されたりしたことを確認できます。

リージョン対応:
CloudTrailはリージョンごとに設定でき、特定のリージョンまたはすべてのリージョンでの監査を選択できます。

ログ保管期間:
デフォルトではCloudTrailのログは90日間保管されますが、必要に応じてS3に長期保管できます。SNSやCloudWatch Logsと統合して、監視および通知も可能です。

整合性の検証:
CloudTrailはログファイルの改ざんを防ぐために、ログの整合性の検証を提供します。

AWS Organizations

AWS Organizationsは、複数のアカウントの管理を効率化し、組織内でのアカウント管理を一元化するためのサービスです。

組織内アカウントの一元管理:
複数のAWSアカウントを一つの組織内で管理することができます。これにより、アカウントの管理が効率的になります。

組織内アカウントを横断した管理:
組織内のアカウントを横断してポリシーの適用やリソースの管理を行うことができます。セキュリティやリソースの一貫性を確保できます。

一括請求:
AWSの利用料金を全て一つの支払いアカウントに集約することができ、支払いの効率化が可能です。

アカウントの分割によるメリット

セキュリティの境界:
アカウントの分割により、セキュリティの境界を強化できます。異なるセキュリティ要件を持つアカウントを分けて管理できます。

リソースの管理:
リソースごとにアカウントを分けることで、リソースの所有権やアクセス制御をより細かく管理できます。

課金の分離:
アカウントごとに課金を分離することで、利用料金の追跡やコスト管理が容易になります。

主要コンポーネント

組織 (Organization)
AWS Organizations内で一元管理可能な複数のAWSアカウントのグループです。全てのAWSアカウントは組織内に属します。

管理ルート (Management Root)
階層構造の組織単位 (OU) の開始点で、組織内のすべてのアカウントを含みます。

管理アカウント (Management Account)
組織内の支払いアカウントであり、新しいアカウントの追加や管理など、組織全体を管理します。

組織単位 (Organizational Unit, OU)
アカウントのグループを指し、論理的なカテゴリにアカウントを整理するのに役立ちます。ただし、AWSアカウントは複数のOUに所属できません。

ポリシー (Policy)
セキュリティ強化のためのセキュリティポリシーや、アカウント単位でのポリシーを定義し、OUや管理ルートにアタッチすることができます。

https://dev.classmethod.jp/articles/organizations-gettingstarted/

設計例

ネットワークアカウント:
DX、Transit Gatewayなどを跨いでネットワークの枠組みを管理するためのアカウント。これにより、ネットワークの一元管理が実現します。

ログアカウント:
CloudTrail、Configなどのログを集約するアカウント。さまざまなログ情報を保存し、セキュリティと監査のために活用します。

監視アカウント:
CloudWatchの監視メトリクスを一元管理するアカウント。システムとアプリケーションのパフォーマンスをモニタリングし、問題の早期検出をサポートします。

セキュリティアカウント:
Security Hub、GuardDutyなどのセキュリティサービスを活用し、セキュリティ対策を一元管理するアカウント。セキュリティの脅威を監視し、対策を実施します。

SCP

SCPはAWS Organizations内で使用されるセキュリティポリシーです。IAMポリシーと非常に似ており、AWS組織全体でのアクセス制御を担当します。SCPでは「拒否」が「許可」よりも優先されるため、通常はホワイトリスト方式でポリシーを設定し、AWSリソースの使用範囲を制限していきます。

SCPはAWS Organizations内で階層構造を持ち、上位のSCPが「拒否」設定を持つと、下位のAWSアカウントやOUに影響を及ぼします。言い換えれば、AWSアカウントがIAMポリシーでアクセスを「許可」されていても、上位のOUで「拒否」設定がされている場合、拒否が優先されます。

SCPはAWS Organizationsの組織内で全体的なアクセス制御を行うためのツールで、アカウント単位での設定を管理します。一方、IAMポリシーはAWSアカウント内でリソースへのアクセスを制御するために使用されます。

Discussion