BioErrorLog Tech Blog

試行錯誤の記録

Private SubnetのCloud9からAWS APIが叩けない問題 | AWS managed temporary credentials

AWS managed temporary credentialsを使うと、Private Subnetに構築したCloud9からAWS APIが叩けない、ということの備忘録です。

はじめに

Private Subnetに構築したCloud9からAWS APIが叩けない、という事象に遭遇しました。

この現象の裏にこれまで知らなかった仕様があったので、備忘録にまとめます。

Private SubnetのCloud9からAWS APIが叩けない問題

起きた現象

まずは起きたことを整理します。

Private SubnetにCloud9を構築しました。

※ Private SubnetにCloud9を構築するやり方は別途記事参照:

www.bioerrorlog.work

そしてこのCloud9から適当なAWS APIを叩くと、権限エラーInvalidClientTokenIdが発生します。

$ aws sts get-caller-identity
An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid

この時の条件は、

  • Cloud9の権限はAWS managed temporary credentialsで付与 (デフォルト)
  • 操作ユーザーの権限は、AWSへのフルアクセス可能なAdmin権限

です。

AWS managed temporary credentialsによってAdmin権限がCloud9に渡るので、上記のようなAPI callは成功する想定でした。

※ AWS managed temporary credentialsによって実行できるActionには元々制限がありますが、今回取り上げているのはAWS managed temporary credentialsでも実行できるはずのActionが実行できない、というケースです。

なぜAWS APIが叩けないのか

「Private Subnetに構築されたCloud9からは、AWS managed temporary credentialsによってAWSサービスにアクセスできないから」です。

これは現在ドキュメントに明記された仕様です。

Currently, if your environment’s EC2 instance is launched into a private subnet, you can't use AWS managed temporary credentials to allow the EC2 environment to access an AWS service on behalf of an AWS entity (for example, an IAM user).

Ref. Identity and access management in AWS Cloud9 - AWS Cloud9

訳:「現在、EC2インスタンスがprivate subnetに起動されている場合、AWS managed temporary credentialsを使ってAWSエンティティ(例: IAMユーザー)の代理としてAWSサービスにアクセスすることはできません。」

ということで、現時点ではprivate subnetでAWS managed temporary credentialsを使うことはできません。

対処法

AWS managed temporary credentialsではなくIAM Roleを使ってCloud9に権限を付与することで、private subnetのCloud9からAWS API呼び出しが可能です。

手順:

  1. Cloud9のEC2にIAM Roleをアタッチする
  2. Cloud9のAWS managed temporary credentialsを無効化する

AWS managed temporary credentialsを無効化は、Cloud9内の設定画面から可能です:

AWS managed temporary credentialsの無効化方法 | 画像はAWS workshopより引用

おわりに

以上、Private SubnetのCloud9からAWS APIが叩けない問題について整理しました。

知らない現象だったので少し戸惑いましたが、ドキュメントに明記された仕様なので仕方ないですね。

どなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Identity and access management in AWS Cloud9 - AWS Cloud9

VPC settings for AWS Cloud9 Development Environments - AWS Cloud9

Calling AWS services from an environment in AWS Cloud9 - AWS Cloud9

Identity and access management in AWS Cloud9 - AWS Cloud9

sts get-caller-identity doesn't work on Cloud9 instance deployed in Private Subnet | AWS re:Post

d. Temporary credentials on Cloud9 :: AWS HPC Workshops