AWSの長いIDを適用するための新旧APIについて

2016.07.15

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

こんにちは、虎塚です。

次の記事のとおり、EC2インスタンスやEBSボリュームなどの長いIDを、IAM User、IAM Roleなどの単位で適用するためのAPIが新しく公開されました。

この記事は、上の記事の補足として、関連APIを使用する際の注意点をお伝えします。

長いIDの適用に関するAPI

長いIDの適用に関するAPIは、新旧2種類あります。AWS APIとAWS CLIのコマンドを次の表に示します。

新旧 AWS API AWS CLI command
DescribeIdFormat describe-id-format
ModifyIdFormat modify-id-format
DescribeIdentityIdFormat describe-identity-id-format
ModifyIdentityIdFormat modify-identity-id-format

下の2つが、今回のアップデートで追加されたAPIです。これらのAPIを使用する上での注意は、次のとおりです。

  1. なるべく新しいDescribeIdentityIdFormatとModifyIdentityIdFormatを使いましょう
  2. 以前からあるDescribeIdFormatとModifyIdFormatは、必要に応じて、IAM Policyで使用制限をかけましょう

それぞれについて説明します。

新しいAPIを使う理由

新しいAPIでは、長いIDを適用する対象のIAM User、IAM Roleを、明示的に指定するようになりました。以前からあるAPIでは、「長いIDを適用する」という効果が、APIの使用者に対して適用されていました。

後者は少しわかりづらいのではないかと思います。

また、以前からあるAPI (DescribeIdFormat, ModifyIdFormat) の挙動は、よくある質問 - Amazon EC2にあるとおり、バージョンによって異なります。

注: Amazon EC2 API の 2015-10-01 のバージョンで、IAM ロールの認証情報を使用して describe-id-format または modify-id-format を呼び出す場合、結果は AWS アカウント全体に適用され、特定の IAM ロールには適用されません。現行バージョンの Amazon EC2 API では、結果は正常に IAM ロールにのみ適用されます。

AWS CLIのバージョン

現時点の最新バージョンのAWS CLIを使用すれば問題ありません。次のバージョン以降なら大丈夫でしょう。

  • aws-cli/1.10.47 Python/2.7.10 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.4.37

注意

AWS Management Consoleから現在デフォルトで起動できるAmazon Linux (Amazon Linux AMI 2016.03.3 (HVM)) には、次のバージョンのAWS CLIがインストールされています。

  • aws-cli/1.10.33 Python/2.7.10 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.4.23

このバージョンのAWS CLIには、まだ新しいAPIを使用したコマンド (describe-identity-id-format, modify-identity-id-format) が入っていません。また、以前からあるコマンド (describe-id-format、modify-id-format) が、アカウント内全体に影響を及ぼす旧来の挙動をします。

長いIDを適用する時は、まずAWS CLIをアップデートしてからにしましょう。

新APIと以前からあるAPIの振る舞いの違い

長いIDを適用するための4つのAPIを、AWS CLI経由で実行して、違いを確認しました。確認方法は、次のとおりです。

  • AWS CLIのバージョン
    • aws-cli/1.10.47 Python/2.7.10 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.4.37
  • AWS CLIを実行する主体
    • 単一のAWSアカウント内に、IAM User 2つ (A, B) と、IAM Role 2つ (A, B) を用意
  • AWS CLIの実行方法
    • ローカルマシンのターミナルから、IAM User (A)、IAM User (B) それぞれの鍵を使用して、AWS CLIを実行
    • IAM Role (A) と IAM Role (B) をそれぞれ関連付けたEC2インスタンスを2台起動し、内部からAWS CLIを実行

操作ユーザでmodify系のコマンドを実行した後に、describe系のコマンドを実行し、変更が反映されたかどうかをまとめました。反映されているものは◯、反映されないものは×、調査省略は-です。

describe-id-format describe-identity-id-format
- 操作ユーザ IAM User (A) IAM User (B) IAM Role (A) IAM Role (B) IAM User (A) IAM User (B) IAM Role (A) IAM Role (B)
modify-id-format IAM User (A) × × - × × -
IAM Role (A) × - ◯ or × (※) × - ×
modify-identity-id-format IAM User (A) × × - × × -
IAM Role (A) × - × × - ×

「※」が、APIのバージョンによって挙動が異なる部分です。IAM Role (A)が、最新のAWS CLIで「modify-id-format」変更を実行した時には、IAM Role (B)には影響を与えません。古いバージョンのAWS CLIで「modify-id-format」実行すると、アカウント内のIAM Roleすべてに影響を及ぼします(IAM Userには影響しません)。

以前からあるAPIの使用を制限する

上記のように、ModifyIdFormatとDescribeIdFormatを古いAWS CLI経由で実行してしまうと、意図せず広い範囲に影響を及ぼしてしまいます。

一般的に、権限管理の操作を制限するためにIAM APIの利用を制限している環境が多いかと思いますが、ModifyIdFormatとDescribeIdFormatはEC2 APIのため、ノーガードの場合があるかもしれません。

安全のために、次のIAM PolicyをIAM UserまたはIAM Roleに追加するのがおすすめです。特に、ひとつのAWSアカウントで複数のシステムを動かしていて、利用者がたくさんいる場合は、気をつけてください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ec2:ModifyIdFormat", "ec2:DescribeIdFormat"
      ],
      "Resource": "*"
    }
  ]
}

IAM UserやIAM RoleなどのARNを指定せずに長いIDの適用可否を変更することは、これでできなくなります。

おわりに

今回追加されたAPIだけを最初から出してほしかった気がしますが、ユーザのフィードバックを受けて実装されたのかもしれませんね。これから使うぶんには、新しいAPIを選びましょう。

それでは、また。