AWS Cloud9 で AWS CLI の実行がエラーになったときの対処方法

2023.07.31

困っていた内容

AWS Cloud9 EC2 環境をプライベートサブネットに構築しました。
IDE 内のターミナルから AWS CLI を実行したところInvalidClientTokenIdAuthFailureというエラーが表示されます。AWS CLI を成功させる方法を教えてください。

なお、Cloud9 を使用する IAM ユーザーには AdministratorAccess を付与しています。

どう対応すればいいの?

IAM インスタンスプロファイルを利用した認証情報をご利用ください。

Cloud9 環境に認証情報を提供する方法は大きく3つあります。

  1. AWS managed temporary credentials(AMTC)の使用
  2. インスタンスプロファイルの使用
  3. アクセスキーの使用

Cloud9 EC2 環境では AMTC がデフォルトで選択されていますが、2023年7月時点の仕様として、プライベートサブネットに起動した Cloud9 EC2 環境では AWS サービスへのアクセスが許可されません。

そのため、残る方法で比較的安全なインスタンスプロファイルを使用した方法で、認証情報を Cloud9 環境に提供してください。

AWS Cloud9 での Identity and Access Management - AWS Cloud9

重要

現在、環境の EC2 インスタンスをプライベートサブネットに起動するのであれば、AWS マネージド一時認証情報を使用して、AWS エンティティ (IAM ユーザーなど) を代理してEC2 環境による AWSサービスへのアクセスを許可できません。

やってみた

Cloud9 の実体となる EC2 インスタンスに設定された IAM ロールに権限を追加します。 また、その後 AMTC を無効にします。

なお、AWS マネジメントコンソールから Cloud9 EC2 環境を作成した場合はAWSCloud9SSMAccessRoleが自動的に作成されるため、今回は該当ロールに権限を追加します。

AWS Systems Manager を使用して no-ingress EC2 インスタンスにアクセスする - AWS Cloud9

AWS Cloud9 コンソールを使って no-ingress EC2 インスタンスを作成する時に、サービスロール (AWSCloud9SSMAccessRole) とIAM インスタンスプロファイル (AWSCloud9SSMInstanceProfile) の両方がユーザーのため、自動的に作成されます。

IAM コンソール を開き、ロールからAWSCloud9SSMAccessRoleをクリックします。

「許可を追加」から「ポリシーをアタッチ」を選択します。

許可ポリシーから必要なポリシーを選択して、「許可を追加」をクリックします。
※今回はAdministratorAccessを選択します

IAM ロールが正常に更新されたことを確認します。

Cloud9 の AWS managed temporary credentials を無効にします。
右上の歯車をクリックします。

「AWS Settings」をクリックします。

「AWS managed temporary credentials」のトグルをクリックして、無効にします。

Cloud9 のターミナルからaws configureを実行し、リージョンを設定します。

$ aws configure
AWS Access Key ID [None]: (空欄のままEnterキーを押下)
AWS Secret Access Key [None]: (空欄のままEnterキーを押下)
Default region name [None]: ap-northeast-1
Default output format [None]:

AWS CLI のコマンドが成功することを確認します。

$ aws sts get-caller-identity
{
    "Account": "123456789012",
    "UserId": "AIDACKCEVSQ6C2EXAMPLE:i-1234567890abcdef0",
    "Arn": "arn:aws:sts::123456789012:assumed-role/AWSCloud9SSMAccessRole/i-1234567890abcdef0"
}
$

参考資料