メインコンテンツまでスキップ

「AWS」タグの記事が97件件あります

全てのタグを見る

· 約8分
moritalous

AWSといえど、障害がまったくないわけではありません。年に1回大きな問題があるかないかというレベルなので、それはとてもすごいことだと思います。そのうち他のクラウドとも比較してみたいです。

AWS公式の障害情報はこちらから確認できますが、直近の情報しか見れません。そこで、過去の障害情報を確認するサイトを作成してみました。過去1年分ぐらいの確認ができます。

Cloud status history

そのうち他のクラウドもという思いから、この名前にしました。

· 約14分
moritalous

Steampipeとは

Steampipe, a new open source project from Turbot, enables cloud pros (e.g. software developers, operations engineers and security teams) to query their favorite cloud services with SQL. It has quickly become one of our favorite tools in-house and we hope it finds a way into your tool box as well.

Steampipe: select * from cloud; | Steampipe Blogより

· 約10分
moritalous

環境構築

認証局を構築する

Hashicorp社のVaultを使用します

  1. 設定ファイルの作成

    config.hcl
    storage "raft" {
    path = "/vault/file"
    node_id = "node1"
    }

    listener "tcp" {
    address = "0.0.0.0:8200"
    tls_disable = "true"
    }

    disable_mlock = true

    api_addr = "http://127.0.0.1:8200"
    cluster_addr = "https://127.0.0.1:8201"
    ui = true
  2. 起動

    docker run --rm -p 8200:8200 \
    -v `pwd`/vault/file:/vault/file \
    -v `pwd`/vault/logs:/vault/logs \
    -v `pwd`/config.hcl:/config.hcl \
    vault server -config=/config.hcl
  3. ブラウザで127.0.0.1:8200にアクセス

  • Create a new Raft clusterを選択

    image.png

  • key sharesを5、Key thresholdを3に指定。(詳細は公式ドキュメントを参照ください。)

    image.png

  • 画面遷移後、少し待つとキーが発行されます。Download keysでキーを一括ダウンロードしContinue to Unsealをクリックします。

    image.png

  • ダウンロードしたファイルのkeysから、3回別々のkey入力します。

    image.png

  • 右上のStatusが緑色に変わりました。ダウンロードしたファイルのroot_tokenを使ってログインします。

    image.png

  • ログインできました。

    image.png

認証局の作成

Enable new Engineをクリックします。

image.png

PKI Certificatesを選択し、Nextをクリックします。

image.png

Method Optionsを開き、Max Lease TTLを3650daysに設定します。Enable Engineをクリックします。

image.png

ConfigurationタブのConfigureボタンをクリック、Configure CAをクリックします。

image.png

項目を入力し、Saveボタンをクリックします。

項目
Common nameMy Private Certificate Authority
Options -> TTL3650days

Certificateが生成されるのでファイルに保存します。名前はprivate_root_CA.pemとしておきます。

URLsタブを選択し、Issuing certificateshttp://127.0.0.1:8200/v1/pki/caCRL Distribution Pointshttp://127.0.0.1:8200/v1/pki/crlと入力し、Saveボタンをクリックします。

image.png

パンくずリストのpkiから画面を戻り、RolesタブのCreate roleボタンをクリックします。

image.png

以下の項目を入力し、Create roleボタンをクリックします。

項目
Role nameMyPrivateCertificateAuthority
Options -> Allow any nameチェックを付ける
Options -> Enforce hostnamesチェックを外す

ここまでで認証局の作成は完了です。

デバイス証明書を作成

デバイス証明書を作成して登録しましょう。

Vaultの画面でMyPrivateCertificateAuthorityロールのメニューからGenerate certificateをクリックします。(ロール名のクリックでもOKです)

image.png

Common nameを入力し、Generateボタンをクリックします。

image.png

Certificate、Private keyを保存しておきます。(それぞれcertificate.pem、private.keyとします。) 画面下部のCopy credentialsからJSON形式で一括取得が可能です。

クラウドに接続

AWS IoT

IoT Coreの管理画面でCA証明書まで遷移し、CA証明書を登録ボタンをクリックします。

image.png

ページ中程に説明のある検証証明書を作成する必要があります。登録コードはこの後必要なのでコピーしておきます。

image.png

image.png

OpenSSLで以下のコマンドを実行します。

openssl genrsa -out verification_cert_key_filename.key 2048

ファイルが作成されます。続いてこちらのコマンド。

openssl req -new -key verification_cert_key_filename.key -out verification_cert_csr_filename.csr

入力が求められるので、Common Name以外は未入力でエンター、Common Nameは先程の登録コードを入力します。

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []: <===== ここに検証コード
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Vaultの画面に戻り、Rolesに作成したMyPrivateCertificateAuthorityの右側メニューから、Sign certificateを選択します。

image.png

以下の項目を入力し、Generateをクリックします。

項目
Certificate Signing Request (CSR)OpenSSLで生成したCSRファイルの内容
Common name検証コード
Options -> Exclude Common Name from Subject Alternative Names (SANs)チェックを付ける

image.png

証明書が作成されるので、ファイルに保存します。(verification_cert_filename.pemとします)

AWSの管理画面に戻ります。 CA 証明書にprivate_root_CA.pem、検証証明書にverification_cert_filename.pemを指定し、登録ボタンをクリックします。

image.png

CA証明書が登録されました。

証明書画面の証明書を登録ボタンをクリックします。

image.png

CA が AWS IoT に登録されていますを選択した状態でCA証明書を選択、作成済みのデバイス証明書をアップロードします。有効化もこのタイミングで実施しておくと良いでしょう。登録ボタンをクリックします。

image.png

IoTポリシーを作成します。ポリシーの画面でポリシーを作成ボタンをクリックします。

image.png

お試しなので、フル権限で作成します。ポリシーアクションとポリシーリソースはいずれも*です。作成をクリックします。

image.png

証明書の画面に戻り、先程登録したデバイス証明書にポリシーをアタッチします。

image.png

image.png

準備完了です。

接続します。

MQTTクライアントで以下の内容を入力し、接続します。

項目
プロトコルmqtts
ホスト名AWS IoTの設定画面で表示されるエンドポイント
ポート番号8883
クライアントID任意の文字
ユーザー名未指定
パスワード未指定
CAファイルAmazon Root CA 1を保存したファイル
クライアント証明書デバイス証明書(certificate.pem)
プライベートキープライベートキー(private.key)
  • Subscribeトピック名
任意(一部AWS予約トピックあり)
  • Publishトピック名
任意(一部AWS予約トピックあり)

GCP

注意

Google Cloud IoT Coreのサービスは2023年8月16日に廃止されるようです。(https://cloud.google.com/iot-core?hl=ja

GCPのIoT Core管理画面を開き、レジストリを登録ボタンをクリックします。

image.png

レジストリID、リージョン、Cloud Pub/Subトピックを入力、CA証明書欄private_root_CA.pemの値を貼り付け、作成ボタンをクリックします。

image.png

次はデバイスを登録します。左メニューのデバイスを選択し、デバイスを作成ボタンをクリックします。

image.png

デバイスID(device1)を入力し、認証欄にcertificate.pemの内容を貼り付けます。公開鍵の種類はRS256_X509を選択します。作成ボタンをクリックします。

接続します。

MQTTクライアントで以下の内容を入力し、接続します。

項目
プロトコルmqtts
ホスト名mqtt.googleapis.com
ポート番号8883
クライアントIDprojects/{GCPのプロジェクトID}/locations/{リージョン}/registries/{レジストリ名}/devices/{デバイス名}
ユーザー名unused
パスワードこちらの方法で生成したJWT
CAファイルGoogle ルート CA 認証パッケージを保存したファイル
クライアント証明書デバイス証明書(certificate.pem)
プライベートキープライベートキー(private.key)
  • Subscribeトピック名
/devices/{デバイス名}/commands/#
/devices/{デバイス名}/config

GCPの管理画面から構成を編集ボタン、コマンドを送信ボタンでテスト送信が可能です。

  • Publishトピック名
/devices/{デバイス名}/events

Azure

IoT Hubを作成します。

image.png

IoT Hub名を入力し、確認及び作成ボタンをクリック、作成ボタンをクリックします。

image.png

ルート証明書を登録します。左の証明書メニューを選択し、追加ボタンをクリックします。

image.png

証明署名を入力、private_root_CA.pemを選択、アップロード時に証明書の状態を確認済みに設定するにチェックを入れ、保存ボタンをクリックします。

image.png

次にデバイスを登録します。左のデバイスメニューを選択し、デバイスの追加ボタンをクリックします。

image.png

デバイスIDを入力しますが、ここで指定するデバイス名はデバイス証明書作成時に指定したCommon nameと同一である必要があります。認証の種類をX.509 CA 署名済みとし、保存ボタンをクリックします。

接続

接続します。

MQTTクライアントで以下の内容を入力し、接続します。

項目
プロトコルmqtts
ホスト名{IoT Hub名}.azure-devices.net
ポート番号8883
クライアントID{デバイスID}
ユーザー名{IoT Hub名}.azure-devices.net/{デバイスID}
パスワード未指定
CAファイルBaltimore CyberTrust Rootを保存したファイル
クライアント証明書デバイス証明書(certificate.pem)
プライベートキープライベートキー(private.key)
  • Subscribeトピック名
devices/{デバイスID}/messages/devicebound/#

Azureの管理画面からデバイスへのメッセージボタンでテスト送信が可能です。

  • Publishトピック名
/devices/{デバイスID}/messages/events/

· 約4分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

Amazon Managed Service for PrometheusとAmazon Managed Grafanaを使ってRaspberry Piのメトリクスを可視化してみました。(名前が長い。。そして統一感がない。。)

Amazon Managed Service for Prometheusのセットアップ

ap-northeast-1.console.aws.amazon.com_prometheus_home_region=ap-northeast-1(iPad).png

ワークスペースの名称を決めるだけです。

ap-northeast-1.console.aws.amazon.com_prometheus_home_region=ap-northeast-1(iPad) (1).png

出来上がり。超簡単

ap-northeast-1.console.aws.amazon.com_prometheus_home_region=ap-northeast-1(iPad) (2).png

Raspberry Pi4からメトリクスを送信

IAMユーザーのアクセスキー情報が必要ですので、IAMユーザーを作成します。 必要なポリシーはこんな感じです。aps:RemoteWriteだけでいいかもしれません。

注意点はなんといってもサービス名が AMP ってところです。さらにActionの接頭辞は aps (笑)

console.aws.amazon.com_iam_home(iPad) (1).png

console.aws.amazon.com_iam_home(iPad) (2).png

Docker ComposeでPrometheusとNode exporterを起動します。

docker-compose.yaml
version: '3.8'

services:
prometheus:
image: quay.io/prometheus/prometheus:latest
network_mode: host
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml

node-exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
network_mode: host
pid: host
restart: unless-stopped
volumes:
- '/:/host:ro,rslave'

remote_writeのところに認証情報をセットします。

prometheus.yml
## my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).

## Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093

## Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"

## A scrape configuration containing exactly one endpoint to scrape:
## Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'

# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.

static_configs:
- targets: ['localhost:9090']

- job_name: 'node'

static_configs:
- targets: ['localhost:9100']

remote_write:
- url: https://aps-workspaces.ap-northeast-1.amazonaws.com/workspaces/ws-0ae04b80-d5e2-4b2c-a198-5a0c60989b58/api/v1/remote_write

sigv4:
# The AWS region. If blank, the region from the default credentials chain
# is used.
region: ap-northeast-1

# The AWS API keys. If blank, the environment variables `AWS_ACCESS_KEY_ID`
# and `AWS_SECRET_ACCESS_KEY` are used.
access_key: XXXXXXXXXXXXXXXXXXXX
secret_key: XXXXXXXXXXXXXXXXXXXX

起動します

bash
## docker-compose up

Amazon Managed Grafanaのセットアップ

ap-northeast-1.console.aws.amazon.com_grafana_home_region=ap-northeast-1(iPad).png

ワークスペース名をつけます

ap-northeast-1.console.aws.amazon.com_grafana_home_region=ap-northeast-1(iPad) (1).png

Grafanaの画面にログインする際に使う認証情報を選択します。AWS SSOにしてみました。

ap-northeast-1.console.aws.amazon.com_grafana_home_region=ap-northeast-1(iPad) (2).png

GrafanaがアクセスするAWSのリソースを選択します。 あとからも変更できます。

ap-northeast-1.console.aws.amazon.com_grafana_home_region=ap-northeast-1(iPad) (4).png

ap-northeast-1.console.aws.amazon.com_grafana_home_region=ap-northeast-1(iPad) (5).png

これで作成は完了です。 続いてログインするユーザーを追加します。「ユーザーとユーザーグループの設定」をクリック

ap-northeast-1.console.aws.amazon.com_grafana_home_region=ap-northeast-1(iPad) (10).png

今回はAWS SSOで作成したグループを追加します。

ap-northeast-1.console.aws.amazon.com_grafana_home_region=ap-northeast-1(iPad) (12).png

権限は閲覧者と管理者の2つあります。デフォルトが閲覧者で管理者に変更する場合はチェックを入れて「管理者を作成する」をクリックします。(閲覧者に戻す方法はないのかな?)

ap-northeast-1.console.aws.amazon.com_grafana_home_region=ap-northeast-1(iPad) (13).png

Grafanaログイン

マネジメントコンソールに表示されるワークスペースURLからアクセスします。設定したAWS SSOのユーザーでログインするとGrafanaの画面が表示されます。メニューにAWSのアイコンがありますね。

g-35789bdbc7.grafana-workspace.ap-northeast-1.amazonaws.com__orgId=1(iPad).png

データソースにAmazon Managed Service for Prometheusを追加します。 AWSアイコンからデータソースをたどると追加できます。

g-35789bdbc7.grafana-workspace.ap-northeast-1.amazonaws.com__orgId=1(iPad) (2).png

ここまでできれば通常のGrafana同様です。

g-35789bdbc7.grafana-workspace.ap-northeast-1.amazonaws.com__orgId=1(iPad) (3).png