[アップデート] 別アカウントから共有されたプライベート AMI を共有された側でオプトアウトできるようになりました

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

コンバンハ、千葉(幸)です。

共有された AMI を、「共有された側」のアカウントの操作で解除できるようになりました。

もう使わないけどコンソールに残り続けている「共有された AMI」を一掃できるチャンスです。

何ができるようになったのか

AMI にはアカウントを跨いで共有できる機能があります。「共有される側」での承諾のステップはなく、「共有する側」の操作のみで共有できます。そしてこれまでは「共有した側」でのみ共有の解除が可能でした。

それによって困ることといえば、「共有された側では不要だけどコンソール等で見え続ける」というものがあります。

昔に必要だった共有 AMI が不要になった後も残り続けたり、さらには「共有する側」が共有先を間違って関係ないアカウントに共有してしまったりというケースもあるかも知れません。

それによって、インスタンスの起動時など AMI を選択する際に不要なものまで候補に出てきてしまうのは嬉しくないです。コンソールだけでなく、AWS CLI 等でプログラムアクセスする際にも邪魔になるでしょう。

今回のアップデートにより「共有された側」で自身への共有を解除できるようになりました。

あくまで解除できるのは自身への共有だけで、他のアカウントへの共有には影響を与えません。もちろん本体の AMI に影響が出るわけでもありません。

共有された AMI の解除に関する注意事項まとめ

  • 直接アカウントに共有されたプライベート AMI のみが対象であり、以下は対象外
    • Organizations もしくは Organizations OU に共有された AMI
    • パブリック AMI
  • AMI の共有を拒否できるものではなく、解除したあとにも再度共有できる
  • 2022年 11 月現在 マネジメントコンソールでは共有解除の操作は対応していない

詳細は以下を参照してください。

共有された側での AMI の共有解除をやってみた

早速やってみます。

AMI を共有し、それを共有された側から解除します。

AMI を共有する[共有する側]

「共有する側」のアカウントでの操作です。

AMI を選択し、「許可」タブ(下記画像には写っていませんが、、)から「AMI 許可を編集」を押下します。(「アクション」からでも同じことができます。)

AMI_share_EC2_Management_Console

AMI 許可の編集画面に遷移するため、共有先のアカウントのアカウント ID(番号)を追加し、変更を保存します。

AMI_share_EC2_Management_Console_permission

変更が保存されると、「許可」タブで共有先のアカウントが確認できます。

AMI_share_EC2_Management_Console-7622831

共有された AMI の共有を解除する[共有された側]

ここからは「共有された側」での操作です。AMI の「プライベートイメージ」で、共有された AMI を確認できます。

AMI_Share_ami_user_EC2_Management_Console

ちなみに「アクション」から共有解除できたりはしません。コンソールから解除できるようになるアップデートを期待しましょう。

AMI_share_action_EC2_Management_Console

AWS CLI で操作していきます。2022/11/7 現在では AWS CLI v1 でのみ共有解除に対応しています。

今回は、以下エントリを参考に CloudShell に CLI v1 をセットアップしました。

sudo pip3 uninstall -y awsebcli && sudo pip3 install --upgrade awscli

現時点で最新の 1.27.3 になりました。

[cloudshell-user@ip-10-0-178-3 ~]$ aws --version
aws-cli/1.27.3 Python/3.7.10 Linux/4.14.294-220.533.amzn2.x86_64 exec-env/CloudShell botocore/1.29.3

以下コマンドを実行すると、trueとだけ返ってきます。

[cloudshell-user@ip-10-0-178-3 ~]$ aws ec2 cancel-image-launch-permission --image-id ami-08f2525dea9622a25
{
    "Return": true
}

コンソールに戻って確認すると、共有された AMI の共有が解除され、何も表示されなくなりました。

AMI_shore_optput_EC2_Management_Console

やったね!

ちなみに:アップデート直後は API の準備が間に合っていなかった?

アップデートの案内を確認してすぐ 2022/11/05 に同様の操作を試していたのですが、その時はエラーが発生していました。バージョンはいまと同じ 1.27.3 を使用しています。

[cloudshell-user@ip-10-0-144-154 ~]$ aws --version
aws-cli/1.27.3 Python/3.7.10 Linux/4.14.294-220.533.amzn2.x86_64 exec-env/CloudShell botocore/1.29.3
[cloudshell-user@ip-10-0-144-154 ~]$ aws ec2 cancel-image-launch-permission --image-id ami-08f2525dea9622a25
An error occurred (InvalidAction) when calling the CancelImageLaunchPermission operation: The action CancelImageLaunchPermission is not valid for this web service.

日本時間で 11/7 の日中くらいまでは同じ状況だったと記憶しています。特に何も変えずコマンドが成功するようになったので、API 側(という表現が正しいか分かりませんが)の準備が間に合っていなかったのかな?などと妄想しています。

The action xxx is not valid for this web service.というエラーでググると自分で指定する API のバージョンが古い、といった事例が見つかりましたが、AWS CLI でのエラーは初めて見ました。

こういうこともある、と頭の片隅に入れとくと役に立つかも知れません。

終わりに

AMI の共有を、共有された側からオプトアウトできるというアップデートでした。

まさに社内で「もう使わないけど共有してくれた人に連絡が取れないので共有されたまま」になっている AMI があったので、早速オプトアウトを試してみたいと思います。いざできるようになると、なぜ今までできなかったんだ……?というのが不思議なくらいですね。

マネジメントコンソールからオプトアウトできるようになるのも期待したいところです。(気軽にできるとうっかり必要なものまでオプトアウトする可能性があるのであえてワンクッション挟んでいる、という事情があるのかも知れませんが。。)

以上、 チバユキ (@batchicchi) がお送りしました。

参考