AWS SDK 또는 CLI로 ListAccessKeys 사용하기

AWS SDK 또는 CLI로 ListAccessKeys 사용하기

다음 코드 예시는 ListAccessKeys을(를) 사용하는 방법을 보여줘요.

액션 예시는 더 큰 프로그램에서 발췌한 코드 조각이라, 실제 프로그램 컨텍스트 안에서 실행돼야 해요.

출처: 문서

본문

AWS CLI with Bash script

참고: GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예시를 찾아 실행·설정 방법을 배울 수 있어요.

###############################################################################
# function errecho
#
# This function outputs everything sent to it to STDERR (standard error output).
###############################################################################
function errecho()
{

  printf "%s\n" "$*" 1>&2
}

###############################################################################
# function iam_list_access_keys
#
# This function lists the access keys for the specified user.
#
# Parameters:
#       -u user_name -- The name of the IAM user.
#
# Returns:
#       access_key_ids
#     And:
#       0 - If successful.
#       1 - If it fails.
###############################################################################
function iam_list_access_keys()
{


  # bashsupport disable=BP5008
  function usage()
{

    echo "function iam_list_access_keys"
    echo "Lists the AWS Identity and Access Management (IAM) access key IDs for the specified user."
    echo "  -u user_name   The name of the IAM user."
    echo ""
  }

  local user_name response
  local option OPTARG # Required to use getopts command in a function.
  # Retrieve the calling parameters.
  while getopts "u:h" option; do
    case "$
{
option}" in
      u) user_name="$
{
OPTARG}" ;;
      h)
        usage
        return 0
        ;;
      \?)
        echo "Invalid parameter"
        usage
        return 1
        ;;
    esac
  done
  export OPTIND=1

  if [[ -z "$user_name" ]]; then
    errecho "ERROR: You must provide a username with the -u parameter."
    usage
    return 1
  fi

  response=$(aws iam list-access-keys \
    --user-name "$user_name" \
    --output text \
    --query 'AccessKeyMetadata[].AccessKeyId')

  local error_code=$
{
?}

  if [[ $error_code -ne 0 ]]; then
    aws_cli_error_log $error_code
    errecho "ERROR: AWS reports list-access-keys operation failed.$response"
    return 1
  fi

  echo "$response"

  return 0
}

API 상세 내용은 AWS CLI Command Reference의 ListAccessKeys 문서를 참고하세요.

SDK for C++

참고: GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예시를 찾아 실행·설정 방법을 배울 수 있어요.

bool AwsDoc::IAM::listAccessKeys(const Aws::String &userName,
                                 const Aws::Client::ClientConfiguration &clientConfig)
{

    Aws::IAM::IAMClient iam(clientConfig);
    Aws::IAM::Model::ListAccessKeysRequest request;
    request.SetUserName(userName);

    bool done = false;
    bool header = false;
    while (!done)
{

        auto outcome = iam.ListAccessKeys(request);
        if (!outcome.IsSuccess())
{

            std::cerr << "Failed to list access keys for user " << userName
                      << ": " << outcome.GetError().GetMessage() << std::endl;
            return false;
        }

        if (!header)
{

            std::cout << std::left << std::setw(32) << "UserName" <<
                      std::setw(30) << "KeyID" << std::setw(20) << "Status" <<
                      std::setw(20) << "CreateDate" << std::endl;
            header = true;
        }

        const auto &keys = outcome.GetResult().GetAccessKeyMetadata();
        const Aws::String DATE_FORMAT = "%Y-%m-%d";

        for (const auto &key: keys)
{

            Aws::String statusString =
                    Aws::IAM::Model::StatusTypeMapper::GetNameForStatusType(
                            key.GetStatus());
            std::cout << std::left << std::setw(32) << key.GetUserName() <<
                      std::setw(30) << key.GetAccessKeyId() << std::setw(20) <<
                      statusString << std::setw(20) <<
                      key.GetCreateDate().ToGmtString(DATE_FORMAT.c_str()) << std::endl;
        }

        if (outcome.GetResult().GetIsTruncated())
{

            request.SetMarker(outcome.GetResult().GetMarker());
        }
        else
{

            done = true;
        }
    }

    return true;
}

API 상세 내용은 AWS SDK for C++ API Reference의 ListAccessKeys 문서를 참고하세요.

AWS CLI

IAM 사용자의 액세스 키 ID를 나열하려면

다음 list-access-keys 명령은 Bob IAM 사용자의 액세스 키 ID를 나열해요.

aws iam list-access-keys \
    --user-name
Bob

출력:

{

    "AccessKeyMetadata": [

{

            "UserName": "Bob",
            "Status": "Active",
            "CreateDate": "2013-06-04T18:17:34Z",
            "AccessKeyId": "AKIAIOSFODNN7EXAMPLE"
        },

{

            "UserName": "Bob",
            "Status": "Inactive",
            "CreateDate": "2013-06-06T20:42:26Z",
            "AccessKeyId": "AKIAI44QH8DHBEXAMPLE"
        }
    ]
}

IAM 사용자의 비밀 액세스 키는 나열할 수 없어요. 비밀 액세스 키를 잃어버리면 create-access-keys 명령으로 새 액세스 키를 만들어야 해요.

더 자세한 내용은 AWS IAM 사용자 가이드의 'IAM 사용자의 액세스 키 관리' 문서를 참고하세요.

API 상세 내용은 AWS CLI Command Reference의 ListAccessKeys 문서를 참고하세요.

SDK for Go V2

참고: GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예시를 찾아 실행·설정 방법을 배울 수 있어요.

import (
	"context"
	"encoding/json"
	"errors"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/iam"
	"github.com/aws/aws-sdk-go-v2/service/iam/types"
	"github.com/aws/smithy-go"
)

// UserWrapper encapsulates user actions used in the examples.
// It contains an IAM service client that is used to perform user actions.
type UserWrapper struct
{

	IamClient *iam.Client
}



// ListAccessKeys lists the access keys for the specified user.
func (wrapper UserWrapper) ListAccessKeys(ctx context.Context, userName string) ([]types.AccessKeyMetadata, error)
{

	var keys []types.AccessKeyMetadata
	result, err := wrapper.IamClient.ListAccessKeys(ctx, &iam.ListAccessKeysInput
{

		UserName: aws.String(userName),
	})
	if err != nil
{

		log.Printf("Couldn't list access keys for user %v. Here's why: %v\n", userName, err)
	} else
{

		keys = result.AccessKeyMetadata
	}
	return keys, err
}

API 상세 내용은 AWS SDK for Go API Reference의 ListAccessKeys 문서를 참고하세요.

SDK for Java 2.x

참고: GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예시를 찾아 실행·설정 방법을 배울 수 있어요.

import software.amazon.awssdk.services.iam.model.AccessKeyMetadata;
import software.amazon.awssdk.services.iam.model.IamException;
import software.amazon.awssdk.services.iam.model.ListAccessKeysRequest;
import software.amazon.awssdk.services.iam.model.ListAccessKeysResponse;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.iam.IamClient;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class ListAccessKeys
{

    public static void main(String[] args)
{

        final String usage = """

                Usage:
                    <userName>\s

                Where:
                    userName - The name of the user for which access keys are retrieved.\s
                """;

        if (args.length != 1)
{

            System.out.println(usage);
            System.exit(1);
        }

        String userName = args[0];
        Region region = Region.AWS_GLOBAL;
        IamClient iam = IamClient.builder()
                .region(region)
                .build();

        listKeys(iam, userName);
        System.out.println("Done");
        iam.close();
    }

    public static void listKeys(IamClient iam, String userName)
{

        try
{

            boolean done = false;
            String newMarker = null;

            while (!done)
{

                ListAccessKeysResponse response;

                if (newMarker == null)
{

                    ListAccessKeysRequest request = ListAccessKeysRequest.builder()
                            .userName(userName)
                            .build();

                    response = iam.listAccessKeys(request);

                } else
{

                    ListAccessKeysRequest request = ListAccessKeysRequest.builder()
                            .userName(userName)
                            .marker(newMarker)
                            .build();

                    response = iam.listAccessKeys(request);
                }

                for (AccessKeyMetadata metadata : response.accessKeyMetadata())
{

                    System.out.format("Retrieved access key %s", metadata.accessKeyId());
                }

                if (!response.isTruncated())
{

                    done = true;
                } else
{

                    newMarker = response.marker();
                }
            }

        } catch (IamException e)
{

            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}

API 상세 내용은 AWS SDK for Java 2.x API Reference의 ListAccessKeys 문서를 참고하세요.

SDK for JavaScript (v3)

참고: GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예시를 찾아 실행·설정 방법을 배울 수 있어요.

액세스 키를 나열해요.

import
{
 ListAccessKeysCommand, IAMClient } from "@aws-sdk/client-iam";

const client = new IAMClient(
{
});

/**
 * A generator function that handles paginated results.
 * The AWS SDK for JavaScript (v3) provides
{
@link https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/index.html#paginators | paginator} functions to simplify this.
 *
 * @param
{
string} userName
 */
export async function* listAccessKeys(userName)
{

  const command = new ListAccessKeysCommand(
{

    MaxItems: 5,
    UserName: userName,
  });

  /**
   * @type
{
import("@aws-sdk/client-iam").ListAccessKeysCommandOutput | undefined}
   */
  let response = await client.send(command);

  while (response?.AccessKeyMetadata?.length)
{

    for (const key of response.AccessKeyMetadata)
{

      yield key;
    }

    if (response.IsTruncated)
{

      response = await client.send(
        new ListAccessKeysCommand(
{

          Marker: response.Marker,
        }),
      );
    } else
{

      break;
    }
  }
}

더 자세한 내용은 AWS SDK for JavaScript 개발자 가이드를 참고하세요.

API 상세 내용은 AWS SDK for JavaScript API Reference의 ListAccessKeys 문서를 참고하세요.

SDK for JavaScript (v2)

참고: GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예시를 찾아 실행·설정 방법을 배울 수 있어요.

// Load the AWS SDK for Node.js
var AWS = require("aws-sdk");
// Set the region
AWS.config.update(
{
 region: "REGION" });

// Create the IAM service object
var iam = new AWS.IAM(
{
 apiVersion: "2010-05-08" });

var params =
{

  MaxItems: 5,
  UserName: "IAM_USER_NAME",
};

iam.listAccessKeys(params, function (err, data)
{

  if (err)
{

    console.log("Error", err);
  } else
{

    console.log("Success", data);
  }
});

더 자세한 내용은 AWS SDK for JavaScript 개발자 가이드를 참고하세요.

API 상세 내용은 AWS SDK for JavaScript API Reference의 ListAccessKeys 문서를 참고하세요.

SDK for Kotlin

참고: GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예시를 찾아 실행·설정 방법을 배울 수 있어요.

suspend fun listKeys(userNameVal: String?)
{

    val request =
        ListAccessKeysRequest
{

            userName = userNameVal
        }
    IamClient.fromEnvironment
{
 region = "AWS_GLOBAL" }.use
{
 iamClient ->
        val response = iamClient.listAccessKeys(request)
        response.accessKeyMetadata?.forEach
{
 md ->
            println("Retrieved access key $
{
md.accessKeyId}")
        }
    }
}

API 상세 내용은 AWS SDK for Kotlin API reference의 ListAccessKeys 문서를 참고하세요.

Tools for PowerShell V4

예시 1: 이 명령은 Bob IAM 사용자의 액세스 키를 나열해요. IAM 사용자의 비밀 액세스 키는 나열할 수 없다는 점을 참고하세요. 비밀 액세스 키를 잃어버렸다면 New-IAMAccessKey cmdlet으로 새 액세스 키를 만들어야 해요.

Get-IAMAccessKey -UserName "Bob"

출력:

AccessKeyId                CreateDate                   Status              UserName
-----------                ----------                   ------              --------
AKIAIOSFODNN7EXAMPLE       12/3/2014 10:53:41 AM        Active              Bob
AKIAI44QH8DHBEXAMPLE       6/6/2013 8:42:26 PM          Inactive            Bob

API 상세 내용은 AWS Tools for PowerShell Cmdlet Reference (V4)의 ListAccessKeys 문서를 참고하세요.

Tools for PowerShell V5

예시 1: 이 명령은 Bob IAM 사용자의 액세스 키를 나열해요. IAM 사용자의 비밀 액세스 키는 나열할 수 없다는 점을 참고하세요. 비밀 액세스 키를 잃어버렸다면 New-IAMAccessKey cmdlet으로 새 액세스 키를 만들어야 해요.

Get-IAMAccessKey -UserName "Bob"

출력:

AccessKeyId                CreateDate                   Status              UserName
-----------                ----------                   ------              --------
AKIAIOSFODNN7EXAMPLE       12/3/2014 10:53:41 AM        Active              Bob
AKIAI44QH8DHBEXAMPLE       6/6/2013 8:42:26 PM          Inactive            Bob

API 상세 내용은 AWS Tools for PowerShell Cmdlet Reference (V5)의 ListAccessKeys 문서를 참고하세요.

SDK for Python (Boto3)

참고: GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예시를 찾아 실행·설정 방법을 배울 수 있어요.

def list_keys(user_name):
    """
    Lists the keys owned by the specified user.

    :param user_name: The name of the user.
    :return: The list of keys owned by the user.
    """
    try:
        keys = list(iam.User(user_name).access_keys.all())
        logger.info("Got %s access keys for %s.", len(keys), user_name)
    except ClientError:
        logger.exception("Couldn't get access keys for %s.", user_name)
        raise
    else:
        return keys

API 상세 내용은 AWS SDK for Python (Boto3) API Reference의 ListAccessKeys 문서를 참고하세요.

SDK for Ruby

참고: GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예시를 찾아 실행·설정 방법을 배울 수 있어요.

이 예시 모듈은 액세스 키를 나열·생성·비활성화·삭제해요.

# Manages access keys for IAM users
class AccessKeyManager
  def initialize(iam_client, logger: Logger.new($stdout))
    @iam_client = iam_client
    @logger = logger
    @logger.progname = 'AccessKeyManager'
  end

  # Lists access keys for a user
  #
  # @param user_name [String] The name of the user.
  def list_access_keys(user_name)
    response = @iam_client.list_access_keys(user_name: user_name)
    if response.access_key_metadata.empty?
      @logger.info("No access keys found for user '#
{
user_name}'.")
    else
      response.access_key_metadata.map(&:access_key_id)
    end
  rescue Aws::IAM::Errors::NoSuchEntity
    @logger.error("Error listing access keys: cannot find user '#
{
user_name}'.")
    []
  rescue StandardError => e
    @logger.error("Error listing access keys: #
{
e.message}")
    []
  end

  # Creates an access key for a user
  #
  # @param user_name [String] The name of the user.
  # @return [Boolean]
  def create_access_key(user_name)
    response = @iam_client.create_access_key(user_name: user_name)
    access_key = response.access_key
    @logger.info("Access key created for user '#
{
user_name}': #
{
access_key.access_key_id}")
    access_key
  rescue Aws::IAM::Errors::LimitExceeded
    @logger.error('Error creating access key: limit exceeded. Cannot create more.')
    nil
  rescue StandardError => e
    @logger.error("Error creating access key: #
{
e.message}")
    nil
  end

  # Deactivates an access key
  #
  # @param user_name [String] The name of the user.
  # @param access_key_id [String] The ID for the access key.
  # @return [Boolean]
  def deactivate_access_key(user_name, access_key_id)
    @iam_client.update_access_key(
      user_name: user_name,
      access_key_id: access_key_id,
      status: 'Inactive'
    )
    true
  rescue StandardError => e
    @logger.error("Error deactivating access key: #
{
e.message}")
    false
  end

  # Deletes an access key
  #
  # @param user_name [String] The name of the user.
  # @param access_key_id [String] The ID for the access key.
  # @return [Boolean]
  def delete_access_key(user_name, access_key_id)
    @iam_client.delete_access_key(
      user_name: user_name,
      access_key_id: access_key_id
    )
    true
  rescue StandardError => e
    @logger.error("Error deleting access key: #
{
e.message}")
    false
  end
end

API 상세 내용은 AWS SDK for Ruby API Reference의 ListAccessKeys 문서를 참고하세요.

SDK for SAP ABAP

참고: GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예시를 찾아 실행·설정 방법을 배울 수 있어요.

    TRY.
        oo_result = lo_iam->listaccesskeys(
          iv_username = iv_user_name ).
        MESSAGE 'Retrieved access key list.' TYPE 'I'.
      CATCH /aws1/cx_iamnosuchentityex.
        MESSAGE 'User does not exist.' TYPE 'E'.
    ENDTRY.

API 상세 내용은 AWS SDK for SAP ABAP API reference의 ListAccessKeys 문서를 참고하세요.

더 알아보기 (Learn more)