プレイヤーズ・ハイ

 雑多な日記

AWS IAM の雑なまとめ

【目次】

IAM の用途

  • AWS マネージメントコンソールへのログイン,AWS CLI や AWS SDK, IAM HTTPS API などで使用できる.

IAM の単位

  • IAM ユーザー

    • ユーザー.10 グループまで所属可能.
    • 認証情報は,IAM ユーザーごとに API キーを発行するか,OpenSSL などで作成した X.509 Certificate をアップロードして使う.
    • API キーはローテーション強制ができる.
  • IAM グループ

    • 単にユーザーをグルーピングしたもの
  • IAM ロール

    • AWS サービスやアプリケーションに対して権限を付与するためのもの.IAM ユーザー|グループとは紐付かない.EC2 のインスタンスプロファイルなど.

IAM ポリシー

ユーザーベースポリシー

  • IAM ユーザー|グループ|ロールに紐付ける.

  • AWS 管理ポリシー

    • AWS によってあらかじめ用意されたアクセス権群のテンプレートのようなもの.複数の IAM ユーザー|グループ|ロールで共有可能
  • ユーザー管理ポリシー
    • ユーザーによって独自にカスタマイズ,定義されたポリシー群.複数の IAM ユーザー|グループ|ロールで共有可能
  • インラインポリシー

    • 各 IAM ユーザー|グループ|ロール毎に個別に設定するポリシー.共有不可.
  • IAM ポリシージェネレーターを使用して書き出させるのが簡単で確実

    • IAM ポリシージェネレーター内で 5 バージョンの管理が可能
  • ポリシーのテストには IAM ポリシーシミュレーターというのが使える.
  • 既存ポリシーのチェックには IAM ポリシーバリデーターというのが使える.

リソースベースポリシー

IAM ロールの信頼ポリシー

  • ある IAM ロールに付けた権限を他の主体 (Principal) に移譲する.
    • ( ≒ Principal が,ある IAM ユーザーになりすます.権限を引き受ける(AssumeRole))

ID フェデレーション

  • AD ユーザー ( ≒ ID プロバイダー, SAML 2.0 or OpenID Connect (Google, Facebook, Amazon などのアカウントが対応している.また Amazon Cognito とも連携可能) と互換性のあるもの) などに IAM 権限を移譲する.

    • AWS STS (Security Token Service, IAM のサブプロダクト) を使用.具体的には AssumeRole, GetFederationToken.
    • Temporary Security Credentials
  • identity provider カラムで ID プロバイダーを設定し,ある IAM ロールを AssumeRole する.

一時的セキュリティ認証情報

  • IAM ロールを使ったクロスアカウントアクセスなど

  • アカウント (IAM ユーザー) 側

    • どの IAM ロール (リソースに紐付いた IAM ロールなど) を移譲されるかを定義
  • リソース側
    • 誰 (Principal) がどのリソースにどんな権限を持つことができるか定義

Temporary Security Credentials

  • 以下の 3 つをユーザーに与え,期限付きの認証情報を与える.一時的な IAM AssumeRole と考えてもよい.GetSessionToken(自分自身の IAM ユーザー権限を一時的に利用), GetFederationToken はこの仕組を利用する.
    • アクセスキー ID
    • シークレットアクセスキー
    • セキュリティトークン
  • 権限を与える時間帯
    • IAM ユーザー
      • 最小 15 分 〜 最大 36 時間 (デフォルト 12 時間.時間帯はプリセットのものから 1 つ選ぶ)
    • AWS アカウント
      • 最小 15 分 〜 最大 1 時間 (デフォルト 1 時間.時間帯はプリセットのものから 1 つ選ぶ)
  • 詳細は以下

Temporary Security Credentials のまとめ

種別 説明 権限
GetSessionToken 自身の権限で一時認証 自身の権限
クロスアカウント不可
MFA 利用可
GetFederationToken 信頼ユーザーで一時認証 自身の権限内で規定
クロスアカウント不可
MFA 利用不可
AssumeRole IAM ロールとマッピング IAM ロールで規定
クロスアカウント可
MFA 利用可

www.slideshare.net

その他

  • STS は基本的にグローバルサービス (https://sts/amazonaws.com) だが,IAM の Account Settings にて各リージョンで STS の機能をアクティベート可能(->レイテンシーの低減などの効果).同時に AWS CloudTrail も忘れずにアクティベートすること.

  • Switch Role

    • AWS マネージメントコンソールにて,ある IAM ユーザーから,クロスアカウントアクセス用 IAM ロールにスイッチできる.
    • 必要なときに IAM ユーザーの権限を昇格とかに使える.
      • IAM ユーザー側には読み取り権限のみ
      • IAM ロール側には更新権限も
  • 変更の反映にまれに遅延が発生することがある,らしい.

コンフィグ類の書き方

  • ~/.aws/config
[default]
region = ap-northeast-1

[profile foo]
region = us-east-1
  • ~/.aws/credentials
[default]

[foo]
aws_access_key_id = A*******************
aws_secret_access_key = x***************************************

$ aws configure list で確認

以上

EC2 Auto Recovery の雑なまとめ

【目次】

Auto Recovery の流れ

  • 対応しているインスタンスタイプのインスタンスを起動する

  • Create Status Check Alarm

    • Whenever で Status Check Failed を選択して Create Alarm をクリック
  • CloudWatch に作成されているアラームを確認

    • +EC2 Action, Recover this instance
  • CloudWatch アラームのパラメーターを決める

    • 何秒間隔で: 60 秒 ( = 1 ピリオド)
    • 何ピリオド: 1 ピリオド
    • 何回失敗したら: 1 回

前提条件 (対応しているインスタンスタイプなど)

  • Use a C3, C4, M3, M4, R3, T2, or X1 instance type
  • Run in a VPC (not EC2-Classic)
  • Use shared tenancy (the tenancy attribute is set to default)
  • Use EBS volumes, including encrypted EBS volumes (not instance store volumes)

aws-cli で Auto Recovery (用の CloudWatch アラームを) 作成

こんなコマンドをたたくと Auto Recovery が設定されます.

$ ar_instance_id='i-0123456789abcdefg'

$ aws cloudwatch \
    put-metric-alarm \
    --alarm-name StatusCheckFailed_System-Alarm-for-"${ar_instance_id}" \
    --metric-name StatusCheckFailed_System \
    --namespace AWS/EC2 \
    --statistic Minimum \
    --dimensions Name=InstanceId,Value="${ar_instance_id}" \
    --unit Count \
    --period 60 \
    --evaluation-periods 1 \
    --threshold 1 \
    --comparison-operator GreaterThanOrEqualToThreshold \
    --alarm-actions arn:aws:automate:ap-northeast-1:ec2:recover

【追記】 --statistic Maximum から --statistic Minimum に変更.AWS の推奨だから

docs.aws.amazon.com

また上記リンク先内に

Important
再起動と復旧アクションの競合状態を避けるには、EC2 インスタンスを復旧させるアラームを作成するときに、アラームのしきい値として 1 分に代えて 2 分を設定することをお勧めします。

とあるが,これはあくまで「再起動」と「復旧」の2つのアラームが存在する場合の推奨であり,「復旧」アラームのみであれば 1 分でもよい.

注意点など


【訂正: 2017 年 1 月 9 日 追記】

以下の「IAM ロールと IAM ユーザー」のセクションは無視してください.

以前は,IAM ロールの権限で Auto Recovery のアラームを作成すると,アラームを設定した際に一時的な認証情報が使用されていました.そして,リカバリーアクション発動時に,一時的な認証情報を再度利用しようとし,一時的な認証情報のため,それでは処理が実行できずエラーが発生していたが,現在は対応され,IAM ロールの権限で Auto Recovery のアラームを作成しても,問題なくリカバリーアクションが実行されます.

IAM ロールと IAM ユーザー

IAM ロールを使うとアラームの作成自体は問題なく終了するが,recover アクションが動かないので IAM ユーザーを作り適切な権限を付与し,そちらのプロファイルを使ってアラームを作成する.

  • Auto Recovery 用 CloudWatch アラームを作成する用の IAM ユーザーを作成
cw_alarm_for_auto_recovery
Access Key ID:
A*******************
Secret Access Key:
x***************************************
  • 権限付与, 可能な限り絞った方がよいが,手っ取り早く PowerUserAccess を付与

  • Auto Recovery 用 CloudWatch アラームを作成する aws コマンドを発行する Linux ユーザー配下に credentials を設定

$ aws configure --profile cw_alarm_for_auto_recovery
AWS Access Key ID [None]: A*******************
AWS Secret Access Key [None]: x***************************************
Default region name [None]: ap-northeast-1
Default output format [None]:

$ cat ~/.aws/config
[default]
region = ap-northeast-1
[profile cw_alarm_for_auto_recovery]
region = ap-northeast-1

$ cat ~/.aws/credentials
[cw_alarm_for_auto_recovery]
aws_access_key_id = A*******************
aws_secret_access_key = x***************************************

$ aws configure list
Name                    Value             Type    Location
----                    -----             ----    --------
profile                <not set>             None    None
access_key     ****************NVVA         iam-role
secret_key     ****************O0pW         iam-role
region           ap-northeast-1      config-file    ~/.aws/config
  • Auto Recovery 用 CloudWatch アラームを作成

  • $ aws cloudwatch put-metric-alarm コマンドに,オプション --profile cw_alarm_for_auto_recovery を付与

System Status Check の失敗をどうやってテストするか

set-alarm-state を使っても,インスタンス復旧のアクションが実行される前に確認のためのヘルスチェックが再度実行が走るため,疑似障害は起こせない.

そのため,アラームの発火条件を ALARM is INSUFFICIENT にして,インスタンスを止めてテストする.

【追記】 以下のブログによると recover はテストできない模様. terminate はテストできました.

www.simpline.co.jp

recover を実行するアラームを作成する場合,IAM ロールによる実行許可が使用できない. root アカウントまたは必要な権限を付与した IAM ユーザーでアラームを作成する必要がある.

  • recover に必要な権限
    • ec2:DescribeInstanceStatus
    • ec2:DescribeInstances
    • ec2:DescribeInstanceRecoveryAttribute
    • ec2:RecoverInstances

詳細は以下

docs.aws.amazon.com

抜粋

アクセス許可

AWS Identity and Access Management (IAM) ユーザーの場合、アラームを作成または変更するには次のアクセス権限が必要です。

ec2:DescribeInstanceStatus と ec2:DescribeInstances。Amazon EC2 インスタンスステータスメトリクスに対するすべてのアラーム用。
ec2:StopInstances。停止アクションを含むアラーム用。
ec2:TerminateInstances。終了アクションを含むアラーム用。
ec2:DescribeInstanceRecoveryAttribute と ec2:RecoverInstances。復旧アクションを含むアラーム用。

インラインポリシーの例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1478745555000",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceRecoveryAttribute",
                "ec2:RecoverInstances"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "Stmt1478745582000",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricAlarm"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

Auto Recover ありのインスタンス ID 一覧取得

$ aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName==`StatusCheckFailed_System`].Dimensions' | grep Value | cut -d ':' -f 2-2 | sed 's/ //' | sed 's/"//g'
  • 既存インスタンスで Auto Recovery なしのものにすべて付与するシェルスクリプトの作成とテスト 全インスタンスのインスタンス ID - Auto Recovery ありのインスタンス ID = まだ Auto Recovery のないインスタンスのインスタンス ID リスト これを while ループに食わせて一気に作成

  • 指定したインスタンス ID の EC2 インスタンスに Auto Recovery を付与するシェルスクリプトの作成とテスト 手動でインスタンス ID のリストを作成し, これを while ループに食わせて一気に作成

Python 環境のセットアップ on Mac OS X in 2016 秋

自分用メモ

  • Mac OS X 10.11.6 - El Capitan

デフォルトの Python

$ which python
/usr/bin/python

$ python -V
Python 2.7.10

pip はデフォルトでは入っていません.

Homebrew で Python 3 をインストール

$ brew install python3

$ which python3
/usr/local/bin/python3

$ python3 -V
Python 3.5.2

Python 3.4 か 3.5 から pip も一緒にインストールされるようです.

$ which pip3
/usr/local/bin/pip3

Python のための bash 設定

$ vi ~/.bashrc

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.5/site-packages
export PYTHONDONTWRITEBYTECODE=1

Python 3 系から pyenv なども統合されているようですので今後追記していきます.

入門 Python 3

入門 Python 3

Pythonプロフェッショナルプログラミング 第2版

Pythonプロフェッショナルプログラミング 第2版

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

  • 作者: Pythonサポーターズ,露木誠,ルイス・イアン,石本敦夫,小田切篤,保坂翔馬,大谷弘喜
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/03/05
  • メディア: 大型本
  • 購入: 1人 クリック: 65回
  • この商品を含むブログ (30件) を見る

エンタープライズ DWH 移行セミナーのメモ / Micro Strategy とか Redshift とか

先日,AWS さまのオフィスにて開催された,エンタープライズ DWH 移行セミナーに参加してまいりましたのでそのメモ.

エンタープライズDWH移行セミナー(2016 年 9 月 21 日開催) https://aws.amazon.com/jp/about-aws/events/2016/DWHmigration_20160921/

僕が質問したかったこととその回答

  • Redshift のリーダーノードが死んだら?

    • マネージドなので死んだら自動復旧します.
  • Redshift の監視は?

    • CloudWatch 一択. 必要に応じてカスタムメトリックスを作成.Zabbix などと連携させるメリットはない.あるっちゃあると僕は思う.Zabbix に寄せるとアラーティングのルールなどが Zabbix のものを使える.
    • 詳細はこちら.Amazon Redshift パフォーマンスデータの概要 http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/metrics-listing.html

講演内容

AWS の人 (相澤さん)

  • Redshift は I/O を削減する.列志向型 (カラムナ)
  • 従来は行志向型
  • 分析作業には縦 (列) でデータを収集し分析することが多い.
  • 行志向の DB で集計するとテーブルフルスキャンがかかり,I/O が増える.
  • 列単位でディスクに格納.よってカラムナでの検索が早い

  • 圧縮

    • 圧縮アルゴリズムは列ごとに指定が可能
  • ゾーンマップ

    • ブロック単位で格納されたデータをソーティングし,不要なブロックを読み飛ばすことが可能.
  • 細かい insert や update が発生するものには向いていない.

  • Workload Management WLM

    • デフォルトは 5 であり,5 並列で処理可能,増やすこともできる.
  • S3 や Kinesis などでデータを受け,Redshift で分析

インフォマティカの人

  • ETL = Extract, Transform, Load = 抽出・変換・ロード
  • Sales Force -> Informatica Cloud -> Redshift, Web ブラウザーで数ステップで構築可能
  • 他に PowerCenter, DataSpider Servista など
  • これを行うことで,データ解析時間が短縮される.

マイクロストラテジーの人

  • 最近はモバイル端末上での BI ツールに力を入れている.
  • ネイティブアプリの操作感.PC + Web ブラウザーでなくとも分析業務がある程度可能に.

  • EMR の導入も多い

  • マイクロストラテジー,色んな機能が 1 つの製品で使えるよ! (宣伝) しかしデモ見てるとかなりよさげです.

今度のマイクロストラテジーさまのセミナーにも参加したい!

ドコモの人

Redshift 活用事例

  • IDAP

    • Integrated Data Analysis Platform, 自社開発,データ解析基盤
    • 内製!! 英断です.
  • 歴史

    • Netezza Twinfin ◎
    • Greenplum ◯
    • Hadoop △
    • からの Redshift
      • 1.6 PB, dw1.8xlarge ◎
  • S3 にデータ保存

  • Redshift には 4 PB

  • 内部犯行すら不可能なデータ漏洩防止策の実装

  • 徹底的に分離したアカウント権限の配置
  • クラウド上には複合データが存在しない暗号化方法の考案
  • あらゆる活動を記録・保存
  • Direct Connect
  • Transparency (利用者からはそれが AWS とか GCP とか分からない)
  • No provisioning
  • Sandbox (マーケットプレイスで色んなソフトウェアをつまみ食い)
    • 何百というツールをテスト

セキュリティ対策

  • データベースのアクセス権限設定

    • ユーザーには必要なスキーマしか見せない.
  • システムテーブル権限制御

    • 自分のテーブルだけが見える権限設定
  • UNLOAD

    • これを付与すると,任意のバケットにデータを出力させることができるため,禁止する.していた,が,VPC Endpoint で制御可能になった.VPC flow log で監査もバッチリ.

なるほどと思ったこと

  • ある会社が困っていることは,大体他の会社も困っている.

    • 自分たちだけが困っている場合,使い方が間違っている可能性が高い.
  • テーブル数・スキーマ数枯渇問題 9,900/256

    • 1 ユーザー 1 スキーマにしてたらリミットに達した.リミテーション監視をしっかりやろう.
  • 非データサイエンティストが書くへたくそクエリによるディスクフルや再起動が発生.クエリのレビューが必要.スロークエリーの監視.勉強会をやる.

  • CTAS = create table as select でテーブル作ると,圧縮オプション付けないとデータ肥大化.

  • ETL, BI ツールは一切使わず,ほぼすべて内製.データがでかすぎて,1 プロダクトに寄せてしまうと後で色々大変になる.

  • セキュリティとかビッグデータ・システム構築のコンサルティングをやる部署がある.

    • イノベーション統括部クラウドソリューション担当
    • 外販サービス
      • docomo cloud package
      • Cost Visualizer

相澤さんまとめ

  • AWS Database Migration Service データ移行ツール,オンプレの RDB から Redshift にもデータ移せる.

  • AWS Schema Conversion Tool (SCT)

    • 業務に合わせた微調整は必要
  • STEP 1

    • DDL, スキーマ,プロシージャの移行
  • STEP 2

    • データの移行 DMS を使う
  • 大容量データの移行には Snowball, 80 TB, 10Gbps 暗号化される.

  • Redshift PoC アクセラレーションプログラム.費用がお得に.

以上です.大変に有意義なイベントでした.関係者の皆様,ありがとうございました!!

Amazon Web Services 定番業務システム12パターン 設計ガイド

Amazon Web Services 定番業務システム12パターン 設計ガイド

Amazon Web Services企業導入ガイドブック -企業担当者が知っておくべきAWSサービスの全貌から、セキュリティ概要、システム設計、導入プロセス、運用まで-

Amazon Web Services企業導入ガイドブック -企業担当者が知っておくべきAWSサービスの全貌から、セキュリティ概要、システム設計、導入プロセス、運用まで-

  • 作者: 荒木靖宏,大谷晋平,小林正人,酒徳知明,高田智己,瀧澤与一,山本教仁,吉羽龍太郎
  • 出版社/メーカー: マイナビ出版
  • 発売日: 2016/06/10
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド