AWS CLI 1.9.0がリリースされました

2015.10.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS のコマンドラインツール CLI 1.9.0 がリリースされたので、更新内容をさらっと紹介したいと思います。

リリースノート https://aws.amazon.com/releasenotes/CLI/3617378217059595

AWS IAM のポリシーシミュレーターがリソースベース権限に対応しました。

AWS CLI もこの機能に追従しました。

詳細は次の URL をご確認ください。

AWS Identity and Access Management (IAM) Now Supports Resource-based Policies in the IAM Policy Simulator

AWS Auto Scaling が暗号化された EBS にも対応しました

AWS CLI もこの機能に追従しました。

詳細は次の URL をご確認ください。

Create Auto Scaling launch configurations that include encrypted EBS volumes

証明書バンドルを設定ファイル・コマンドラインから指定できるようになりました

証明書バンドルをカスタマイズしたい時、従来は環境変数 AWS_CA_BUNDLE でのみ指定可能でした。

今回のリリースに伴い、

  • 設定ファイル(~/.aws.config)
  • コマンドラインオプション(--ca-bundle)

でも指定できるようになりました。

プルリクエスト  : https://github.com/aws/aws-cli/pull/1379

$ aws configure set ca_bundle /usr/share/ssl/certs/ca-bundle.crt --profile hoge

のようにすると、~/.aws/config では

[profile hoge]
output = json
region = ap-northeast-1
ca_bundle = /etc/foo/bar/ca-bundle

というように項目 ca_bundle が追加されます。 もちろん、直接 ~/.aws/config ファイルを編集してもよいです。

証明書オプションはより上にあるものが優先されます。

  1. --no-verify-ssl(コマンドライン)
  2. --ca-bundle(コマンドライン)
  3. 環境変数(AWS_CA_BUNDLE)
  4. 設定ファイル(ca_bundle)

curl の --cacertCURL_CA_BUNDLE相当の機能です。

assume role で RoleSessionName を指定できるようになりました

AWS IAM には他アカウントに対してロールを介して一次的にAPI操作できる機能があります。

[target1] # 333344445555
role_arn = arn:aws:iam::333344445555:role/target1-role
source_profile = foo

のように ~/.aws/credentials ファイルにかくと foo アカウントから 333344445555 アカウントの target1-role ロールを操作できます。

AWS の API では

  • 相手のアカウント
  • ロール名
  • ロールセッション名

をキーに、一時クレデンシャルを払い出す仕様ですが、AWS CLI は内部的にロールセション名にタイムスタンプを使っていたため、RoleSessionName を予測出来ませんでした。

今回の改修で RoleSessionName を指定できるようになったため、CLI からの操作に対してサーバーサイドから細かく権限管理できるようになりました。

プルリクエスト https://github.com/aws/aws-cli/pull/1389

たとえば

"Effect": "Deny",
"NotPrincipal": {"AWS": [
  "arn:aws:sts::333344445555:assumed-role/target1-role/session1-role",
  "arn:aws:iam::333344445555:role/target1-role"
]}

というようなポリシーが適用されたリソースを CLI から操作するには

[target1] # 333344445555
role_arn = arn:aws:iam::333344445555:role/target1-role
source_profile = foo
role_session_name = session1-role

というように RoleSessionName を名乗らないといけません。

設定ファイル ~/.aws/credentials の role_session_name はオプション扱いのため、定義されていなければ、従来通りタイムスタンプが使われます。

バージョン表記が変わりました。

$ aws --version の結果や AWS CLI のリクエストヘッダーの User-Agent に botocore(AWS CLI の低レイヤーライブラリ) のバージョンも含まれるようになりました。

$ aws --version
aws-cli/1.9.0 Python/2.7.10 Darwin/14.5.0 botocore/1.3.0

AWS のサーバーサイドエンジニアはデバッグが少し楽になったのではないでしょうか?

プルリクエスト https://github.com/aws/aws-cli/pull/1554