【小ネタ】 AWS GetCallerIdentity:権限不要APIの特徴と活用方法

【小ネタ】 AWS GetCallerIdentity:権限不要APIの特徴と活用方法

Clock Icon2025.02.21

概要

クラウド事業本部の梶原@福岡です。最小限のポリシーを付与したくて、このAPIにたどりついたのですが、わりと奥が深かったのでまとめました。
本記事では、AWS Security Token Service(STS)のGetCallerIdentity APIの特徴とその活用方法について解説します。このAPIは権限設定が不要で、IAMポリシーに明示的なDeny設定があっても実行できるという特異な性質を持ち、AWS環境でのさまざまなシーンで使えます。

GetCallerIdentityの特徴

APIの基本仕様

GetCallerIdentityは、呼び出し元のIAMエンティティに関する以下の情報を返します:

$ aws sts get-caller-identity
{
    "UserId": "AIDAXXXXXXXXXXXXXXXXX",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/test-user"
}
  • UserId: IAMユーザーまたはロールの一意な識別子
  • Account: AWSアカウントID
  • Arn: IAMユーザーまたはロールのAmazon Resource Name(ARN)

特殊な性質

  • 権限設定が不要: 特別なIAMポリシーを付与しなくても実行可能
  • Denyポリシーでも動作: 明示的に拒否するポリシーが設定されていても呼び出しが成功する

実践的なユースケース

1. IAMユーザー作成時の初期設定検証

AWS CLIで認証情報を設定した後、正しく動作するかを確認する際に利用します。アクセスキーやシークレットキー、環境変数の設定ミスを検出できます。

# 認証情報の設定
$ aws configure
AWS Access Key ID [None]: AKIAXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json

# 設定の確認
$ aws sts get-caller-identity

2. IAMポリシーの初期設定

最小限のポリシーとして以下のように記述でき、ポリシー構造の雛形や将来の権限拡張の基盤として活用できます:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:GetCallerIdentity",
            "Resource": "*"
        }
    ]
}

なにも、宣言しなくてもできる権限のなので、実質的な権限は付与されません。
なお、Allow じゃなくて、Denyでも実行できます。(まじか

3. 環境別の認証情報検証

複数のAWSプロファイルを使い分ける場合、意図した環境で動作しているかを確認できます。

$ aws sts get-caller-identity --profile production
{
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:role/ProductionRole"
}

4. CI/CD環境での実行検証

デプロイ前の環境チェックや意図しないアカウントでの実行防止に使用できます。

#!/bin/bash
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
if [ "$ACCOUNT_ID" != "123456789012" ]; then
    echo "Error: Incorrect AWS account"
    exit 1
fi

5. 一時的なセキュリティ認証情報の確認

AssumeRoleやMFAを利用した一時的な認証情報の有効性を確認できます。

$ aws sts get-caller-identity
{
    "UserId": "AROAXXXXXXXXXXXXXXXXX:session-name",
    "Account": "123456789012",
    "Arn": "arn:aws:sts::123456789012:assumed-role/role-name/session-name"
}

まとめ

GetCallerIdentityは、その特殊な性質により、AWS環境での認証情報検証や環境管理において重要な役割を果たします。権限設定やセキュリティ管理の基盤として、さまざまなシーンで活用可能です。

参考情報

https://docs.aws.amazon.com/ja_jp/STS/latest/APIReference/API_GetCallerIdentity.html

https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html

https://log.noid11.com/posts/no-need-permission-sts-get-caller-identity/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.