【小ネタ】jid を使ってみた
jid は JSON をインタラクティブに掘っていくことができるツールです.
GitHub - simeji/jid: json incremental digger https://github.com/simeji/jid
環境
$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.2 (Maipo) $ uname -r 3.10.0-327.28.3.el7.x86_64
jid のインストール
# cd /tmp # curl -LO https://github.com/simeji/jid/releases/download/0.6.2/jid_linux_amd64.zip # unzip ./jid_linux_amd64.zip # cp ./jid_linux_amd64 /usr/local/bin/jid # export PATH=$PATH:/usr/local/scala/bin
JSON を掘ってみる
以下の JSON ファイルを jid コマンドで掘っていきます.
{ "aa": "2AA2", "bb": { "aaa": [ 123, "cccc", [ 1, 2 ] ], "c": 321 } }
JSON を echo しパイプで jid コマンドに渡します(以下のようにファイルから読み込むこともできます.$ jid < file.json
).
$ echo '{"aa":"2AA2","bb":{"aaa":[123,"cccc",[1,2]],"c":321}}'| jid
使い方としてはざっくりと,
jid に JSON を食わせて,TAB と ENTER キーをペコペコ押していれば使い方が掴めると思います.
全キーマップは https://github.com/simeji/jid#keymaps
TAB キーを押下すると,掘っていける候補が出力されます.以下でいうと aa bb
の部分です.
[Filter]> . aa bb { "aa": "2AA2", "bb": { "aaa": [ 123, "cccc", [ 1, 2 ] ], "c": 321 } }
掘りたい候補がハイライトされた状態で ENTER キーを押下すると,その要素を掘っていけます.
(JSON に要素があれば) 更にドットキーを押下し,TAB キーを押下して掘っていけます.
[Filter]> .bb. aaa c { "aaa": [ 123, "cccc", [ 1, 2 ] ], "c": 321 }
たとえば $ aws cloudwatch describe-alarms
コマンドを jid で掘っていくと,以下のようになります.
[Filter]> .MetricAlarms[0].Dimensions[0].Value "i-0e22a8eef9eea680b" "i-0exxxxxxxxxxxxxxx"
番外編
あるプレフィックス名を持つ CloudWatch アラームが作成されている EC2 インスタンス ID の一覧を取得する.
$ aws cloudwatch describe-alarms --alarm-name-prefix [CloudWatchアラーム名のプレフィックス] --query MetricAlarms[].Dimensions[].Value
AWS IAM 用ツール Miam の雑なまとめ
※ かなり雑です.
【目次】
環境
RHEL 7.2 (64 bit)
Ruby と Miam のインストール
システムワイドにバコーンとインストール
$ sudo yum install ruby -y $ ruby -v ruby 2.0.0p648 (2015-12-16) [x86_64-linux] $ gem -v 2.0.14.1
に,2.0 ... まぁいいやこのまま続けます.
$ sudo gem install miam Fetching: jmespath-1.3.1.gem (100%) Successfully installed jmespath-1.3.1 Fetching: aws-sigv4-1.0.0.gem (100%) Successfully installed aws-sigv4-1.0.0 Fetching: aws-sdk-core-2.6.28.gem (100%) Successfully installed aws-sdk-core-2.6.28 Fetching: ruby-progressbar-1.8.1.gem (100%) Successfully installed ruby-progressbar-1.8.1 Fetching: parallel-1.10.0.gem (100%) Successfully installed parallel-1.10.0 Fetching: tins-1.13.0.gem (100%) Successfully installed tins-1.13.0 Fetching: term-ansicolor-1.4.0.gem (100%) Successfully installed term-ansicolor-1.4.0 Fetching: diffy-3.1.0.gem (100%) Successfully installed diffy-3.1.0 Fetching: hashie-3.4.6.gem (100%) Successfully installed hashie-3.4.6 Fetching: miam-0.2.3.gem (100%) Successfully installed miam-0.2.3 Parsing documentation for jmespath-1.3.1 Installing ri documentation for jmespath-1.3.1 Parsing documentation for aws-sigv4-1.0.0 Installing ri documentation for aws-sigv4-1.0.0 Parsing documentation for aws-sdk-core-2.6.28 Installing ri documentation for aws-sdk-core-2.6.28 Parsing documentation for ruby-progressbar-1.8.1 Installing ri documentation for ruby-progressbar-1.8.1 Parsing documentation for parallel-1.10.0 Installing ri documentation for parallel-1.10.0 Parsing documentation for tins-1.13.0 Installing ri documentation for tins-1.13.0 Parsing documentation for term-ansicolor-1.4.0 Installing ri documentation for term-ansicolor-1.4.0 Parsing documentation for diffy-3.1.0 Installing ri documentation for diffy-3.1.0 Parsing documentation for hashie-3.4.6 Installing ri documentation for hashie-3.4.6 Parsing documentation for miam-0.2.3 Installing ri documentation for miam-0.2.3 10 gems installed $ echo $? 0
色々入った.
既存 IAM 設定のエクスポート
$ miam -e -o IAMfile
IAM 設定の適用
- IAM 定義用 DSL ファイルを編集
$ vi IAMfile
- ドライラン
$ miam -a --dry-run
- 適用
$ miam -a
/usr/local/bin を環境変数 PATH に追加
あとは書き出された IAMfile, GitHub の IAMfile example を読み,Ruby のコードが読めれば大体わかるはず,という雑な説明ですみません.
Miam のオプション
これも GitHub の README.md を読めば大体わかると思いますがいくつか説明します.
--account-output FILE
?
--export-concurrency N
文字通り,export の多重度を上げるオプションです.
$ miam -e --export-concurrency 2 -o /tmp/IAMfile
--format=FORMAT
エクスポートするファイルのフォーマットを,Ruby ファイル形式,もしくは JSON 形式に指定します.
$ miam -e --export-concurrency 2 -o /tmp/IAMfile.rb --format=ruby $ miam -e --export-concurrency 2 -o /tmp/IAMfile.json --format=json
--split
出力結果を分割します.IAM ユーザーとかグループとかロールとか.
$ miam -e --export-concurrency 2 -o /tmp/IAMfile.json --format=json --split Export IAM ᗧ 100% write `/tmp/users.iam.json` write `/tmp/groups.iam.json` write `/tmp/roles.iam.json` write `/tmp/instance_profiles.iam.json` write `/tmp/policies.iam.json`
--split-more
もっと分割します.1 IAM ユーザー毎とか.
--target REGEXP
?
適用範囲を正規表現で指定?
--ignore-login-profile
?
ヤツの名は Subiam
GREE さん製で,Miam からフォークした Subiam というのがあるそうなのでそっちも試してみます!!
Subiamを使いAWSのIAM管理をコードベースでおこなう | GREE Engineers' Blog http://labs.gree.jp/blog/2016/06/15988/
以上
【小ネタ】AWS CLI とか SDK とかで使える AWS 関連の環境変数
まとめ
項目 | AWS 環境変数 | AWS 設定ファイル変数 | オプション |
---|---|---|---|
アクセスキー ID | AWS_ACCESS_KEY_ID | aws_access_key_id | - |
シークレットアクセスキー | AWS_SECRET_ACCESS_KEY | aws_secret_access_key | - |
セッショントークン | AWS_SESSION_TOKEN | aws_session_token | - |
セキュリティートークン | AWS_SECURITY_TOKEN | aws_security_token | - |
プロファイル | AWS_DEFAULT_PROFILE | profile | --profile |
リージョン | AWS_DEFAULT_REGION | region | --region |
出力形式 | AWS_DEFAULT_OUTPUT | output | --output |
設定ファイル | AWS_CONFIG_FILE | - | - |
共用クレデンシャル | AWS_SHARED_CREDENTIALS_FILE | - | - |
- AWS セッショントークンは,期限付き認証のときに,~/.aws/config or ~/.aws/credentials ファイルに書く
- AWS_CONFIG_FILE は,デフォルトの ~/.aws/config のパスを変更
- AWS_SHARED_CREDENTIALS_FILE は,デフォルトの ~/.aws/credentials のパスを変更
つよさ
- 設定ファイル変数 < 環境変数 < オプション
ちなみにどの IAM 権限が使われるかですが,EC2 インスタンスプロファイルが設定された Linux なり Windows なりでは,EC2 インスタンスプロファイルの IAM 権限がまず使われ,--profile で特定のプロファイル (~/.aws/credentials に設定したプロファイル) を使うこともできます.
おまけ AWS CLI コマンド補完機能の設定
bash
- 設定
$ complete -C aws_completer aws
- 確認
$ complete -p
- 常態化
echo 'complete -C aws_completer aws' >> ~/.bash_profile
zsh
$ which aws /usr/local/bin/aws $ source /usr/local/bin/aws_zsh_completer.sh
以上
AWS ロング ID の雑なまとめ
- 期限: 2016/12/16
- でもアカウント毎にちょいちょい違うっぽいので以下で確認
- EC2 Dashboard の Resource ID length management
- でもアカウント毎にちょいちょい違うっぽいので以下で確認
【目次】
変更対象と変更内容
ロング ID 変更対象
- Reservation (各リザベーションは単一のインスタンス起動リクエストの結果を意味しますが、複数のインスタンスを起動した際には複数のインスタンスと関連付けられます。 )
- Instance ID
- Volume ID
- Snapshot ID
reservationはインスタンスを起動するアクションのこと。run-instancesを使って一度に複数のインスタンスを起動すると、(普通は)1個のreservationが作られ、複数のインスタンスがそこに属する(ただし場合によっては複数のreservationが作られることもあるらしい)。
変更内容
- それぞれ 8 桁から 17 桁になる.
変更設定 URL
- EC2 Dashboard の Resource ID length management をクリック
既存リソースの変更
- できないっぽい.ショートだろうがロングだろうが,1 度割当たった ID は変更不可っぽい.
設定対象の単位
- IAM ユーザー,または IAM ロール単位
- リージョン単位 (マルチリージョン運用であれば,それぞれのリージョンで設定が必要)
- すべてのリージョンで一気にオプトインするためのツールがある.
- awslabs/ec2-migrate-longer-id: The code opts the entire account in to the longer id format for ec2 resources in each region with a single request. It will also print status and revert to shorter ids in case of problems. https://github.com/awslabs/ec2-migrate-longer-id
- すべてのリージョンで一気にオプトインするためのツールがある.
オプトイン・オプトアウト
- 現在の設定の確認
- EC2 インスタンス ID のロング ID 設定を調べたいとき (ARN には調べたい対象 IAM ユーザーの ARN を指定.PROFILE は場合によっては指定)
$ aws ec2 describe-identity-id-format --resource instance --principal-arn [ARN] --profile [PROFILE] { "Statuses": [ { "Deadline": "2016-12-12T18:00:00Z", "UseLongIds": true, "Resource": "instance" } ] }
- オプトイン
$ aws ec2 modify-identity-id-format \ --resource [instance | reservation | snapshot | volume] # どれをオプトインしたいか選ぶ --principal-arn [ARN] --use-long-id
- オプトアウト
$ aws ec2 modify-identity-id-format \ --resource [instance | reservation | snapshot | volume] # どれをオプトアウトしたいか選ぶ --principal-arn [ARN] --no-use-long-id
ARN にルートアカウントを指定すれば,そのアカウント配下の IAM ユーザーの設定を一気に変更できる.
その他
運用スクリプトなどで桁数バリデーションチェックしている場合は修正しましょう.
開発環境でのテスト
- ある IAM ユーザーのロング ID を有効化する.
- 開発環境をその IAM ユーザーで作り直す.
可能な限りの E2E テストを流して異常が起こらないかチェック
面倒くさかったらルートアカウントの ARN 指定してバーン!ってやってまずそうならバーン!と戻すという手もあり.自己責任でよろしくお願いします.
詳細は以下!
よくある質問 - Amazon EC2 | AWS https://aws.amazon.com/jp/ec2/faqs/#longer-ids
こんなブログ書いててなんですが「より長い EC2、EBS、および Storage Gateway リソース ID」セクションを全部読んでおいた方がいいと思います.
以上
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 ポリシーバリデーターというのが使える.
リソースベースポリシー
- S3 のバケットポリシーなどに紐付ける.他には VPC, Lambda, Glacier, KMS, OpsWorks など.他多数.
- AWS Black Belt Techシリーズ AWS IAM http://www.slideshare.net/AmazonWebServicesJapan/20150617-aws-blackbeltiam 33 ページ
- IAM と連携する AWS サービス - AWS Identity and Access Management http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html
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 つ選ぶ)
- IAM ユーザー
- 詳細は以下
- AWS Black Belt Techシリーズ AWS IAM http://www.slideshare.net/AmazonWebServicesJapan/20150617-aws-blackbeltiam 53 ページ
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
で確認
以上