Quantcast
Channel: 技術 –サーバーワークスエンジニアブログ
Viewing all 1210 articles
Browse latest View live

Amazon Transcribeのリアルタイム文字起こしでPrivateLinkをサポートするようになりました!

$
0
0

こんにちは、技術1課の小倉です。
2020/6/26にアップデートがあり、Amazon Transcribeのリアルタイム文字起こしでPrivateLinkをサポートするようになりました!

Announcing AWS PrivateLink Support for Amazon Transcribe Real-Time Streaming

今まではVPCからTranscribeへの通信はインターネットを経由して通信していましたが、今回のアップデートでPrivateLinkを利用して、インターネットを経由せずにセキュアに通信できるようになりました。

Amazon Transcribeとは

音声をテキストに文字起こしするサービスで、音声ファイルとリアルタイムの文字起こしがあります。

音声ファイルの文字起こしは日本語をサポートしているのですが、今回のアップデートのリアルタイムの文字起こしは、残念ながらまだ日本語はサポートされておらず、また東京リージョンでも利用することができません。日本語と東京リージョン対応は気長に待ちましょう。

AWS公式サイト : Amazon Transcribe料金

インターフェイス VPC エンドポイント (AWS PrivateLink)とは

VPCからAWSサービスへの通信をインターネットを経由せずにAWS内でセキュアに通信できる機能です。

VPCからリージョンサービスに通信するとき、インターフェイス VPC エンドポイント (AWS PrivateLink)なしの場合は以下のようにインターネットを経由して通信しなければなりません。もしプライベートサブネットならNAT Gatewayなどを用意してインターネットと通信できるようしなければなりません。

インターフェイス VPC エンドポイント (AWS PrivateLink)ありの場合は、インターネットを経由することなく、AWS内の通信のみでできます。

AWS公式サイト : インターフェイス VPC エンドポイント (AWS PrivateLink)料金

インターフェイス VPC エンドポイント (AWS PrivateLink)の設定

東京リージョンが対応していませんので、バージニア北部リージョンで試しに作ってみます。
マネジメントコンソールでVPCを開き、ナビゲーションペインの[エンドポイント]をクリックし、[エンドポイントの作成]をクリックします。

エンドポイントの作成画面で以下の設定をし、[エンドポイントの作成]をクリックする。

  • サービスカテゴリ : AWSサービス
  • サービス名 : transcribeで検索し、[com.amazonaws.us-east-1.transcribestreaming]を選択
  • VPC/サブネット : 接続するVPC/サブネットを選択する
  • セキュリティグループ : 必要に応じて作成
  • ポリシー : 必要に応じて変更(今回はフルアクセスを選択)

以下の画面で、[閉じる]をクリックします。

エンドポイントの一覧の画面で、作成されたエンドポイントを確認できます。
エンドポイントのDNS名を使って作成したエンドポイントに接続します。

念のため、サブネットタブをクリックして、エンドポイントのIPを確認して、DNS名の名前解決と同じIPアドレスかどうかを確認します(今回は172.31.81.26)。

詳細タブに記載されていたDNS名を名前解決してみると、172.31.81.26であることを確認しました。

まとめ

Amazon Transcribeのリアルタイム変換でPrivateLinkをサポートするようになりました。本アップデートにより、VPCからインターネットを経由せずに通信できるようになりましたので、セキュアに通信することができます。ぜひ使ってみてはいかがでしょうか。

また、本ブログの内容は2020/7/1(水) 18:00にYouTubeで配信される「30分でわかる AWS UPDATE!」でも取り上げる予定ですので、ぜひご覧ください!


Amplify Console パターンベースのブランチデプロイ機能をサポート

$
0
0

はじめに

こんにちは、技術1課の山中です。
暑くなってきましたね!いつも仕事をしている部屋にエアコンがなくてそろそろやばいなあと感じ始めています。。
というのはさておき!
今回はこのアップデートについて見ていきます!

Amplify Console がすべてのブランチデプロイのカスタムサブドメインを自動的に作成および削除するためのサポートを追加

AWS Amplify とは

AWS Amplify (Amplify) は Web フロントエンド、モバイルアプリの開発を加速させるために作られた AWS が提供する OSS の開発プラットフォームです。
モバイルアプリケーションおよびWebアプリケーションを構築するために必要なツール群を総称したもので、具体的には、

  • iOS, Android, Webアプリと統合するためのライブラリ
  • UIコンポーネント
  • コマンドラインインターフェース ( Amplify CLI )

を提供しています。

AWS Amplify Console とは

AWS Amplify Console (Amplify コンソール) とは、サーバーレスウェブアプリケーションのデプロイ・ホスティングを行うための AWS サービスのひとつです。
コードリポジトリのブランチを指定し、環境名などを設定するだけで、簡単に継続的デプロイ環境を構築、ホスティングまで行ってくれます。
詳細は以下をご参照ください。

AWS Amplify コンソールとは? – AWS Amplify

料金

Amplify コンソールは、ビルド & デプロイ、ホスティングという 2 つの機能に対して料金が設定されています。
ビルド & デプロイ機能の場合、ビルド分あたりの料金は 0.01USD です。
ホスティング機能の場合、対象の GB ごとの料金 0.01USD と保存された GB ごとの価格は 0.01USD です。
詳細は以下をご参照ください。

料金 – AWS Amplify Console | AWS

今回のアップデート

これまでも Amplify コンソールではソースリポジトリのブランチごとにデプロイ、ホスティング機能を提供していたのですが、今回のアップデートで新たにパターンベースのデプロイ機能およびサブドメインの自動作成 / 削除機能を提供しました。
例えば、 GitFlow ワークフローにて開発をすすめるチームでは feature/* というパターンでブランチを指定できるため、より効率的に機能追加後のテストやレビューが可能になると思われます。

試してみる

AWS のブログに従い、今回のアップデート内容を見ていきましょう。
Automatically create and delete custom sub-domains for your branch deployments with Amplify Console | AWS Mobile Blog
以下ステップにて進めていきます。

  1. Step1: サンプルアプリのデプロイ
  2. Step2: 自動検知の有効化
  3. Step3: カスタムドメインのセットアップ
  4. Step4: サブドメイン自動作成/削除の設定
  5. Step5: デプロイ済みブランチの自動削除

Step1: サンプルアプリのデプロイ

今回サンプルアプリとして、 Gatsby 公式のブログ用テーマ gatsby-starter-blog: Gatsby Starter | GatsbyJS を使用します。
こちら のリンクをクリックすると、 GitHub にリポジトリがフォークされ、 Amplify にて Gatsby スターターブログがビルド、デプロイ、ホストされます。
リンクをクリックすると、以下画面が現れるので Connect to GitHub ボタンをクリック。
GitHub の認証画面が表示された場合は、認証を行ってください。

任意のアプリ名を入力し Save and deploy ボタンをクリックします。

GitHub リポジトリのフォーク、 Amplify コンソールアプリの作成のあと、

ビルドが開始します。

Continue ボタンをクリックすると Amplify コンソールに移動して、ステータスを確認できます。

しばらく経つとデプロイが完了するので、左の画像をクリックしホスティングされているアプリにアクセスしてみましょう。

Gatsby Starter Blog がデプロイされています。

Step2: 自動検知の有効化

続いてブランチの自動検知機能を有効化していきます。
先程の Amplify コンソールの画面から アプリの設定全般 を選択します。

続いて右上の 編集 ボタンをクリック。

Branch autodetection および Branch auto-disconnection を有効化し、 Branch autodetection – patterns に検知したいパターンを入力します。
Branch autodetection を有効化することで指定したパターンに一致するブランチが Git リポジトリ上に作成された場合に Amplify が自動的に接続し、デプロイを行います。
また、 Branch auto-disconnection も有効化しておくことで、指定したパターンに一致するブランチが削除された場合に自動的に接続を解除し、紐づくリソースを削除します。
今回、検知するパターンとしては feature* (featureから始まるブランチ名) を指定しています。
入力が終わったら 保存 ボタンをクリックしましょう。

これで設定が完了したので、はじめにフォークした GitHub リポジトリ上で feature1 ブランチを作成してみます。

Amplify コンソールに戻ると、 feature1 ブランチのデプロイが開始されています。

デプロイが終わったので、確認してみましょう。

サブドメイン以外特に変わりはありません (内容は特に変えていないので当然) が、きちんとデプロイされていました。

Step3: カスタムドメインのセットアップ

続いてカスタムドメインのセットアップを行っていきます。
今回は Route53 で購入した serverworks.info を利用します。
アプリの設定ドメイン管理 を選択します。

カスタムドメインの追加 ボタンをクリックします。

ドメイン欄から対象のドメインを選択し、以下のように設定します。

保存 ボタンをクリックすると、Amplify 側で SSL 証明書を発行し、 CNAME レコードを作成します。
めっちゃ便利ですね。

しばらく経つと設定が完了するので、それぞれのサイトに改めてアクセスしてみましょう。

  • https://master.serverworks.info/
  • https://feature1.serverworks.info/

    きちんとそれぞれカスタムドメインでホスティングされています。

Step4: サブドメイン自動作成/削除の設定

今、手動でサブドメインの設定を行いました。
次の設定にてブランチ名に合わせてサブドメインを自動で作成するようにします。
先ほどのドメイン管理の画面から、 サブドメインの管理 ボタンをクリックします。

Subdomain auto-detection にチェックを入れ、パターンの入力欄はデフォルトのままにしておきます。
デフォルト設定だと、 Amplify コンソールに接続されるすべてのブランチに対してサブドメインを作成します。
もし任意のブランチだけにサブドメインを持たせたいような場合は、 feature/* のようにこの項目をカスタマイズしてください。
今回はこのまま 更新 ボタンをクリックします。

早速 GitHub リポジトリに feature2 ブランチを作成し、動作をお確認してみましょう。

ブランチの作成とほぼ同時に、 Amplify コンソールにて feature2 ブランチのデプロイが開始されました。

デプロイが完了したので、左の画像をクリックしてサイトにアクセスしてみます。

https://feature2.serverworks.info でアクセスできています!

Step5: デプロイ済みブランチの自動削除

今度は、 GitHub リポジトリからブランチを削除し、 Amplify にてデプロイ済みのブランチが削除されることを確認してみます。
feature2 ブランチを削除してみましょう。

そうするとすぐに先ほどデプロイした feature2 ブランチのリソースが削除されています。

おわりに

これまで AWS CodePipeline や AWS CodeBuild で CI/CD のフローを作っていたのですが、Amplify めちゃめちゃ便利ですね!
どんどんこれから使っていきたいです!

また、この内容は 2020/7/1(水) 18:00 よりYouTube にて配信する「30分でわかる AWS UPDATE!」で取り上げますので、是非ご覧ください!
チャンネル登録よろしくおねがいします!!
サーバーワークス チャンネル – YouTube

参考

AWS サービスクォータでIAMの上限が管理できるようになりました!

$
0
0

こんにちは、技術1課の小倉です。
2020/6/25にアップデートがあり、AWS サービスクォータでIAMの上限が管理できるようになりました!

Manage your AWS Identity and Access Management quotas with AWS Service Quotas

今までは、IAMのサービス上限(例えば、IAMユーザがどれくらい作れるのかやIAMグループがどれくらい作れるのかなど)を確認することができず、上限緩和をしていた場合に現在の上限を確認するには、上限緩和申請のケースを確認するや別管理をしなくてはいけませんでした。今回のアップデートでは、AWS サービスクォータからIAMの上限を確認することができるようになりました。

サービスクォータとはなどは弊社ブログに詳しく書いてありますので、こちらをご参照ください。
AWS Service Catalogの上限がAWS Service Quotasで管理可能になりました!
AWS Service Quotas (サービスクォータ) を使ってみた

IAMはグローバルサービスのため、IAMのサービスクォータを確認するにはリージョンをバージニア北部リージョンにする必要があります。
サービスクォータのコンソール画面より、左の[AWSサービス]をクリックし、IAMを検索し、AWS Identity and Access Management (IAM)をクリックします。

IAMの各リソースの上限を確認することができます。一番右の調整可能がはいとなっている項目は上限緩和申請が可能なリソースです。

まとめ

AWS サービスクォータでIAMの上限が管理できるようになりました。今までは上限の確認をすることができなかったため、管理が楽になります。ぜひサービスクォータを活用してみてはいかがでしょうか。

Transit Gatewayのルーティング仕様を分かりやすく解説してみる

$
0
0

技術3課の杉村です。AWS Transit Gateway以下、Transit GatewayまたはTGW)のルーティングの仕様を解説してみます。

1. Transit Gateway関連のルート設計の概要図

Transit Gatewayのルーティング設定を俯瞰してみると、この図のようなかんじです。
当記事ではこの図と文章を見比べながら読むことになりますので、複数のウインドウで開いておくなどをお勧めします。

2. 用語

Transit Gateway
図中の紫の四角いアイコンです。tgw-0123abcというIDが振ってあるものです。
AWS上で仮想的なルーターとしてふるまいます。
リージョン別なAWSリソースです。

Transit Gateway Attachment
図中の色のついた丸です。Transit Gatewayにくっついていますね。
Transit Gatewayと、別のネットワークの接点を意味します。
“VPC”, “VPN”, “Direct Connect Gateway”, “Peering(他のTransit Gateway)”用のAttachmentが作れます。
また、各AttachmentにはTransit Gateway Route Tableを紐づけることができます。

Transit Gateway Route Table
図右下の吹き出し内にある、四角いのがTransit Gateway Route Tableです。
Attachmentに入ってきたパケットを、どこにルーティングするか決定します。

これらの用語の中で、Transit Gateway Route Tableの概念が一番のポイントなので、以降で解説していきます。

3. Transit Gateway Route Table

3-1. ルーティングの仕様

ここからは、図と見比べながらお読みください。

例として、黄色いAttachment用のルートテーブルを見てみましょう。
(図の中に4つあるうちの左上のルートテーブルです)
このルートテーブルは、黄色いAttachmentに紐づいています。
黄色いAttachmentは、Transit Gatewayと図右上の 10.300.0.0/16 というVPCを繋ぐAttachementですね。

このルートテーブルは、VPC 10.300.0.0/16からTGWに入ってきた通信を以下のようにルートします。
「宛先が 10.10.0.0/16 のパケットは、Attachment赤、つまりSite Aにルーティング」
「宛先が 192.168.10.0/24 のパケットは、Attachment青、つまりSite Bにルーティング」
「宛先が 192.168.20.0/24 のパケットは、Attachment青、つまりSite Bにルーティング」
「宛先が 192.168.30.0/24 のパケットは、Attachment青、つまりSite Bにルーティング」

3-2. 静的ルート(Static)と動的ルート(Propagation)

Transit Gateway Route TableのルートはStaticに記述することもできますし、Propagate(伝播)設定をすることもできます。

例えばこの黄色Attachment用ルートテーブルにて「Attachment赤からPropagationを受け取る」というPropagationを作ることができます。
すると以降は自動的に、Attachment赤の対向であるSite AからBGPで広報されてきた経路が、黄色Attachment用ルートテーブルに追加されるようになります。
つまりPropagationを設定するとは、BGPピアを結ぶようなものです。

同じように「Attachment緑からPropagationを受け取る」というPropagationを作ったとします。
すると、Attachment緑の対向であるVPC 10.200.0.0/16から、経路を受け取ることになります。こうしておくと、VPCにセカンダリCIDRが追加されたときなどに自動的にルートテーブルに反映されるようになります。

次は、反対の方向、つまりTransit Gatewayから対向のネットワークが受け取る経路についてです。

VPC Attachmentの場合
VPC側ではTransit Gatewayからは経路を受け取りません
VPC側Route Tableには静的に、Transit Gatewayへのルートを追加する必要があります。

VPN Attachmentの場合
対向ルータ(CGW)は、そのVPN Attachmentに紐づいている Transit Gateway Route Tableが 持っている経路を受け取ります。
つまり、図中のSite AとTGWがVPN(BGPを使ったDynamic設定)で繋がっているとすると、Site A側のルータ(CGW)は、Attachment赤用Route Tableに書いてある経路を受け取ることになります。

Direct Connect Gateway用Attachmentの場合
Direct Connect GatewayにTransit VIFを紐づけるときに「Allowed Prefixes(許可されたプレフィックス)」という設定がありますが、ここで設定したCIDRがそのまま対向ルータに広報されます。
下記ドキュメント参照。
Allowed prefixes interactions

Peering(他のTransit Gateway)用Attachment
動的ルートは利用できません。

3-3. ルートの評価(優先度)

万一、同じCIDR向けのルートが複数存在してしまった場合どうなるでしょうか。
How transit gateways work に記載があります。

  • 基本はロンゲストマッチ
  • もし同じCIDR向けのルートが複数あるなら
    • 静的ルートが動的(Propagatedな)ルートより優先
    • 動的ルート間ではVPC>Direct Connect Gateway>VPNの順で有線

Connect と Lambda を組み合わせるときに注意すべき点いくつか

$
0
0

こんにちは。技術4課の保田(ほだ)です。

みなさん好きな野菜は何ですか?私はピーマンが好きです。小さいころから好きで小学生の卒業制作でピーマンを擬人化したキャラクターの絵を描いたぐらい好きです。色も良いですよね。鮮やかさで言えば超新星爆発と同じぐらいだと思います。

要約

Lambda から Connect に返却できるデータ量の上限は 32 KB だから気を付けよう

あと特に返したいデータがなくても 1階層の辞書型を返そう

Connect + Lambda の組み合わせ

Amazon Connect のコンタクトフローから Lambda を呼び出して、その戻り値を再びコンタクトフロー側で使うことはよくあります。例えば読み上げ音声を動的に生成する場合などです。

Connect で Lambda を使う場合は基本的にバイブルとして参照することになるのがこのドキュメントです。

AWS Lambda 関数を呼び出す

必要なことはここをじっくり読めば書いてることが大半ですが、意外と見落としがちなのが今回の話題になります。

返却できるデータ量

返されるデータのサイズは、UTF-8 データの 32 KB 未満である必要があります。

返却できるデータ量は32KB 未満です。

手元の環境で試してみて次のような値を返すようにして見ますと、どうやら 32,500 と 33,000 の間に境界があるようです。

return {'result': 'a' * 32_000}

また、この場合のコンタクトフローのログは次のように「 Lambda がエラーを返した」と出ます。

{
    "Results": "The Lambda Function Returned An Error.",
    "ContactId": "2842f992-51fb-4a63-9fcc-3363116d4179",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:012345678901:instance/cfdf2254-4210-448b-8b90-d6817ff7107a/contact-flow/4781923c-15a4-41a7-835b-effbc9520b22",
    "ContactFlowModuleType": "InvokeExternalResource",
    "Timestamp": "2020-07-01T05:46:31.940Z",
    "Parameters": {
        "FunctionArn": "arn:aws:lambda:ap-northeast-1:012345678901:function:hoge-function",
        "TimeLimit": "3000"
    }
}

Lambda 自体はエラーを吐いていなくても、戻り値が 32KB を超えるとこのようになりますので、この制限に思い至らないと「 Lambda のログでは正常終了してるのに~~!!」となってしまいます。

動的にデータを生成してフローに返却するような構成を考えられる際は、設計段階でこの制限に達するケースがないか検討する必要がありますね。

また、返却した音声を読み上げさせたい場合も、この32KB制限とは別の制限もあります。詳細は下記のリンク先をご参照ください。

Amazon Connect の読み上げブロックには文字数制限があるぞ! 気をつけよう

本文中に出てくる 状況を把握していた開発メンバーのひとり は私です。

返却できるデータ型

もう一つの注意点がこちらです。

関数から返される出力は、英数字、ダッシュ、アンダースコアのみが含まれる値を持つ、キーと値のペアのフラットオブジェクトである必要があります。ネストされた複雑なオブジェクトはサポートされません。

こちらについてはもし間違えていても単体試験の段階で気づけるのでデッケェ罠というものでもありませんが、微妙に引っかかりそうなポイントですので解説します。

読んでみると「値を返したいときはネストしていないキー・バリュー型のオブジェクトじゃないとダメだよ」という意味にも取れるので、「じゃあ別に戻り値をどうこうしたいわけじゃないから戻り値はなしでいいや」とやってしまうとアウツです(エラーが起きます)。

これ実は「必ずネストしていないキー・バリュー型のオブジェクトを返さないとダメだよ」という意味です。

Python で Lambda を書いた場合は辞書型のネストしていない変数を返すようにしましょう。フローのログで JSON ぽく見えるからとjson.dumps(result) のように JSON 文字列に変換するのも「キーと値のペアのオブジェクト」ではなくなってしまう(ただの文字列)のでダメです。

まとめ

Connect + Lambda の代表的な躓きどころについて(ほぼ)実経験をもとにご紹介しました。

有望技術の塊なのでどんどん使っていきましょう!

あとピーマン食べましょう!

Transit GatewayやDirect ConnectのAS番号について

$
0
0

技術3課の杉村です。AWS Transit Gateway(以下、Transit GatewayまたはTGW)やDirect Connect Gateway利用時には、ASN(AS番号)を設定しなければいけません。
でも、ASNって設定する箇所がたくさんあって、訳が分からなくなってしまいますよね。
Transit Gateway, Virtual Private Gateway(VGW), Direct Conenct Gateway, Virtual Interface(VIF)…など。
今回はそれを整理します。

1. そもそもASN(AS番号)って?

ASNとは、ASに一意に振られる番号です。
ASとは、BGPという経路制御プロトコルの制御単位であり、ネットワークのカタマリです。
BGPについては詳しいことはインターネットを検索すればたくさんの記事が出てきますので、そちらをご参照ください。

簡単に言うとBGPでは、異なるASに所属するルーター同士がBGPピアというペアになって、経路情報を交換しあいます。
ルーターはお隣のBGPピアに経路情報を渡すとき、AS_PATHという属性の先頭に自分のAS番号を付与してから渡します。
ルーターが経路情報をBGPから受け取ったとき、このAS_PATHに自分のAS番号が含まれている場合、「あ、自分のASの情報だ。ならいらないね。」と判断して、その経路情報を破棄します。
(これにより経路情報のループを防いでいます)

  • BGPはAS間で経路情報を交換するプロトコルである
  • ASN(AS番号)はASに一意に振られる番号である
  • 受け取った経路情報のAS_PATHに自分のASN(AS番号)が含まれている場合、その経路情報を破棄する

という仕組みを理解してみてください。

2. Transit GatewayやDirect ConnectのAS番号

BGPの仕組みとして「受け取った経路情報のAS_PATHに自分のASN(AS番号)が含まれている場合、その経路情報を破棄する」という仕様があるので、専用線やVPN接続を利用するときにはASN(AS番号)はどうも重複してはいけなさそうなことは分かると思います。
Transit Gateway利用パターンとDirect Connect Gateway(VGW)のパターンを図に整理してみました。

2-1. Transit Gatewayパターン

図のように、各コンポーネント間でBGPによる経路交換が行われているため、ASN(AS番号)は重複してはいけません。

参考: トランジットゲートウェイの関連付け

トランジットゲートウェイ を 1 つ以上の Direct Connect ゲートウェイに関連付ける場合、トランジットゲートウェイ およびその Direct Connect ゲートウェイで使用される自律システム番号 (ASN) は異なる値である必要があります。たとえば、トランジットゲートウェイ と Direct Connect ゲートウェイの両方にデフォルトの ASN 64512 を使用すると、関連付けのリクエストは失敗します。


異なるリージョンにある複数の トランジットゲートウェイ に接続する場合は、それぞれの トランジットゲートウェイ に一意の ASN を使用します。

2-2. Direct Connect Gateway(VGW)パターン

Transit Gatewayを使わないDirect Connect Gatewayのパターンですが、図のように、Virtual Private Gateway(VGW)のASN(AS番号)は考慮しなくてよいです。(同じ番号でも、違う番号でもよい)

Direct Connect Gatewayは対向ルーター(BGP ピア)に経路情報を広報するとき、経路を自身の ASN(AS番号)のみで広報します。よってオンプレミス側の機器では VGW 個々の ASN については認識しません。
どうやら、Direct Connect GatewayとVGWの間では、BGPとは違う仕組みで経路交換が行われているようです。

参考: AWS Direct Connect よくある質問

Q.Direct Connect Gateway と仮想プライベートゲートウェイ用に異なるプライベート ASN を使用できますか?
はい。Direct Connect Gateway と仮想プライベートゲートウェイ用に異なるプライベート ASN を使用できます。受信する Amazon 側の ASN はプライベート仮想インターフェイスの関連付けに依存することに注意してください。


Q.Direct Connect Gateway と仮想プライベートゲートウェイ用に同一のプライベート ASN を使用できますか?
はい。Direct Connect Gateway と仮想プライベートゲートウェイ用に同一のプライベート ASN を使用できます。受信する Amazon 側の ASN はプライベート仮想インターフェイスの関連付けに依存することに注意してください。

【はじめてのAWS】AWS IAM Access Analyzer を設定しよう

$
0
0

 

今回は、弊社のYouTubeチャンネル「サーバーワークス チャンネル」にて先日公開した以下動画についてblogでも内容を紹介いたします。

動画内では、実際にAWSマネジメントコンソールを操作しながら設定を行っていくデモがありますのでもし興味があれば是非、動画も参照頂ければと思います。

内容が良かった、為になったと感じたら是非Goodボタンやチャンネル登録頂けると嬉しいです。

対象者

・AWSをこれからはじめたい方
・AWSをもっと活用したい方
・AWS IAM Access Analyzerの概要や設定イメージを把握したい方

AWS IAM Access Analyzerとは

AWS IAM Access Analyzer は、AWSリソースに紐付いているポリシーを検査し、他AWSアカウントや外部のインターネット等からのアクセスを可能とするような設定がされているか否か、つまり管理者として“意図せぬ公開設定がされていないか“を検出および可視化してくれる機能となります。

新規または更新されたポリシーを継続的に監視し、付与されたアクセス許可を数学的なロジックや推論を使用して分析してくれます。アクセス制御状況のインパクトを集約、可視化し、利用されているアカウントの外側からの意図しないアクセスからリソースが保護されていることの確認に活用出来ます。

参考: AWS IAM Access Analyzer とは
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/what-is-access-analyzer.html

参考: AWS Identity and Access Management (IAM) Access Analyzer を使った意図しないリソースアクセスの特定
https://aws.amazon.com/jp/blogs/news/identify-unintended-resource-access-with-aws-identity-and-access-management-iam-access-analyzer/

AWS IAM Access Analyzer の料金

無料(追加料金なし)でご利用頂けます。

 AWS IAM Access Analyzer の注意事項

注意点として以下3点を紹介します。

  1. すべてのリソースタイプがサポートされている訳ではない
    2020年06月30日 現在は以下リソースタイプがサポートされています。
    最新の情報は以下公式の情報を確認してください。

    Amazon Simple Storage Service バケット
    AWS Identity and Access Management ロール
    AWS Key Management Service キー
    AWS Lambda の関数とレイヤー
    Amazon Simple Queue Service キュー

    参考: サポートされているリソースタイプ
    https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access-analyzer-resources.html

  2. リージョン単位に設定する必要がある
    AWS IAM Access Analyzer は、設定で有効になっている AWSリージョンでのみリソースに適用されているポリシーを分析します。複数リージョンを利用する際には個別に有効の設定が必要となります。
  3. 特定の条件下でまれに、ポリシーの追加や更新が通知されないことがある
    例えば 最大12時間かかる場合がある S3 バケットに対するアカウントレベルのパブリックアクセスのブロック設定の変更や、AWS CloudTrail ログ配信で配信の問題がある場合 等に更新時に再スキャンがトリガーされないケースがあります。その場合、次の定期スキャン(24時間以内)まで通知がされない為、必要に応じて手動で「再スキャン」を実施する必要があります。

AWS IAM Access Analyzer のセットアップ実施のデモ(動画内 01:27〜)

実際にAWSマネジメントコンソールから AWS IAM Access Analyzer の作成を行い、検出結果のリストを確認するといったデモを動画内で紹介しています。
管理者視点で、ざっくりとAWS IAM Access Analyzerの 設定や運用イメージを掴んで頂ける内容となっておりますので、もし興味があれば動画を参照ください。

まとめ

AWS IAM Access Analyzer は、追加費用なしのわずか数クリックで設定が完了し、セキュリティ上のリスクであるリソースとデータへの意図しない外部アクセス設定がされていないか(リソースが保護されているか)の特定に役立てる事ができます。

AWSアカウント管理者として時間の経過と共に、アクセス許可が実際にどのように使用されているか、“最小限のアクセス許可の原則”に従っているかを確認することはとても重要です。
管理者としてAWSアカウントを作成した際には、初期設定項目として実施を検討してみてください。

関連blog

IAM Access Analyzerで外部アクセスポリシーを検出しよう

IAM Access Analyzer が S3 アクセスポイントポリシーに対応しました!

 

Amazon CodeGuru が一般利用可能になりました

$
0
0

はじめに

こんにちは、技術1課の山中です。
Amazon CodeGuru が先日 GA となりました!
すごそうだけど、よく知らない…という感じだったので、チュートリアルをもとに試してみています。

Find your most expensive lines of code and improve code quality with Amazon CodeGuru – now generally available

Amazon CodeGuru とは

Amazon CodeGuru (CodeGuru) は、自動化されたコードレビューとアプリケーションパフォーマンスの推奨事項を提供する機械学習サービスです。
CodeGuru は、ベストプラクティスとオープンソースプロジェクトおよび Amazon 内部にある数百万のコードレビューと数千のアプリケーションから培われたノウハウをベースにしているとのことで、アプリケーション開発がかなり楽になりそうです。
また、 Amazon CodeGuru はコードレビューとアプリケーションパフォーマンスの分析とで、大きく以下 2 つの機能に分かれています。

  • CodeGuru Reviewer
    コードレビューの自動化
  • CodeGuru Profiler
    アプリケーションパフォーマンスの分析

Amazon CodeGuru – アマゾン ウェブ サービス

CodeGuru Reviewer

CodeGuru Reviewer は、コード内の問題を検出して推奨される修正方法を提供する 自動コードレビューサービス です。
検出される問題としては以下のようなものがあります。

  • 同時実行の問題
  • 潜在的な競合状態
  • サニタイズされていない入力
  • 資格情報などの機密データの不適切な処理
  • リソースリークのチェック
  • 並行コードの競合状態
  • etc…

CodeGuru Reviewer はソースリポジトリを CodeGuru に関連付けるだけで開始することができます。
ソースコードのプルリクエストを自動的にスキャンして、プルリクエスト内で問題を解決するための推奨事項を提供してくれるって、すごいですね…!

CodeGuru Profiler

CodeGuru Profiler を利用すると、アプリケーションの CPU 使用率とレイテンシー特性を継続的に分析して、アプリケーションで最もオーバーヘッドが高い箇所を特定することができます。
また、 CodeGuru Profiler は、アプリケーションのランタイムプロファイルを分析して、コードの最も関連性の高い部分を特定するとともに、パフォーマンスを向上させる方法についてアドバイスしてくれます。
更にこの分析結果をグラフとして可視化してくれるので、ユーザはどこを改善すべきか簡単に理解できるようになります。
CodeGuru Profiler は上記のような理由で 本番環境 で継続的に実行されることが推奨されています。
その際のオーバーヘッドは最小限になるよう設計されているとのことです。

対応言語

2020年7月1日現在、対応言語は Java のみです。

対応リポジトリ

GitHub と AWS CodeCommit リポジトリに対応しています。

料金

CodeGuru は使った分だけ支払う従量課金です。

Amazon CodeGuru の料金 – アマゾン ウェブ サービス

CodeGuru Reviewer

CodeGuru Reviewer でリポジトリを関連付けると、関連付けられたリポジトリでのすべてのプルリクエストに対してスキャンを実行します。
料金は 分析されるコード 100 行あたり $ 0.75 です。
ただし、 1 度スキャンされたコードについては、変更されたコード行のみを分析します。
例えば、以下のような開発チームを想定したときの料金を考えてみます。

  • 月に平均 100 件の新規プルリクエストが発生
  • 新規プルリクエストの平均は 1000 行 / 件
  • 月に平均 200 件の分析済みのコードに対する変更が発生
  • 変更箇所は平均 200 行 / 件

この場合、料金は以下のとおり $ 1,050 / 月 となります。

  • 分析されるコード→ 100 件 × 1000 行 + 200 件 × 200 行 → 100000 行 + 40000 行 → 140000 行
  • 140000 行 × 0.75 USD / 100 行 → 1,050 USD

CodeGuru Profiler

CodeGuru Profiler は以下の AWS リソース内で実行されるサンプリング時間をもとに課金を行います。

  • Amazon EC2 インスタンス
  • Amazon ECS
  • Amazon EKS
  • AWS Fargate

料金は、アプリケーションプロファイルごとに 最初の 36,000 サンプリング時間まで 1 サンプリング時間あたり 0.005USD。
アプリケーションプロファイルごとに 36,000 サンプリング時間を超える場合は、追加料金なくご利用いただけます。

サンプリング時間?

1 サンプリング時間は、 1 つのインスタンスで CodeGuru Profiler エージェントを 1 時間実行するのに相当します。
例えば、 1 つのアプリケーションが 2 つのインスタンスで 1 時間実行され、 CodeGuru Profiler のエージェントがこれら 2 つのインスタンスで実行されている場合は、 2 サンプリング時間で料金計算されます。

CodeGuru Reviewer を試してみる

今回は公式のチュートリアルに従い CodeGuru Reviewer を試してみます。
Tutorial: monitor source code in a GitHub repository – Amazon CodeGuru Reviewer
以下ステップにて進めていきます。

  1. Step 1: リポジトリのフォーク
  2. Step2: フォークされたリポジトリの関連付け
  3. Step3: コードの変更をプッシュ
  4. Step4: プルリクエストの作成
  5. Step5: 推奨事項のレビュー
  6. Step6: お片付け

Step1: リポジトリのフォーク

プルリクエストを作成するために、サンプルアプリケーションのリポジトリをフォークします。

自分の GitHub にフォークされます。

Step2: フォークしたリポジトリの関連付け

AWS マネジメントコンソールから CodeGuru を開き、 関連付けられたリポジトリ を選択します。

リポジトリの関連付け ボタンをクリックします。

ソースプロバイダーに GitHub を選択し、 Github に接続 ボタンをクリックします。

CodeGuru Reviewer に認可を与える画面が開くので Authorize aws-codesuite ボタンをクリックします。

Github に接続済み となるので、リポジトリの場所から amazon-codeguru-reviewer-sample-app を選び 関連付け ボタンをクリックします。

しばらくすると、ステータスが 関連付け済み となりました。
これで、 CodeGuru Reviewer によってプルリクエストの検知がされるようになります。

Step3: コードの変更をプッシュ

このあとのステップで、プルリクエストを作成するためにサンプルアプリケーションのコードを修正し、プッシュします。
まずは、フォークしたリポジトリをクローンしましょう。
USER_ID 部分はご自身の GitHub ユーザー ID に置き換えてください。

$ git clone https://github.com/USER_ID/amazon-codeguru-reviewer-sample-app.git
Cloning into 'amazon-codeguru-reviewer-sample-app'...
remote: Enumerating objects: 48, done.
remote: Counting objects: 100% (48/48), done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 48 (delta 8), reused 37 (delta 5), pack-reused 0
Unpacking objects: 100% (48/48), 333.17 KiB | 670.00 KiB/s, done.

続いて dev ブランチを作成し、チェックアウトします。

$ cd amazon-codeguru-reviewer-sample-app
$ git checkout -b dev
Switched to a new branch 'dev'

src/main/java/com/shipmentEvents/handlers/EventHandler.java ファイルを src/main/java/com/shipmentEvents/demo/ディレクトリにコピーします。

$ cp src/main/java/com/shipmentEvents/handlers/EventHandler.java src/main/java/com/shipmentEvents/demo/

このコピーしたファイルをコミットしてプッシュしましょう。

$ git add --all
$ git commit -m 'new demo file'
[dev 03ebbdc] new demo file
 1 file changed, 174 insertions(+)
 create mode 100644 src/main/java/com/shipmentEvents/demo/EventHandler.java
$ git push --set-upstream origin dev
…
 * [new branch]      dev -> dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

Step4: プルリクエストの作成

プッシュした変更に対するプルリクエストを作成します。
フォークしたリポジトリで New pull request ボタンをクリックします。

Dev ブランチから master ブランチへのプルリクエストを Create pull request ボタンをクリックして作成します。

そのまま Create pull request ボタンをクリック。

プルリクエストが作成されました。

Step5: 推奨事項のレビュー

AWS マネジメントコンソールで CodeGuru を開き左ペインから コードレビュー を選択します。
すると、コードレビューが 1 件 保留中 になっています。

しばらく経つとステータスが 完了 となるので、 GitHub で先ほど作成したプルリクエストを見てみましょう。

プルリクエストを見てみると、いくつかコメントが記載されています。
例えば、以下のコメントを見ると AWS Lambda のパフォーマンスを上げるための改善事項とベストプラクティスへのリンクが記載されていました。

また、各レビュー内容に対して 👍もしくは 👎のリアクションをすることで、 CodeGuru の改善に繋げるためのフィードバックをすることが可能です。
CodeGuru Reviewer はこのフィードバックを利用し、コード検出器の品質を繰り返し改善します。

Step6: お片付け

CodeGuru Reviewer の動作が確認できたので、お片付けしましょう。
まずは、フォークしたリポジトリの削除をします。
リポジトリで SettingsDelete this repository で削除ができます。

次は、クローンしたリポジトリの削除です。

$ rm -rf amazon-codeguru-reviewer-sample-app

最後に CodeGuru との関連付けを解除します。
AWS マネジメントコンソールの CodeGuru のページから関連付け済みのリポジトリを選択して アクションリポジトリの関連付けを解除する をクリックして解除してください。

これでお片付け完了です!

おわりに

プルリクエストを作るだけで、自動でコードレビューをしてくれるなんて夢のようなサービスですね。
実際の現場で使ってみて色々と試していきたいです!

また、この内容は 2020/7/8(水) 18:00 よりYouTube にて配信する「30分でわかる AWS UPDATE!」で取り上げますので、是非ご覧ください!
チャンネル登録よろしくおねがいします!!
サーバーワークス チャンネル – YouTube

参考


Amazon Connectで録音した通話音声を通常の3倍のスピードで

$
0
0

Amazon Connect専任担当の丸山です。
本日はうれしい発見があったので速報でお届けします。

倍速再生対応はじめました

Amazon Connectの通話録音音声はS3に保存されます。

S3から直接音声にアクセスすることもできますが、問い合わせ検索からも音声の再生が可能です。
今までは通常の速度で再生をする機能しかありませんでした。

本日確認をしたところ検索結果詳細画面では再生のインターフェースがアップデートされていました。

通常の速度の他、下記が選択可能です。

  • 0.5
  • 1x
  • 2x
  • 3x

こんな方へ

SVの方がオペレータの録音音声を再生するシーンがあると思います。
長めの録音を最初から全部聞くのは時間がかかります。

そんなときに倍速再生ができたら、というお声を頂いていました。
これで業務の作業時間を圧縮できますね。

 

まとめ

本日は倍速対応についておしらせをさせていただきました。
ある日突然機能が追加されているとうれしいものですね。

この機能はわたしではなく、サーバーワークスの代表電話をConnectで受信しているチームのメンバーがみつけてくれました。
専任担当といっても1日中Connectをずーっと使っているわけではありません。
日々の運用で利用してくれているメンバーに感謝!

サーバーワークス社内Connect導入関連もあわせてご紹介します。
よかったらみてくださいね。 https://bit.ly/swxconnect

MarkLogicをAWSにデプロイしてみた

$
0
0

はじめに

こんにちは。SRE2課の福島です。

先日、以前から持っていたAlexaに追加でSwitchBotハブミニを買い、
リビングの電気を声でオン、オフできるようにしました。便利ですね~。

今回は、MarkLogicをAWSにデプロイする方法をブログにまとめたいと思います。

そもそも、MarkLogicとは…

MarkLogicサーバーは、NoSQLと、信頼性の高いエンタープライズデータ管理機能の両方を備えたマルチモデルデータベースです。
また、データハブの基盤として最適なデータベースです。

引用:https://jp.marklogic.com/product/marklogic-database-overview/

マルチモデルデータベース?データハブ?

マルチモデルデータベースとは、
複数のデータモデルをネイティブに格納することができるデータベースです。
そして、統一されたデータガバナンス、管理、アクセスが備わっています。

参考:https://www.marklogic.com/blog/multi-model-database-jp/

データハブとは、

分断(サイロ)されたデータをハブ&スポークのアプローチで統合することです。

引用:https://www.marklogic.com/blog/multi-model-database-jp/

こんな感じで、ハブにデータを統合するイメージですね。

なんだか、SwitchBotハブミニに似てますね。

これって、必要?

世の中に変化はつきものですが、ずっと変わらないこともあります。業務、業界を問わず、データの「サイロ」(分断)は依然として存在していると言ってよいでしょう。そしてこれらのデータサイロにより、企業や官公庁などの世の中の変化に対する対応が遅くなっています。データサイロがこの問題の根本的原因である場合があります。

引用:https://www.marklogic.com/blog/data-lakes-data-hubs-federation-jp/

上記の通り、データの分断(サイロ)が根本的な原因で企業や官公庁などの
世の中の変化に対する対応が遅くなっている場合があるみたいです。

そこで、データを集約して、統一されたデータガバナンス、管理、アクセスできる
ソリューションが必要になり、そこで登場するのがMarkLogicというわけですね。
※スポークにあるデータの管理の仕方は、まちまちなので、
 統一して管理ができる点がハブ(MarkLogic)の良さなのかなと思います。

MarkLogicデプロイ用のCloudFormation

実は、AWSにMarkLogicをデプロイするためのCloudFormationが用意されているので、
テンプレートを実行するだけでMarkLogicのデプロイが出来ます。

テンプレートの種類

テンプレートには、2種類あります。

①VPC込みでMarkLogicを構築してくれるテンプレート
②既存のVPCを利用してMarkLogicを構築してくれるテンプレート

それぞれのテンプレートは、以下からダウンロードできます。
https://developer.marklogic.com/products/cloud/aws/

今回は、②のテンプレートかつバージョン10を利用します。

構成図

構成図は、以下の通りです。

引用:https://docs.marklogic.com/media/apidoc/10.0/guide/ec2/CloudFormation/images/AWSregion.gif

作成されるリソース一覧

①EC2 × 3台(台数は、テンプレートを展開する際に指定可能)
※プライマリENI、EBS(システムボリューム)込み。
②セカンダリENI × 3つ(EC2の台数に応じて作成)
③EBS(データボリューム) × 3つ(EC2の台数に応じて作成)
④AutoScalingグループ × 3つ(EC2の台数に応じて作成)
⑤起動設定 × 3つ(EC2の台数に応じて作成)
⑥SNS × 1つ(AutoScalingのライフサイクルフック用)
⑦Lambda × 2つ
⑧DynamoDB × 1つ

ここから本題

前置きが長くなりましたが、ここからAWSにMarkLogicをデプロイする方法についてです。

やることは以下の通りです。
①事前作業(VPC、サブネット、NatGateway、AMI利用の同意、IAMロール作成)
②テンプレートの展開
③動作確認

参考:https://docs.marklogic.com/10.0/guide/ec2/CloudFormation

事前作業

まず、CloudFormationを展開する前に以下のリソースを作成しておきます。

①VPCの作成
②パブリックサブネットの作成 × 3つ
③プライベートサブネットの作成 × 3つ
④NatGatewayの作成 × 1つ
⑤AMIの利用規約の同意
⑥EC2に付与するIAMロールの作成
※今回は、構成図に載っているVPCエンドポイントは作成しません。

また、AutoScaligのイベント通知が必要な場合、事前にSNSを用意する必要があります。
※今回は、設定を行いません。
 また、AutoScaligのライフサイクルフック用のSNSは、テンプレート内で作成されます。

ネットワークリソースの構築

VPC、パブリックサブネット、プライベートサブネット、
NatGatewayの作成手順は、割愛させていただきます。

AMIの利用規約の同意

事前に同意しておかなければ、AMIを利用することができず、
AutoScalingによるAMI起動が失敗してしまうので、事前に利用規約に同意しておく必要があります。

◆AMI起動失敗エラー

バージョン10の場合、以下にアクセスし、同意します。
https://aws.amazon.com/marketplace/pp?sku=djonw5gxpw8bpwnrtdbd0x2mj

EC2に付与するIAMロール作成

ドキュメントに記載がなかっため、推測になりますが、
とりあえず、以下の権限を付与すれば、MarkLogicのサービスを起動することができました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "dynamodb:*",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:AttachVolume",
                "ec2:DescribeInstances",
                "ec2:DescribeVolumes",
                "ec2:DescribeImages",
                "ec2:CreateTags"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "sns:*"
            ],
            "Resource": "*"
        }
    ]
}

CloudFormationの展開

テンプレートを使って、デプロイします。

パラメーターを入力したスタックを作成し、ステータスが「CREATE_COMPLETE」になればOKです。

実は…

大した話ではないですが、メインのテンプレートから2つのテンプレートをネストしています。
※もう1つのテンプレートでは、VPCスタックとVPCエンドポイントスタックが追加で作成されます。

マネージドENIスタック

セカンダリENIを作成するLambda関数を作成するスタック

ノードマネージャスタック

Auto Scaling Groupのライフサイクルイベントにフックされ、各クラスターノードを管理するLambda関数を作成するスタック

動作確認

EC2のステータスチェックが2/2になっていることを確認後、
3台のEC2が以下の画像の通り、データボリュームがアタッチできていることを確認します。

データボリュームがアタッチされていないインスタンスがあったら、
AutoScalingグループを修正する必要があります。

原因

これは、EC2のAZとアタッチしようとしているEBSのAZが異なっていることが原因です。
なぜ、差異が出る場合があるかというと、
CloudFormationで指定したプライベートサブネットがサブネットIDで昇順に並べ替えられるためです。
※テンプレートは、1a,1c,1dの順にサブネットが指定されることを前提に作成されています。

私の場合、1a,1c,1dの順にサブネットを指定したのですが、
1c,1a,1dにあるサブネット順に並べ替えられてしまいました…

解決方法

AutoScalingグループのサブネットの設定を以下の組み合わせになるように変更します。

AutoScalingグループ名 サブネット
【スタック名】-MarkLogicServerGroup1-【任意の文字列】 1aに存在するサブネットを指定
【スタック名】-MarkLogicServerGroup2-【任意の文字列】 1cに存在するサブネットを指定
【スタック名】-MarkLogicServerGroup3-【任意の文字列】 1dに存在するサブネットを指定

設定を変更するとEC2が新しいサブネットで起動され、設定前のサブネットで起動していたEC2が削除されます。

再度、動作確認

3台のEC2にデータボリュームが付与されていることを確認後、
CLBのヘルスチェックを確認し、ステータスが「InService」になっていることを確認します。

ログイン

CLBのステータスを確認できたら、以下のURLにアクセスすると
認証情報を求められるため、テンプレート展開時に指定したログイン情報を入力します。

http://【CLBのFQDN】:8001
※テンプレート展開後の「出力」項目の「URL」キーに記載されています。

ログインできれば、MarkLogicのコンソールにアクセスできます!

おわりに

CloudFormationのテンプレートが用意されているので、簡単に?デプロイできました!

ただ、以下の構成になっている点は、注意が必要そうです。
・セキュリティグループが「0.0.0.0/0」で開放されている。
・ELBとして、CLBが利用されている。
・ユーザーデータにMarkLogicのパスワードが平文で設定されている。

また、ポイントとしては、AutoScalingが発動しても、
データボリュームが削除されず、新しいEC2でデータボリュームが再利用される点ですね。
※データボリュームを独立させることでステートレスな構成にしてるみたいです。

ちなみに、DynamoDBは、以下の感じでEC2のメタデータを管理してます。

オフィスに行けないので AWS IoT の研修課題を自宅から mockmock でこなしました

$
0
0

なろう系小説みたいなタイトルでこんにちは。技術4課の保田(ほだ)です。

13インチのメインモニター1枚で頑張るのが辛くなってきたのでモニターを注文しました。届くのが楽しみです。

導入

弊社では2月の半ばから極力オフィスに行かず在宅勤務を推奨しているので私はもう4ヶ月ぐらいオフィスに行ってません。

ところで、去年ぐらいまで私が所属していた課で新人さんが取り組む OJT 課題として、「 Raspberry Pi に人感センサーを取り付けて会議室の人の有無をモニタリングする」というものがありました。

AWS IoT Core に対して Raspberry Pi からデータを送信し、それを CloudWatch のメトリクスとして可視化、さらに SNS で通知してみよう、というものです。その過程で AWS IoT はもちろんのこと Raspberry Pi のセットアップや、簡単な Python のお勉強、 Git のお勉強ができるというカリキュラムです。

非常に楽しい課題なのでやりたいのですが、まずオフィスに行けないので Raspberry Pi が設置できない、そして設置しても自分しかいないと会議室の人の有無が常に「無」になってしまう……。

あ!そうだ! mockmock を使ったらいいんだ!というワケです。

mockmock とは

mockmock とは 株式会社Fusic(フュージック)社が開発する IoT 開発におけるテストを支援してくれるツールです。

平たく言えば IoT の仮想デバイスを画面ポチポチで簡単に何台も作成できて、異常系テストや負荷テストも簡単にできてしまうサービスです。

今回のお話で言えば Raspberry Pi を mock で置き換えてしまいます。

どんな mock が欲しいのか

mock を作るにあたってどんなデータを送るかを考えます。後程詳しくご紹介しますが、これは mockmock においてはデータテンプレートに定義する JSON の形式を決めることに相当します。

ある時刻において人感センサーが人を検出しているか / 検出していないかを取得したいので、以下のようなデータ形式を考えれば良さそうです。

{
  "status": "1",
  "datetime":  "1593594616"
}

キー status として人がいる場合は "1"を、人がいない場合は "0" を取るようにします。

AWS IoT の設定

人感センサー(の mock )に対応させる AWS IoT の Thing と周辺リソース諸々を作成していきます。

IAM Role の作成

IoT Core が CloudWatch にデータを送信する権限を付与するような IAM Role を作成します。

マネジメントコンソールの [サービス] から IAM を開きます。

左ペインから [ロール] を選択し、[ロールの作成] ボタンをクリックします。

[ユースケースの選択] ではサービス名から [IoT] -> [IoT] を選択し、 [次のステップ: アクセス権限] をクリックします。次は何もせず [次のステップ: タグ] -> [次のステップ: 確認] までクリックし、最後にロール名を入力します。ここでは MotionDevRole とします。入力したら [ロールの作成] をクリックし作成を完了します。

Policy の作成

マネジメントコンソールの [サービス] から IoT Core を開きます。

左ペインから [安全性] -> [ポリシー] を選択します。画面右上に [作成] ボタンがあるのでクリックしてポリシーの作成画面を開きます。

ポリシー名は MotionDevPolicy とし、以下のように入力して [作成] をクリックします。

以下のポリシーが作成されます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": "arn:aws:iot:ap-northeast-1:012345678901:topic/motion"
    }
  ]
}

Thing の作成

IoT Core 上で認識されるデバイスの単位となる Thing (モノ)を作成します(開きっぱなしとは思いますが…)。

マネジメントコンソールの [サービス] から IoT Core を開きます。

左ペインから [管理] -> [モノ] を選択します。画面右上に [作成] ボタンがあるのでクリックしてモノの作成画面を開きます。[単一のモノを作成する] と [多数のモノの作成] を選択できますが、前者の [単一のモノを作成する] を選択します。

名前を MotionDev とします。その他の項目は何も触らず [次へ] をクリックします。

[モノに証明書を追加] の画面になりますので一番上の [1-Click 証明書作成(推奨)] を選択します。すると 1-Click で証明書が作成され、ダウンロードリンクが表示されたページへ遷移しますので、それぞれ以下をダウンロードします。(この状態のページでしかキーを取得できなくなるのでご注意ください)

  • このモノの証明書
  • パブリックキー
  • プライベートキー
  • AWS IoT のルート CA

ルート CA についてはリンクを開くと AWS のドキュメントに遷移します。 RSA 2048 ビットキーを選び中身をコピペしてローカルに rootCA.pem として保存しておきます。

[有効化] ボタンがありますのでクリックして有効化します。有効化されるとこのボタンが [無効化] ボタンに変化します。

[ポリシーをアタッチ] を選択します。作成済みのポリシーが選択できるようになっていますので、先ほど作成した MotionDevPolicy を選択してアタッチします。

[モノの登録] を選択すると、 Thing の作成が完了し一覧画面に遷移します。

AWS IoT Core のコンソール上の左ペインより [設定] を選択すると [カスタムエンドポイント] として以下の形式の文字列が表示されますので、これをメモしておきます。

xxxxxxxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com

これは後で mockmock の設定をする際に使用します。

Rule の作成

デバイス(の mock )から送信されたデータに対して IoT Core がどんな操作をするかを定めます。冒頭でも説明しましたように CloudWatch のメトリクスとして可視化したいので、そのように設定していきます。

マネジメントコンソールの [サービス] から IoT Core を開きます(やはり開きっぱなしとは思いますが…)。

左ペインから [ACT] -> [ルール] を選択します。画面右上に [作成] ボタンがあるのでクリックしてルールの作成画面を開きます。

名前を MotionDevRule とします。ルールクエリステートメントの SQL バージョンは 2016-03-23 を選択し、クエリ本文は以下のようにします。

SELECT * FROM 'motion'

この 'motion' はのちに mockmock 側で設定する Topic 名と一致している必要があります。

[アクションの追加] ボタンをクリックし、CloudWatch メトリクスにメッセージデータを送信する を選択します。すると必要な設定項目一覧が表示されますので、それぞれ次のように設定しいます。

項目名 設定値
メトリクス名 MotionDev
メトリクス名前空間 IoT
単位 Count
${status}
タイムスタンプ ${datetime}

この Rule を実行するための IAM Role を選択する必要がありますので、 [選択] をクリックし、先ほど作成した MotionDevRole を選択します。

実はこのとき選択した Role にアタッチされたポリシーに CloudWatch にメトリックを送信するための API アクションを許可する記述がなくても [ロールの更新] を選択すれば自動的にマネージドポリシーを自動生成してアタッチしてくれます。

今回はすでにこの API アクションは許可されていますので、そのまま [アクションの追加] をクリックします。するとルールの作成画面に戻りますので [ルールの作成] をクリックして作成を完了します。

これで AWS 側の準備は完了です。

mockmock の設定

ここからは mockmock 側での準備(mock の作成、送信の開始)となります。

プロジェクトの作成

コンソールにログインして [プロジェクト一覧] から [プロジェクト作成] を選択します。

プロジェクト名を MotionDev とし、サーバータイプとして [AWS] AWS IoT Core を選択します。すると入力項目がいろいろと変化するので後は以下の値を入力・選択します。

項目名 設定値
キャパシティ cn1
プロトコル MQTTS
送信先ホスト Thing の作成でメモしておいたカスタムエンドポイント名
証明書ファイル Thing の作成時に このモノの証明書 としてダウンロードしたファイル
秘密鍵ファイル Thing の作成時に プライベートキー としてダウンロードしたファイル
Root証明書ファイル Thing の作成時に AWS IoT のルート CA としてダウンロードしたファイル
SSL/TLS TLSv1.2

入力が完了したら [登録] をクリックします。

バリュージェネレーターの作成

今回は人感センサーによって取得した「人がいる( status が 1)」 or 「人がいない( status が 0)」の情報を送信したいので、0 と 1 をランダムに生成するような仕組みが必要です。

そもそも mockmock にはバリュージェネレータという機能があり、特定のルールに基づいて値を生成することができます。詳しくは公式のドキュメントをご参照いただければと思いますが、 GUI でグニグニいじったグラフに沿った値を(いい感じの揺らぎも考慮して)時系列で生成したり、緯度経度の位置情報を地図の UI からグラフィカルに定義できたり、いろいろ遊べます。

今回はその中の一つである バケットを使用すればそれが実現できそうです。

コンソールの左ペインから [バリュージェネレーター] -> [バケット] の右側にある [+] ボタンをクリックし新規作成画面を開きます。

バリュージェネレーター名を motion とし、送信ルールとして ランダム を選択します。データリストは以下のように入力します。

"0"
"1"

入力したら [登録] をクリックします。

データテンプレートの作成

冒頭で考えた、送信したい JSON データのテンプレートを定義します。

コンソールの左ペインから [データソース] -> [テンプレート] の右側にある [+] ボタンをクリックし新規作成画面を開きます。

テンプレート名を motion とし、[元になるjson] に以下を入力します。

{
  "status": "1",
  "datetime":  "1593594616"
}

[登録] をクリックすると、この JSON の詳細な形式を定義する画面に遷移しますので、それぞれ以下のように編集します。

status の値を先ほど作成したジェネレーター motion から生成する、datetime は %s (UNIX 時間)をあてはめる、という設定をしている点にご注目下さい。

mock の作成

ようやく mock を作ります。まずはそれぞれのデバイス(の mock )を束ねる mockグループを作成します。

コンソールの左ペインから [mockグループ] の右側にある [+] ボタンをクリックし新規作成画面を開きます。

mockグループ名をmotion 、最大稼働時間 [sec] を 300 とします。(最大稼働時間を過ぎると mock は自動停止します。)後はデフォルトのままで [登録] をクリックします。

作成すると [mockステータス] のタブを開き mock ステータスを作成します(正常系も異常系も作れる!)。[mockステータス作成] をクリックし、それぞれ以下のように値を設定します。

ここで Topic を motion としたことで、 IoT Core の側に作成した Rule はこの mock が送信するデータを取得して操作(CloudWatch メトリクスに送信)できるようになります。最大送信間隔と最小送信間隔をどちらも 10 [sec] にしたので、きっかり10秒おきにデータを送信するようになっています。

入力したら [登録] をクリックします。試しにテスト送信してみたいので、 [テスト送信] 欄の [mock新規作成] をクリックし mock 作成画面を開きます。(これは [mock管理] のタブから mock を作成してそのあと [テスト送信] もできます。どちらでも大丈夫です。)

MQTTクライアントID の入力を求められますが空っぽのまま [登録] をクリックします(書いてない項目は勝手に作ってくれます)。ID が割り当てられて作成されているのが確認できます。これが mock を1台作成した状態です。

作成されたら [mock管理] のタブに移動しているので、再び [mockステータス] のタブへ移動します。すると先ほど作成した mock を使ってテスト送信ができるようになっていますので [送信] をクリックします。

[成否] が true だったら OK です。 [閉じる] で閉じましょう。

mock の実行

ついに作成した mock を使って疑似的に人感センサーを会議室に設置した状況を作り出してみます。

[mock管理] のタブ内に表示された mock を [操作] -> [起動] をクリックします。

起動して良いかの確認ウィンドウが出るので OK しますと、 mock が起動し始めます。

それでは AWS のマネジメントコンソールを様子を見に行きましょう。

[サービス] から CloudWatch を選択して開き、 [メトリクス] を選択します。[すべてのメトリクス] のタブ内に [IoT] という項目が表示されているはずなのでそれを選択します。 [ディメンジョンなしのメトリクス] -> [MotionDev] にチェックを入れます。[グラフ化したメトリクス] のタブに先ほど選択した MotionDev というメトリクスが表示されるようになるので、 [統計] や [期間] の項目はいろいろ選べますが、まずはそれぞれ「最大」と「1分」を選んでみます。

画面上部のグラフを見てみます。

1分以内に観測できた一番大きい数字をプロットさせています。稼働させ始めてからどこかのタイミングで(仮想の)人を観測したようでね。例えばこの [統計] を「平均」にすると人がいることの方が多いのか、少ないのかが判断できそうです。 

ちなみに送信しているデータは mockmock のコンソール側からも確認できます。二つ前の添付画像において [モニタリング] というボタンがありますのでそれをクリックするとこのような画面が表示されます。

そもそも mock がちゃんと動いているか、どれぐらい送信しているか、どんなデータを送信したかが確認できます。

これで Raspberry Pi も人感センサーも使わずさらにはオフィスにすら行かずに「人感センサーでオフィスの人がいるかいないかを観測する」ということが再現できました。

オフィスに人が戻り始めたら実際のものを用意してやって証明書や秘密鍵をそちらにも移してやれば OK です。

研修課題は CloudWatch と SNS を連携させるところまでやりますが、これについては mock が直接関係しないので省略します…。

さらなる話題

これで最低限のことは実現できましたが、 mockmock ではもっといろんな状況を作り出せます。まず簡単に台数が増やせるのでその分 Raspberry Pi と人感センサーを買うお金が減らせてとても便利です。

またデータが取得できない状況(異常系)を作って一定確率で異常系に遷移してしまうようなケースも実機でやるには厳しいことが多いです。これは状態遷移の機能で実現できます。夢が広がりますね!

まとめ

ここまで丁寧に説明してきたので長い道のりに思えますが(書いてる私は特に)、AWS IoT 側の設定はともかく mockmock 側は、次のような定番の流れがあることがやっているうちに分かってきます。

  • プロジェクトを作りーの
  • ジェネレータ作りーの
  • それを元にテンプレート作りーの
  • それを送信するようなステータス作りーの
  • そのステータスに体操する mock 本体を作りーの
  • あとは送信

既存の設定をコピーするという機能も充実していますので、そのあたりもなかなかうれしいです。

あと、そもそも公式ドキュメントがとても丁寧なので読んでみて下さい。

Snowflake のセキュリティについて調べてみた

$
0
0

某YouTuberがオススメしていた「あずきのチカラ 目もと用」を最近愛用しているCI部の宮本です。夜眠りにつくときに使用しているのですが、最初は「あったか〜い。。。」と気持ち良さを感じ、温度が徐々に下がると同時に眠りにつくことが出来ます。
また、こんな副次的な効果があります。目の上にあずきが乗っていてスマホが見られない為、寝床で覚醒してしまって寝られなくなる、といったことが全くなくなりました。
いやあ一石二鳥ですね〜。目の疲れと闘うITエンジニアの皆さんにオススメです。

さて、今回は Snowflake のセキュリティについてのお話です。

はじめに

これまで、Snowflake に関するブログを幾つか書いてきたのですが、いづれも Snowflakeのエンドポイントへのアクセスはユーザーとパスワードのみでの認証でした。

現実にエンタープライズ利用する際、ユーザー・パスワード認証だけでは心許ないですよね。どの様に Snowflakeのエンドポイント、蓄積されている大切なデータを保護すれば良いのでしょうか。

Snowflake のセキュリティ

Snowflake のセキュリティ機能の概要は こちら で確認できます。幾つかかいつまんでご紹介します。

ネットワーク/サイトへのアクセス

ネットワーク的に Snowflake へのアクセスを制御する方法です。

IP ホワイトリストとブラックリストによるサイトアクセス制限

ネットワークポリシー を利用を作成することで、エンドポイントへのアクセス元IPアドレスを制限することができます。ホワイトリスト、ブラックリストどちらの方法でも指定できます。

アクセス元IPアドレスは CIDR 形式で指定できます。

AWS PrivateLink を介した、Snowflakeと他の VPCs 間におけるプライベート通信

Snowflake はアカウント作成時に Cloud provider(AWS or GCP or Azure) とそのリージョンを選択します。Snowflake は指定されたCloud providerのリージョンに、そのアカウント用の 仮想ウェアハウスと呼ばれるコンピューティングエンジンと、データストレージ等を用意します。また、AWS PrivateLink に対応しており、ユーザーが同一リージョンに構築するVPCと接続することによりインターネットを経由せずに Snowflakeのエンドポイントにアクセス出来ます。

エンタープライズ利用でAWSにシステムを構築する場合はこの方法がよりセキュアかつ、レイテンシーも小さい為ベストな選択ではないでしょうか。但し、この機能は Buisiness Critical(またはそれ以上) のプランでのみ使用できます。

参考)AWS PrivateLink と Snowflake

同様の仕組みで Azure Private Link にも対応している様です。

アカウント/ユーザー認証

ユーザー認証はデフォルトでユーザー・パスワードでの認証ですが、以下の方法で強化することができます。

MFA (Multi Factor Authentication)

認証時にユーザー・パスワードに加えて以下のどちらかで追加の認証を行うことが出来ます。

Duo Security って初めて知りました。。Google Authenticator や Authy などの二段階認証時に使用するトークンソフトウェアの一種の様です。

参考)多要素認証 (MFA)

SSO (Single Sign On)

OneLogin や Okta などの シングルサインオンサービスと連携して認証をすることも出来ます。

参考)フェデレーション認証と SSO

OAuth

OAuth にも対応しています。

参考)OAuth

まとめ

その他にも データの暗号化やオブジェクトセキュリティなど、充実したセキュリティ機能があります。詳しくはこちらを参照してみて下さい。

次回は実際にアクセス制限を試してみたいと思います。

Amazon Linux 2 用カーネルライブパッチの一般提供が開始しました!

$
0
0

こんにちは、技術1課の小倉です。
2020/6/29にアップデートがあり、Amazon Linux 2 用カーネルライブパッチの一般提供が開始しました!

Amazon Linux 2 用カーネルライブパッチの一般提供が開始

EC2でサーバを起動させている場合、今まではパッチ適用などのあとは再起動をしなければ反映せずサービス停止が必要でしたが、本アップデートによりAmazon Linux 2で、カーネルライブパッチを利用できるようになりました。カーネルライブパッチは実行中のカーネルにパッチを適用し、再起動せずに反映させることができます。重大なセキュリティの脆弱性やバグなどのパッチがリリースされたときでもサービス停止の調整などせずに即時適用させることができます。

また、カーネルライブパッチはAmazon Linux 2を利用していれば無料で使うことができます。

カーネルライブパッチを利用する際の注意点です。

  • Amazon Linux 2でサポートされている64ビット(x86_64)アーキテクチャ
    • 64ビットARM(arm64)アーキテクチャはサポートされていません
  • カーネルバージョン4.14.165-131.185以降の Amazon Linux 2
  • Amazon Linux 2カーネルバージョンのカーネルライブパッチを、リリース後最大3か月間提供
    • 引き続きカーネルライブパッチを使う場合は、再起動をして新しいカーネルバージョンに更新する必要あり
    • 再起動のオペレーションがなくなるわけではなく、一時的なセキュリティ対策
  • カーネルライブパッチを適用している間、休止状態を実行したり、高度なデバッグツール(SystemTap、kprobes、eBPFベースのツールなど)を使用したり、カーネルライブパッチインフラストラクチャで使用されるftrace出力ファイルにアクセスしたりすることはできない

設定方法

AWS公式ドキュメントに手順が記載してあります。こちらの手順を参考に確認しています。
Kernel Live Patching on Amazon Linux 2

今回は7/6現在の最新のAmazon Linux 2を利用して確認をしています(AMI ID : ami-0a1c2ec61571737db)。

カーネルライブパッチの有効化

カーネルのバージョンを確認して、利用可能なバージョン(4.14.165-131.185以降)かを確認します。
もし利用可能なバージョンではない場合は、sudo yum install -y kernel sudo reboot を実行して、最新バージョンに更新します。

$ sudo yum list kernel
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Packages
kernel.x86_64                 4.14.177-139.254.amzn2                  installed 
Available Packages
kernel.x86_64                 4.14.181-142.260.amzn2                  amzn2-core

カーネルライブパッチ用のyum プラグインをインストールします。

$ sudo yum install -y yum-plugin-kernel-livepatch
 (省略)
Installed:
  yum-plugin-kernel-livepatch.noarch 0:1.0-0.8.amzn2                            

Complete!

カーネルライブパッチ用のyum プラグインを有効にします。

$ sudo yum kernel-livepatch enable -y
 (省略)
Installed:
  kernel-livepatch-4.14.177-139.254.x86_64 0:1.0-0.amzn2                        

Complete!

カーネルライブパッチ用のyum プラグインが正常にインストールされたことを確認するために、次のコマンドを実行します。

$ rpm -qa | grep kernel-livepatch
kernel-livepatch-4.14.177-139.254-1.0-0.amzn2.x86_64
yum-plugin-kernel-livepatch-1.0-0.8.amzn2.noarch

kpatchサービスを更新して開始します。

$ sudo yum update kpatch-runtime
Loaded plugins: extras_suggestions, kernel-livepatch, langpacks, priorities,
              : update-motd
No packages marked for update

$ sudo systemctl enable kpatch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kpatch.service to /usr/lib/systemd/system/kpatch.service.

カーネルライブパッチが含まれているAmazon Linux 2 カーネルライブパッチリポジトリを設定します。

$ sudo amazon-linux-extras enable livepatch
 (省略)
 43  livepatch=latest         enabled      [ =stable ]
 (省略)

利用可能なカーネルライブパッチの表示

すべての利用可能なカーネルライブパッチを一覧表示するには、次のコマンドを実行します。カーネルのライブパッチには ALAS2LIVEPATCH というプレフィックスがつきます。

$ yum updateinfo list
 (省略)
ALAS2LIVEPATCH-2020-017 important/Sec. kernel-livepatch-4.14.177-139.254-1.0-2.amzn2.x86_64
ALAS2LIVEPATCH-2020-024 important/Sec. kernel-livepatch-4.14.177-139.254-1.0-3.amzn2.x86_64
 (省略)

CVEのすべての利用可能なカーネルライブパッチを一覧表示するには、次のコマンドを実行します。

$ yum updateinfo list cves
 (省略)
 CVE-2019-19319 important/Sec. kernel-livepatch-4.14.177-139.254-1.0-2.amzn2.x86_64
 CVE-2020-1749  important/Sec. kernel-livepatch-4.14.177-139.254-1.0-3.amzn2.x86_64
 (省略)

カーネルライブパッチの適用

カーネルライブパッチは、定期的な更新と同じ方法で、yumを使用して適用します。今回は先の手順で出力された2つを適用します。

$ sudo yum install -y kernel-livepatch-4.14.177-139.254-1.0-2.amzn2.x86_64
$ sudo yum install -y kernel-livepatch-4.14.177-139.254-1.0-3.amzn2.x86_64

適用されたカーネルライブパッチを表示

適用されたカーネルライブパッチを表示するには、次のコマンドを実行します。

$ kpatch list
Loaded patch modules:
livepatch_CVE_2019_19319 [enabled]
livepatch_CVE_2020_1749 [enabled]

Installed patch modules:
livepatch_CVE_2019_19319 (4.14.177-139.254.amzn2.x86_64)
livepatch_CVE_2020_1749 (4.14.177-139.254.amzn2.x86_64)

Loaded patch modules に表示されているパッチが適用されているパッチです。
ここまでがカーネルライブパッチの適用手順でした。

カーネルのバージョンアップ手順

各カーネルバージョンでカーネルライブパッチのリリースは3か月間しか行われませんので、定期的にカーネルをバージョンアップする必要があります。
次のコマンドで現在のカーネルバージョンのカーネルライブパッチがいつまでサポートされているかを確認できます。

$ uname -r
4.14.177-139.254.amzn2.x86_64

$ yum kernel-livepatch supported
Loaded plugins: extras_suggestions, kernel-livepatch, langpacks, priorities,
              : update-motd
The current version of the Linux kernel you are running will no longer receive live patches after 2020-08-07.
kernel-livepatch supported done

この場合、カーネルバージョン 4.14.177-139.254 は、2020/8/7までサポートするとなっていますので、カーネルライブパッチを使い続けるのであれば、2020/8/7までにカーネルのバージョンアップが必要です。

カーネルのバージョンアップは、 sudo yum update や sudo yum update --security を実行して、 sudo reboot で再起動するだけです。
今回は、sudo yum update --security にて実施しました。

$ sudo yum update --security
 (省略)
$ sudo reboot

再起動後にログインして次のコマンドを実行します。

$ uname -r
4.14.181-142.260.amzn2.x86_64

$ yum kernel-livepatch supported
Loaded plugins: extras_suggestions, kernel-livepatch, langpacks, priorities,
              : update-motd
The current version of the Linux kernel you are running will no longer receive live patches after 2020-09-24.
kernel-livepatch supported done

カーネルのバージョンアップが行われ、カーネルライブパッチのサポート期限が、 2020/9/24 までに更新されています。

まとめ

Amazon Linux 2 用カーネルライブパッチの一般提供が開始しました。サーバを停止せずにパッチ適用ができるようになっていますので、脆弱性の対応などが今までよりも早くできるようになりました。ぜひ使ってみてはいかがでしょうか。
ただ、カーネルライブパッチは一時的な対応となり定期的な再起動は必要ですので、この点はご注意ください。

また、本ブログの内容は2020/7/8(水) 18:00にYouTubeで配信される「30分でわかる AWS UPDATE!」でも取り上げる予定ですので、ぜひご覧ください!

【はじめてのAWS】AWS Security Hub を設定しよう

$
0
0

 

今回は、弊社のYouTubeチャンネル「サーバーワークス チャンネル」にて先日公開した以下動画についてblogでも内容を紹介いたします。

動画内では、実際にAWSマネジメントコンソールを操作しながら設定を行っていくデモがありますのでもし興味があれば是非、動画も参照頂ければと思います。

内容が良かった、為になったと感じたら是非Goodボタンやチャンネル登録頂けると嬉しいです。

対象者

・AWSをこれからはじめたい方
・AWSをもっと活用したい方
・AWS Security Hub の概要や設定イメージを把握したい方

AWS Security Hubとは

AWS Security Hub は、AWSのセキュリティ関連のサービスのアラートや検知した情報を集約、整理、優先順位付けて一元管理できるサービスになります。
執筆の2020年7月3日現在、以下サービスが一元管理の対象としてサポートされています。

  • Amazon GuardDuty (例: 侵入等の脅威検出の結果)
  • Amazon Inspector (例: 脆弱性スキャンの結果)
  • Amazon Macie (例: S3バケットポリシーの発見事項)
  • AWS IAM Access Analyzer (例: 外部公開しているリソースの情報)
  • AWS Firewall Manager  (例: WAFカバレッジのないリソースの情報)

また、以下のセキュリティ基準をユーザ側で選択(後に変更可能) することにより、当該AWS環境が指定の基準を満たした設定になっているかチェックしてくれます。

AWSアカウント管理者視点だと、上の例に記載したような各種アラートや通知内容やセキュリティ基準を満たしているかの情報が自動的に一箇所に集約されモニタリング可能となるので運用コストを削減することができます。

参考: AWS Security Hub
https://aws.amazon.com/jp/security-hub/

AWS Security Hub の料金

セキュリティチェックの数と検出結果取り込みイベントの数に基づいた従量課金となります。

  • セキュリティチェック件数
  • 検出結果の取り込みイベント数 (月あたり1万回を超える場合から)

また、無料利用枠があり、利用開始後30日間は無料となっています。
無料で利用している期間中も利用料の推定を確認することが出来るので、試用と同時に費用感を把握されるのが良いと思われます。
また以下の公式サイトに「料金の例 (月あたり) 」として環境規模毎の費用感を把握出来る情報が掲載されていますので必要に応じて確認してください。

参考: AWS Security Hubの料金
https://aws.amazon.com/jp/security-hub/pricing/

AWS Security Hub の注意事項

注意点として以下3点を紹介します。

  1. セキュリティチェックを行う為には、AWS Configがの有効化が必要となります
    ソースデータとして利用されるため、AWS Configのデータが必須となります。AWS Configについては、以下blogでも紹介しておりますので必要に応じて参照ください。

    【はじめてのAWS】AWS Config を設定してみよう
    http://blog.serverworks.co.jp/tech/2020/06/17/post-86860/

    またサービス名にある通りHubとなるサービスなので、周囲のサポートされているAWSサービスについても必要に応じて有効化を検討してください。

  2. 検知できた問題点は管理者側で対処を検討する必要があります
    AWS Security Hubを利用することで、セキュリティ関連のサポートされているAWSサービスのアラートやセキュリティチェックの結果を一元管理が可能となりますが、通知された各種情報や問題についての対応判断や実際の処置は当該AWSアカウント管理者側の責任で行う必要があります。
  3. リージョン毎に有効化が必要となります
    AWS Security Hub は、対象AWSアカウントで有効にした リージョンからの結果のみを受け取り処理します。必要に応じて各リージョンで対応が必要となります。

AWS Security Hub のセットアップ実施のデモ(動画内 02:13〜)

実際にAWSマネジメントコンソールからAWS Security Hubの有効化設定を行い、概要(サマリー)と利用料金を確認するデモを動画内で紹介しています。
管理者視点で、ざっくりとAWS Security Hubの 設定イメージを掴んで頂ける内容となっておりますので、もし興味があれば動画を参照ください。

まとめ

AWS Security Hub は、AWSアカウントのセキュリティ状態を包括的に把握し、ベストプラクティスに沿っているかのチェックに役立ちます。
活用することで、AWSアカウントとワークロードのセキュリティを容易に管理、改善できるようになり運用コスト軽減が期待出来ます。

管理者としてAWSアカウントを作成した際には、設定項目として実施を検討してみてください。

関連blog

Security Hubのワークフローステータスで検出結果を運用しよう

Security HubのイベントをAWS ChatbotでSlackへ通知

 

【はじめてのAWS】管理用IAMユーザーを作成しよう

$
0
0

 

今回は、弊社のYouTubeチャンネル「サーバーワークス チャンネル」にて先日公開した以下動画についてblogでも内容を紹介いたします。

動画内では、実際にAWSマネジメントコンソールを操作しながら設定を行っていくデモがありますのでもし興味があれば是非、動画も参照頂ければと思います。

内容が良かった、為になったと感じたら是非Goodボタンやチャンネル登録頂けると嬉しいです。

対象者

・AWSをこれからはじめたい方
・AWSをもっと活用したい方
・AWS IAMユーザーおよびグループ作成の設定イメージを把握したい方

IAM ユーザーの利用に関するベストプラクティスのおさらい

IAMユーザーの利用に関しては以下がベストプラクティスとなります。当動画ではそれに従い実際にマネジメントコンソールから、ルートユーザーとは別のIAMユーザーの作成を行っていきます。

  • ルートユーザーは普段使いしない
  • AWSを利用する人ごとにIAMユーザーを作成し、IAMユーザーを使ってアクセスする

参考: IAMでのセキュリティのベストプラクティス – 個々の IAMユーザーの作成
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html#create-iam-users

IAM グループのおさらい

IAMグループとは、IAMユーザーの集合となります。
(ごく一般的なOSのユーザーを束ねるグループに近い概念となります)

IAMグループの作成およびセキュリティ権限の設定を行うだけで、そのグループに所属する複数のIAMユーザーに適用されるため権限管理を簡略化できます。

例えばIAMグループ全体の変更を一度にできますし、人事異動があった際もIAMユーザーの所属するIAMグループを変更するだけで対応が完了します。自組織や運用を考慮のうえ、IAMグループを活用した権限管理について検討してみてください。

参考: IAMグループ
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_groups.html

MFAの設定について

AWSアカウントのルートユーザーと各IAMユーザーに対してMFAを有効にすることが可能で、セキュリティを向上させるためにも設定が推奨されています。

当動画では、仮想MFAの設定例として別途スマートフォンにインストールした「Google Authenticator」というアプリケーション(ソフトウェアトークン)を利用し設定を行っていきます。
(こちらは、各自お好みのアプリケーションをご選択頂ければ問題ありません)

参考: AWSでの多要素認証(MFA)の使用
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_mfa.html

参考: 仮想 Multi-Factor Authentication (MFA) デバイスの有効化 (コンソール)
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html

管理用 IAMグループおよびIAMユーザーの作成デモ(動画内 02:30〜)

概要の説明に加え、実際にAWSマネジメントコンソールから Identity and Access Management(IAM) の画面にて 以下手順に従った実際の操作デモを動画内で紹介しています。

  1. 管理用 IAMグループを作成
  2. 作成したIAMグループに所属するIAMユーザーを作成
  3. 作成したユーザーでのサインインを確認
    1. IAMユーザーのパスワード再設定
    2. MFAの設定

管理者視点で、ざっくりとIAMグループやIAMユーザー作成に関する設定イメージを掴んで頂ける内容となっておりますで、もし興味があれば動画を参照ください。

まとめ

管理者としてAWSアカウントを作成した際には、ルートユーザーは普段使いせずに管理用のIAMユーザーは別途作成しましょう。その際には運用を考慮し、IAMグループに所属させる形での権限管理を検討してみてください。また動画内でも紹介しておりますが、セキュリティ保護の為に各IAMユーザーにはMFAを設定しましょう。

関連blog

【Authy】IAM UserのMFA有効化、機種変更時の対応手順【2段階認証】

AWSアカウントとは?IAMとは?【ビギナー向け】

 
 
 

[Amazon Connect]発信を自動化してみよう

$
0
0

はじめに

こんにちは。孔子の80代目子孫兼技術5課の孔です。雨の日が続いていて、なかなか洗濯ができないですね。部屋干しだとカビが生えたりして、結局乾燥機を求めて近所のコインランドリーまで足を運ぶここ最近です。和室はつらいぜ…アイスブレイクでいつも暗いことしか呟かないので、次はもっと明るい話ができたらなと思います。

今回はAmazon Connectに関するブログです。Amazon Connect = コールセンター  = かけてきた電話対応で、受信のイメージを持っている方がいらっしゃるのではないかと思います(オペレーターさんたちがたくさんいらっしゃって、かかってくる電話に対応する!的な)しかし、実はコールセンター の業務って受信だけでなく、発信もあったりしますね。例えばお客様に新しいキャンペーンやプラン見直しを紹介するなどで顧客リストから電話をかけたりすることがあります。Amazon Connectは発信においても使い道があり、このようなニーズに対応することもできます。今回はその一例として、発信自動化を持ってきました。

今回のケースは「Aというイベントがあったらこの人に電話する」などの使い方です。電話の強みはやっぱり一瞬で気づくことができることから、「なんかあったら電話する」は結構いろいろな場面で愛用される解決策ですね。今回はそのようなフローを自動化する方法を持ってきましたので、一緒にみていきましょう。

※ AWSのリソース構築に関する基礎知識があることを前提で話していきます。リソースの構築詳細はこれから同情するサービスのドキュメントなどを参考に構築してください。

構成図&やること

以下のような構成で今回は実装を行います。

何かイベントがあったらAPIGWにwebhookを投げます。するとlambdaが発火し、lambdaはAmazon Connectを使って指定された人に電話をかける仕組みです。今回話す内容はlambdaのコードと、Amazon Connectのフローについてです。

APIGWを他のに大体したり、lambdaと言ったら様々なAWSサービスとの親和性がいいのでうまく構成を作ってもっと使える構成にすることも可能だと思いますので、このブログを読み終わったら何ができるのかな、と考えてみるのもまた楽しいかもしれないですね。

実装

まず、こちらを進めておいてください。

  1. RestAPI(メソッドはPUT)のAPIGWを作成し、lambda(python3.8)に紐付けます。(こちらのリンク参照
  2. Amazon Connectインスタンスを構築する(こちらのリンク参照

準備ができましたら、Amazon Connectの画面に移動し、発信用の問い合わせフローを作成します。フローは以下のようになります(お好みのよって変更可能)

フローを公開して、インスタンスIDと問い合わせフローIDを取得します。両方上の画面で確認(赤い枠)できます。instance/以下がインスタンスID、contanct-flow/以下が問い合わせフローIDとなります。また、キューのIDが必要となりますが、こちらはキューの画面に移動し、特定のキューをクリックするとhttps://XXXX.awsapps.com/connect/queues/{省略}/queue/2917c8cf-XXXX-XXXX-XXXX-0b5bc372348cのようなURLになります。queue/の以下の部分がキューのIDになります。

lambdaの画面に移動し、Amazon Connectから発信ができるIAMロールを付与してください。付与が終わりましたら以下のコードを貼り付けます(boto3などSDKの説明も今回は割愛します。)

import json

import boto3

client = boto3.client('connect')

def lambda_handler(event, context):
    response = client.start_outbound_voice_contact(
        DestinationPhoneNumber='+81{先頭の0を抜いたご自身の電話番号}',
        ContactFlowId='23145a29-XXXX-XXXX-XXXX-ea97cce9593a',  # 先ほど控えた問い合わせフローID
        InstanceId='90a5f398-XXXX-XXXX-XXXX-234e94b136d9',  # 先ほど控えたインスタンスID
        QueueId='2917c8cf-XXXX-XXXX-XXXX-0b5bc372348c',  # デフォルトで実装されたqueueのID
    )

    return {
        'statusCode': 200,
        'body': json.dumps('It works!')
    }

使用するAPIはstart_outbound_voice_contactとなります。こちらは電話の発信を行うAPIとなります。指定した電話番号先に、指定したインスタンスの、指定した問い合わせフローで、指定したキューから電話の発信を行います。

終わりましたらAPIテストをしてみましょう。APIGWの画面に移動し、testからテストを行ってください(bodyは特に何も埋めなくても大丈夫です)

電話がかかってきて、Mizukiさんの声で「問題発生中」と言われたら成功です。

最後に

コールセンター といいますと、やっぱりこちらから電話をかけるような仕事も発生しますね。コールセンター の知識がまだまだ足りない私は、「コールセンター =電話をめっちゃとるもの」だという認識でしたが、こちらからお客様に電話をかけるような仕事もあるんだーと最近気付きました。

その電話ですが、もしもう決まったことを伝えるだけのことであればオペレーターさんたちが直接電話をかけなくても、自動化してMizukiさんに電話を代わりにしてもらうことも可能です。今回はとてもシンプルな構成で対応方法もwebhookに限定していますが、構成を変えたり、lambdaでもっといろいろな情報をAmazon Connectに渡したりするともっと動的なメッセージの編集といろいろな事態に対しての対応も可能になります。もちろんlambdaのパラメータ値も動的に変えるともっと幅広い対応ができるようになります。ぜひもっといろいろな自動化にチャレンジしてみましょう!それでは、雨にも負けず、風にも負けず、お元気で!

Well-ArchitectedフレームワークとAWS Well-Architected Toolがアップデートされました!

$
0
0

こんにちは、技術1課の小倉です。
2020/7/9にWell-ArchitectedフレームワークとAWS Well-Architected Toolがアップデートされました!

Updates to the AWS Well-Architected Framework and the AWS Well-Architected Tool
AWS Well-Architected Framework – Updated White Papers, Tools, and Best Practices

最新のWell-Architectedフレームワークのホワイトペーパーは以下から確認することができます。

Well-Architected フレームワーク(日本語)

今回の大きなアップデートは以下です。

  • ベストプラクティスの追加
    • 運用上の優秀性 : 組織
    • セキュリティ : セキュリティ
    • 信頼性 : ワークロードアーキテクチャ
    • コスト最適化 : クラウド財務管理を実践する
  • 質問の新規追加/更新

運用上の優秀性のベストプラクティスに「組織」が追加されていて、この内容にAWS OrganizationsやAWS Control Towerの記載がありました。どちらも複数のAWSアカウントの管理を楽にするサービスですが、セキュリティとコスト最適化に追加された内容も複数のAWSアカウントに関する内容のように見えました。

また、信頼性に「ワークロードアーキテクチャ」が追加されていました。分散システム(マイクロサービスアーキテクチャ)の設計について書かれていて、より障害を起こしにくい設計が必要なように見えました。

Well-Architectedフレームワークとは

Well-Architectedフレームワークとは、AWSの長年の経験に基づくベストプラクティス集です。このフレームワークは以下の5つの柱で構成されています。

  • 運用上の優秀性
  • セキュリティ
  • 信頼性
  • パフォーマンス効率
  • コスト最適化

このフレームワークに沿うことによって、安全、高パフォーマンス、障害耐性を備えた構成に近づけることができます。

AWS Well-Architected Toolは、安全で高いパフォーマンス、障害耐性を備えた、効率的なインフラストラクチャの構築をサポートするツールです。マネジメントコンソールより、Well-Architected フレームワークの5つの柱に関する質問に回答することで、実績のある設計方法が提示されます。

AWS Well-Architected
AWS Well-Architected Tool

まとめ

Well-ArchitectedフレームワークとAWS Well-Architectedツールがアップデートされました。このフレームワークに沿うことによって、安全、高パフォーマンス、耐障害性を備えた構成に近づけることができますので、ぜひご活用ください。

また、本ブログの内容は2020/7/15(水) 18:00にYouTubeで配信される「30分でわかる AWS UPDATE!」でも取り上げる予定ですので、ぜひご覧ください!

補足 : 5つの柱の更新箇所

Well-Architectedフレームワークの5つの柱の更新箇所を表にまとめます。

運用上の優秀性
  2019年7月版 2020年7月版
説明 ビジネス価値を提供し、サポートのプロセスと手順を継続的に向上させるためにシステムを稼働およびモニタリングする能力 開発をサポートし、ワークロードを効率的に実行し、運用に関する洞察を得て、ビジネス価値をもたらすためのサポートプロセスと手順を継続的に改善する能力。
設計原則 ・運用をコードとして実行する
・ドキュメントに注釈を付ける
・定期的に、小規模な、元に戻すことができる変更を適用する
・運用手順を定期的に改善する
・障害を予想する
・運用上のすべての障害から学ぶ
・運用をコードとして実行する
・小規模かつ可逆的な変更を頻繁に行う
・運用手順を定期的に改善する
・障害を予想する
・運用上のすべての障害から学ぶ
ベストプラクティス ・準備
・運用
・進化
・組織
・準備
・運用
・進化
セキュリティ
  2019年7月版 2020年7月版
説明 リスク評価とリスク軽減の戦略を通してビジネスに価値をもたらす、情報、システム、アセットのセキュリティ保護機能 このセキュリティの柱では、データ、システム、資産を保護して、クラウドテクノロジーを活用し、セキュリティを向上させる機能について説明します。
設計原則 ・強力なアイデンティティ基盤の実装
・トレーサビリティの実現
・全レイヤーへのセキュリティの適用
・セキュリティのベストプラクティスの自動化
・伝送中および保管中のデータの保護
・データに人の手を入れない
・セキュリティイベントへの備え
(変更なし)
ベストプラクティス ・アイデンティティ管理とアクセス管理
・発見的統制
・インフラストラクチャ保護
・データ保護
・インシデント対応
・セキュリティ
・Identity and Access Management
・検出
・インフラストラクチャ保護
・データ保護
・インシデント対応

※ベストプラクティスの2019年7月版の「発見的統制」は、2020年7月版の「検出」と内容は一緒です。

信頼性
  2019年7月版 2020年7月版
説明 インフラストラクチャやサービスの中断から復旧し、需要に適したコンピューティングリソースを動的に獲得し、誤設定や⼀時的なネットワークの問題といった中断の影響を緩和する能力 期待されるタイミングで、意図した機能を正確かつ一貫して実行するワークロードの能力。これには、そのライフサイクル全体を通じてワークロードを運用およびテストする機能が含まれます。
設計原則 ・復旧手順をテストする
・障害から自動的に復旧する
・水平方向にスケールしてシステム全体の可用性を高める
・キャパシティーを推測しない
・オートメーションで変更を管理する
(変更なし)
ベストプラクティス ・基盤
・変更管理
・障害の管理
・基盤
・ワークロードアーキテクチャ
・変更管理
・障害の管理
パフォーマンス効率化
  2019年7月版 2020年7月版
説明 システムの要件を満たすためにコンピューティングリソースを効率的に使用し、要求の変化とテクノロジーの進化に対してもその効率性を維持する能力 (変更なし)
設計原則 ・最新テクノロジーの標準化
・数分でグローバルに展開
・サーバーレスアーキテクチャを使用
・より頻繁に実験可能
・システムを深く理解
(変更なし)
ベストプラクティス ・選択
・レビュー
・モニタリング
・トレードオフ
(変更なし)
コスト最適化
  2019年7月版 2020年7月版
説明  最も低い価格でシステムを運用してビジネス価値を実現する能力  (変更なし)
設計原則 ・消費モデルを導入する
・全体的な効率を測定する
・データセンター運用のための費用を排除する
・費用を分析し、帰結させる
・アプリケーションレベルのマネージドサービスを使用して所有コストを削減する
・クラウド財務管理の実装
・消費モデルを導入
・全体的な効率を測定する
・差別化につながらない高負荷の作業に費用をかけるのをやめる
・費用を分析および属性化する
ベストプラクティス ・費用認識
・費用対効果の高いリソース
・需要と供給を一致させる
・長期的な最適化
・クラウド財務管理を実践する
・経費支出と使用量の認識
・費用対効果の高いリソース
・需要を管理し、リソースを供給する
・経時的な最適化

※設計原則の2019年7月版の「データセンター運用のための費用を排除する」と「アプリケーションレベルのマネージドサービスを使用して所有コストを削減する」は、2020年7月版の「差別化につながらない高負荷の作業に費用をかけるのをやめる」にマージされています。

WorkSpacesのリストアとリビルド

$
0
0

WorkSpacesをお使いのお客様も増えて来ました。
WorkSpacesは展開する台数もサーバーに比べて多くなる傾向にあるため、トラブルシューティングに当たられるケースも多いのではないかと思いますが、
その中でも「リストア」と「リビルド」が実施する機会が多いのではないでしょうか。

この2つの違い、皆様ご存知でしょうか。

違いについて説明を取り上げつつ、どういう時に使うものなのか、トラブルシュートの際はどのような順番で使うか、ご紹介したいと思います。

「リストア」と「リビルド」の違いについて

「リストア」とは

AWSドキュメントでは、次の通り記載されています。

WorkSpace の復元時に使用する自動スナップショットは、12 時間ごとにスケジュールされます。
WorkSpace が正常であれば、ルートボリュームとユーザーボリュームの両方のスナップショットがほぼ同時に作成されます。

WorkSpacesには、隠しドライブとなっている、WindowsがインストールされているCドライブと、プロファイルデータを保存しているDドライブとがあり、それぞれ独立したディスクが割り当てられています。
下記のようなイメージです。

ドキュメントにもある通り、WorkSpacesは12時間に1回、自動でスナップショットを取得してくれています。このスナップショットのデータを使って元に戻す作業が「リストア」という作業になります。

※AWSのドキュメントを日本語で参照すると「復元」という日本語が使われていますが、マネジメントコンソール上では「リストア」表記のため、本ブログ記事でも「リストア」という表記で統一しています。英語では、「restore」の表記になります。

なおWorkSpacesのスナップショット取得は任意のタイミングで実施することは出来ず、また世代管理がされるものでもないため、上手くWorkSpacesが動かなくなったので動いていた状態に戻したい、という場合に使う機能ということを念頭に置いていただければと思います。
ファイルの世代管理や消去対策などは、ファイルサーバーの設置やストレージのSaaSの利用を念頭に、WorkSpacesをご利用になることをお勧めしております。

「リビルド」とは

AWSドキュメントでは、次の通り記載されています。

必要に応じて、WorkSpace を再構築できます。これにより、ルートボリュームとユーザーボリュームの両方が再作成されます。

リストアの項でも説明した通り、WorkSpacesには、隠しドライブとなっている、WindowsがインストールされているCドライブと、プロファイルデータを保存しているDドライブとがあり、それぞれ独立したディスクが割り当てられています。
このCドライブをイメージ作成時点のものと取り替え、Dドライブをスナップショットの時点まで戻す、というのが「リビルド」という作業になります。
CドライブはWorkSpacesのイメージの状態まで戻されることになるため、Cドライブに個別にインストールしていたアプリケーションなどは消えることになります。

※AWSのドキュメントを日本語で参照すると「再構築」という日本語が使われていますが、マネジメントコンソール上では「リビルド」表記のため、本ブログ記事でも「リビルド」という表記で統一しています。英語では、「rebuild」の表記になります。

リビルドとリストアの使い分け

では、リビルドとリストアはどう使い分けたらいいでしょうか。
WorkSpacesが上手く動いていないケースで使う際は、リストア→リビルドの順で試していただきたいと思います。

リビルドを先にやってしまうと、Cドライブなどに加えた変化がすべてイメージの状態まで巻き戻るため、事前に使っていた少し前の状態に戻せるかまず確認するため、リストアから実施いただくのがセオリーです。リストアでもご利用できない状態が続くようであれば、Cドライブに保存されているファイルが消えてしまうことを前提に、リビルドをお試しいただきたいと思います。

リストアとリビルドを実施後の違いを確認してみる

初期状態

実際にリストアとリビルドを実施して、CドライブとDドライブの違いを確認してみましょう。
SAKURA Editorだけをインストールしたイメージを用意し、WorkSpacesを展開しました。
下記が初期状態です。

ここにtera termとSalckをインストールしました。

SlackはDドライブのプロファイル領域、tera termとSAKURA EditorはCドライブにインストールされています。

上記までの状態からSAKURA Editor, tera term, Slackの3つをすべて削除します。
この後、リストアであれば3つともすべてアプリケーションが戻り、リビルドであればSAKURA EditorとSlackが元に戻るはずです。

リストアする

まずリストアを実行してみます。
WorkSpacesで対象のWorkSpacesを選択し、アクションより「リビルドとリストア」をクリックします。

表示されたポップアップの上のラジオボタン「WorkSpacesのリストア」を選択して、「WorkSpacesのリビルドとリストア」をクリックします。

リストアが開始され、WorkSpacesのステータスが「RESTORING」になります。

リストアが完了すると、WorkSpacesのステータスが「AVAILABLE」になります。この状態になると、WorkSpacesに再び接続できる状態です。

リストア後のWorkSpacesにログインしてみると、先程削除してしまったアプリケーションが復活しています。

リビルドする

今度はリビルドを実行してみます。
リストアと同様に、WorkSpacesで対象のWorkSpacesを選択し、アクションより「リビルドとリストア」をクリックします。

表示されたポップアップの下のラジオボタン「WorkSpacesのリビルド」を選択して、「WorkSpacesのリビルドとリストア」をクリックします。

リビルドが開始され、WorkSpacesのステータスが「REBUILDING」になります。

リビルドが完了すると、WorkSpacesのステータスが「AVAILABLE」になります。この状態になると、WorkSpacesに再び接続できる状態です。

ログインしてみると、先程削除してしまったアプリケーションが復活していますが、イメージにもない、Dドライブにも入っていないtera termは復活しない状態となります。

このため、デスクトップのアイコンも、ショートカット先が見付からない真っ白なファイルが置かれた状態になっています。

まとめ

  • リストアは、WorkSpacesをスナップショットの時点まで戻す
  • リビルドは、WorkSpacesをイメージ作成の時点まで戻す
  • 実施の際は、リストア→リビルドの順で

トラブルシュートの際の一助になれば、幸いです。

【はじめてのAWS】ルートユーザーの安全を確保しよう

$
0
0

 

今回は、弊社のYouTubeチャンネル「サーバーワークス チャンネル」にて先日公開した以下動画についてblogでも内容を紹介いたします。

動画内では、実際にAWSマネジメントコンソールを操作しながら設定を行っていくデモがありますのでもし興味があれば是非、動画も参照頂ければと思います。

内容が良かった、為になったと感じたら是非Goodボタンやチャンネル登録頂けると嬉しいです。

対象者

・AWSをこれからはじめたい方
・AWSをもっと活用したい方
・AWSアカウントのルートユーザーの安全性確保に関して実施すべき内容や設定イメージを把握したい方

ルートユーザーに関するおさらい

AWSアカウント作成した初期状態では、作成時に使用したメールアドレスとパスワードでアクセス可能で、AWSアカウントのすべてのリソースに対して完全なアクセス権限を持つ唯一のユーザーとなります。このユーザーからの実行であれば、「当該AWSアカウントの解約」といったオペレーションまでも可能とします。

例えあなたがAWSアカウントのオーナー(管理者)であっても、普段使いすべきユーザーではありません。以下ドキュメントに記載されているルートユーザーでの認証情報が必要なタスク以外での利用は避けるよう心掛ける事は大切です。

参考: AWS アカウントのルートユーザー認証情報が必要な AWS タスク
https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws_tasks-that-require-root.html

ルートユーザーの認証情報が必要なタスク以外で強い権限でオペレーションを行使したい場合は、過去の関連blogでも紹介の通り、管理用のIAMユーザーを別途作成して利用するようにしましょう。しかし、ルートユーザーはAWSアカウントを管理するうえで必ず必要なものであり、そしてAWSアカウント管理者の責任で安全を確保する必要があります。
今回は、そんなルートユーザーの安全を確保する為に実施すべき内容についてご紹介します。

参考: AWSアカウントのルートユーザー
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_root-user.html

ルートユーザーの安全を確保するための設定項目

今回紹介する設定項目は大きく以下内容となります。

  1. パスワードを変更する
  2. MFA(多要素認証)を有効にする
  3. ルートユーザーのアクセスキー発行有無の確認
    1. もし発行されていた場合は削除を検討/実施
  4. IAMユーザー/ロールでの請求情報アクセスを有効化

1.パスワードを変更する

以下の条件を満たす強度の高いパスワードを検討のうえ設定してください。

  • 8~128 文字で構成されている
  • 大文字、小文字、数字、特殊文字 ! @ # $ % ^ & * () <> [] {} | _+-= が含まれている
  • AWS アカウント名または E メールアドレスと同じでないこと

パスワード保護のベストプラクティスは以下となります。

  • パスワードは定期的に変更し、秘密に保つ
  • 他のサイト等で使用しているものとは異なるパスワードを使用する
  • 安易に想像出来るパスワードは使用しない
    • (例) secret , password , amazon ,123456等

参考: AWSアカウントのルートユーザーのパスワードの変更
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_passwords_change-root.html

2.MFA(多要素認証)を有効にする

MFA(多要素認証)とは Multi-Factor Authenticationの略となり、知識情報、所持情報、生体情報など複数の種類の要素をユーザーに要求する認証方式です。
AWSでもMFAの有効化がセキュリティ上のベストプラクティスとなっており、設定が推奨されます。設定を行う事で、通常のログイン認証に加え、AWSでサポートされている以下MFA機構からの認証が追加で加わります。

  • 仮想MFAデバイス
    物理デバイスをエミュレートするソフトウェアアプリケーション
  • U2F セキュリティキー
    コンピュータの USB ポートに接続するデバイス
  • ハードウェア MFAデバイス  ※ルートユーザーの場合、可能であればこちらを検討(後述)
     6 桁の数値コードが表示されるハードウェアデバイス

    ※SMS テキストメッセージベースMFAというものも存在しますがIAMユーザーのみ対応となり、ルートユーザーではサポートされません

以下CISベンチーマークでは Level 2としてルートユーザーでハードウェアMFAが有効となっている事が定義されています。
参考: CIS Amazon Web Services Foundations v1.2.0
1.14 Ensure hardware MFA is enabled for the “root” account (Scored)
https://d1.awsstatic.com/whitepapers/compliance/AWS_CIS_Foundations_Benchmark.pdf

当動画ではあくまで設定イメージを掴んでもらう事を目的に、仮想MFAデバイス(スマートフォンにインストールした Google Authenticator) を利用して設定を行う形で紹介しておりますが、高度なセキュリティを必要とする重要なAWSアカウントのルートユーザーでは、ハードウェアMFAデバイス利用した設定も検討してみてください。

今回の例で紹介したトークンデバイス以外で設定する場合の手順に関しましては、ご利用の各製品のマニュアルを確認ください。

参考:  AWS アカウントの root ユーザーに対して MFA を有効にする
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_root-user.html#id_root-user_manage_mfa

3.ルートユーザーのアクセスキー発行有無の確認と削除

ルートユーザーでも各種プログラムから利用するためのアクセスキーの発行は可能です。ただし、請求情報を含む全てのAWSリソースにフルアクセス出来てしまい、制限する事も出来ないとても強力な物となりますので、余程の理由がない限りルートユーザーのアクセスキーは利用(発行)しない事が推奨されます。

もし、AWSアカウント監理者として意図せずにルートユーザーのアクセスキーの発行がされていた場合には、重大なセキュリティのトラブルに繋がる恐れがありますので削除対応を検討してください。同時に発行された経緯についても確認すると良いでしょう。

※もし、対象アクセスキーを利用しているプログラムの処理等が存在していた場合には影響を受けますので適切な権限のアクセスキーへの置き換えやIAMロール利用による処理の見直しでアクセスキーを利用しない/させない事も同時に検討してください

参考: AWS アカウントのルートユーザー のアクセスキーの管理
https://docs.aws.amazon.com/ja_jp/general/latest/gr/managing-aws-access-keys.html

参考: ルートユーザーのアクセスキーの削除
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_root-user.html#id_root-user_manage_delete-key

4.IAMユーザー/ロールでの請求情報アクセスを有効化

AWSアカウント発行時のデフォルト設定では、請求情報の参照はルートユーザーでのみ可能な状態となっています。ルートユーザーを普段使いしないで済むようにする為にも、別途作成の管理用IAMユーザーにて請求情報参照を可能にする「IAMユーザー/ロールによる請求情報へのアクセス」設定の有効化(IAMアクセスのアクティブ化) を実施すると良いでしょう。

実施後、IAMユーザー/ロールに必要なIAMポリシーを付与する事で請求情報へのアクセスが可能となります。

参考:請求情報およびコスト管理コンソールへのアクセスのアクティベート手順
https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/grantaccess.html#ControllingAccessWebsite-Activate

参考: Billing and Cost Management でのアイデンティティベースのポリシー (IAM ポリシー) の使用
https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/billing-permissions-ref.html

ルートユーザーの安全確保の作業デモ(動画内 02:06〜)

作業概要の説明に加え、実際にAWSマネジメントコンソールからルートユーザーの安全を確保する為の実際の操作デモを動画内で紹介しています。

管理者視点で、ざっくりとルートユーザーの安全確保に必要な作業や設定イメージを掴んで頂ける内容となっておりますで、もし興味があれば動画を参照ください。

まとめ

管理者としてAWSアカウントを作成した際には、ご紹介したセキュリティのベストプラクティスに従い速やかにルートユーザーの安全を確保しましょう。

関連blog

【はじめてのAWS】管理用IAMユーザーを作成しよう

 
 
 

【10分で】ほぼコマンドなし!VSCode×Docker×ペアプロしよう【開発体験向上】

$
0
0

こんにちは。ローカル環境のパッケージ管理は美しくできていますか?
残念ながら私はできていません。
あれは入社1年目、いろんなブログから引っ張ってきたインストール系コマンドをよくわからないまま実行した結果・・・(お察しください)

それはさておき
ローカルから分離したクリーンな環境を、サーバーも立てずにスパッと作れたらいいと思いませんか?

概要

ということで、今回は

  • プロジェクト専用のPython実行環境を簡単に起動して
  • コンテナに簡単に接続して
  • ついでにコンテナ上のファイルをリアルタイムで共同編集する

を実現したいと思います。
VSCodeとDockerさえインストールしてあれば10分あればできると思います。

Visual Studio Code(以下VSCode)のExtension(拡張機能)を使って、Dockerインストール以外の作業はずっとVSCodeの画面でおこなえます。楽!

動作環境

今回の動作環境は以下のとおりです。
– macOS Catalina 10.15.4
– Docker version 19.03.8

ツールの準備

VSCode

こちらよりダウンロードできます。
https://code.visualstudio.com/

Docker

OSによってインストール手順が異なるため、割愛いたします。
「Mac(Windows) Docker インストール」などで検索していただくと素敵な記事がヒットしますので、そちらをご参照ください。
インストール後、起動しておきます。

「.devcontainer」ディレクトリのあるプロジェクトのdockerコンテナを立てる

それでは、コンテナ上でファイル編集をするところまでチュートリアル的にやってみましょう。

1.サンプルリポジトリをcloneする

git clone https://github.com/serverworks-annex/docker_sample.git

2.VSCodeコマンドパレットを開く
MacのショートカットキーはCommand + Shift + P、WindowsならCtrl + Shift + Pです。

3.「Open Folder in Container…」を選択する

4.1でcloneしたリポジトリのディレクトリ(「docker_sample」)を開く

→.devcontainerディレクトリ内の設定ファイルを読み込んで、設定ファイルどおりに立ち上げたコンテナに接続してくれる! \ワーオ/
(こんな画面になるので少し待ちます。)

5.Pythonファイルを実行する

# python sample.py
>>> {'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}

→HTTPリクエストをする処理が問題なく実行できました。
requirements.txtで指定されたライブラリも、コンテナ起動時にインストールされています。
.devcontainer/devcontainer.jsonの20行目にpip installコマンドを記載しているからですね。

設定ファイルの説明

.devcontainer/devcontainer.json

Remote Containers拡張機能の設定をします。今回利用しているパラメータについて説明します。
今回は使用していないパラメータもあります。詳しくは公式ドキュメントをご参照ください。

  • name
        コンテナの表示名
  • settings
        コンテナ側のVSCodeの設定ファイルに追記する内容
  • extensions
        コンテナにインストールするVSCodeのExtension IDリスト
        globalにインストールされていないExtensionでも問題ない
  • forwardPorts
        コンテナで使えるようにしたいポートのリスト
  • postCreateCommand
        コンテナを起動した後にコンテナ内で自動実行するコマンド
        複数指定する場合は「&&」でつなげる

補足:Extension IDの参照方法

VSCodeの一番左にアイコンが並んでいる中に、小さな4つの四角で構成されたアイコンがあります。
そのアイコンをクリックすると、VSCodeのExtensionを検索できます。

画像のように、1つのExtensionを選択した画面でExtension名の右隣に表示されているのがExtension IDです。
コピーできるようになっているので、設定ファイルへはここからコピペするとよいです。

Dockerfileの内容説明

Python3.7の公式イメージをベースにして、文字コードをutf-8に設定したりpipをupgradeしたりしています。

新規プロジェクトに上記設定ファイルの雛形を設置する方法

上記作業において「Open Folder in Container…」を選択した後、「.devcontainer」ディレクトリが存在しないプロジェクトのディレクトリを開こうとするとこのようなポップアップが出ます。

作成したい環境を選ぶと、適切な設定ファイルを配置した「.devcontainer」ディレクトリを作成してくれます。

これでクリーンな環境ができた!磯野〜、ペアプロしようぜ〜

ホスト側でひしめき合うライブラリの喧騒から離れて、何もimportされていないクリーンな環境が用意できました。
ペアプロでもしたい気分になってきましたね。
dockerの設定ファイルとrequirements.txtさえあれば後日に動作環境を共有することになっても心中穏やかです。

devcontainer.jsonで設定した通り、コンテナを立てるとLiveShareがインストールされて使える状態になっています。
あとはコンテナに接続した状態でLiveShareを使うだけ!

LiveShare Extensionの使い方は加藤の記事をご参照ください。

ここまで読んでいただき、ありがとうございました。
皆様の素敵な開発ライフに貢献できれば幸いです!

Viewing all 1210 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>