どこのシステムでも、保守用のユーザー管理は頭を悩ますところです。LDAPやActiveDirectoryはよく聞くものの、どうも導入に敷居が高い・・・
かといって、データベースやWebサーバー、システムなどなど、それぞれにユーザー体系を作って個別管理して・・・、とするのも面倒です。これでは1人の保守要員を追加するたびに、一体何ヶ所にユーザー登録しなければいけないのか!となりますよね。
AWSの場合、そういった悩みを解決してくれるサービスがあります。それが今回解説するAWS Identity and Access Management (IAM)なのです!
逆に言えば、IAMをマスターしないと各種サービスを使いこなせません。よって今回の解説をじっくり読んで、ぜひ理解を深めてください。
目次
AWS Identity and Access Management (IAM) とは
改めてIAMとは何なのか、概要を解説します。
IAMとは、AWSの各種サービスに対するユーザー権限を管理するサービスです。IAM自体で何かをするわけではありません。一番最初にAWSに加入するときは、メールアドレスとパスワードを設定します。複数人でサービスを共有するときはそれだけで問題ありませんが、複数人数でリソースを共有・参照するとなれば、そうはいきません。
IAMでは、一番最初にメールアドレスとパスワードで登録するユーザーをルートユーザーといいます。AWSは、なんらかの作業をするときはたとえそれが管理者の作業であったとしてもIAMで作ったユーザーを使い、ルートユーザーは最初のIAMユーザーを作るためだけにとどめる、という使い方を推奨しています。

IAMの機能・できること
IAMを使えば、他人にAWSの各種リソースにアクセスする権限を、アクセスキーやパスワードを共有しなくても付与できます。実際にやってみますので、イメージをつかんでください。
まず最初に、ユーザーの所属するグループを作成します。同時に、そのグループに所属すると何ができるのかを設定します。それをポリシーのアタッチといいます。ちなみに以下は、EC2に対するフルアクセスをアタッチしようとしているところです。

次に、グループ内にユーザーを作ります。

もう一度グループの参照画面に戻ると・・・

できてますね。所要時間は5分程度で終わりました!
ユーザー作成が終わると、以下のようなURLが付与されます。
https://(アカウント).signin.aws.amazon.com/console
追加したユーザーは、以降このアドレスからAWSマネジメントコンソールへログインすることになります。
IAMが活躍するシーン
何といってもAWSの各種リソースへのアクセスを一括管理できるのは、とても大きなメリットです。各種リソースごとにユーザー権限を付与する必要はありません。
ユーザーは特に人である必要はありません。例えば、EC2インスタンスに構築したWebアプリシステムから、S3のバケットやRDSへアクセスできるようEC2インスタンスに権限を付与することもできます。
料金
IAMそのものに料金はかかりません!先ほど見ていただいたように、簡単にユーザーが追加できるのに無料とはうれしい限りです。
IAMへのアクセス方法
IAMを使ってAWSへアクセスする方法を解説します。
AWS マネジメントコンソール
ルートユーザーでログインしているときに、マネジメントコンソールの「AWSにようこそ」→「アカウント」と進んでください。ここで自分のアカウントIDが参照できます。これをコピーしておきましょう。
次に一度サインアウトします。

「別のアカウントにサインインする」を選択してください。

ここで先ほどコピーしたアカウントIDを入れて、次に進んで追加したIDとパスワードを入れてログインできます。
AWS コマンドラインツール
AWSのコマンドラインツール、AWS CLIからもアクセスできます。ユーザーの追加や削除などといった、マネジメントコンソールからできることはほとんど可能です。試しに、グループの詳細表示をしてみましょう。
>aws iam get-group --group-name (グループ名)
{
"Group": {
"Path": "/",
"CreateDate": "2018-03-06T13:22:09Z",
"GroupId": "AGPAJT***************",
"Arn": "arn:aws:iam::************:group/PotepanGroup",
"GroupName": "PotepanGroup"
},
"Users": [
{
"UserName": "potepan_user",
"PasswordLastUsed": "2018-03-06T13:38:45Z",
"CreateDate": "2018-03-06T13:27:42Z",
"UserId": "AIDAJQ***************",
"Path": "/",
"Arn": "arn:aws:iam::************:user/potepan_user"
}
]
}
お分かりでしょうか。JSON形式で返ってきましたね。その他各種操作ができますので、興味のある方はこちらをご覧ください。
AWS SDK
AWS SDKから、各種操作が可能です。ユーザー追加や削除も可能です。雰囲気をつかんでいただくために、アカウントが最後にログインしたのはいつかを取得するJavaのソースを載せておきます。
こちらはAWSが公開しているGitHubから引用しました。長くなるので冒頭のimport文は省略しています。
public class AccessKeyLastUsed {
public static void main(String[] args) {
final String USAGE =
"To run this example, supply an access key id\n" +
"Ex: AccessKeyLastUsed <access-key-id>\n";
if (args.length != 1) {
System.out.println(USAGE);
System.exit(1);
}
String access_id = args[0];
final AmazonIdentityManagement iam =
AmazonIdentityManagementClientBuilder.defaultClient();
GetAccessKeyLastUsedRequest request = new GetAccessKeyLastUsedRequest()
.withAccessKeyId(access_id);
GetAccessKeyLastUsedResult response = iam.getAccessKeyLastUsed(request);
System.out.println("Access key was last used at: " +
response.getAccessKeyLastUsed().getLastUsedDate());
}
}
雰囲気をお分かりいただけたでしょうか?もちろんJavaだけではなく、Python、Ruby、.NET、iOS、Androidにも対応しています。
IAM HTTPS API
IAMはWebAPI経由でもアクセス可能です。HTTPSで以下のグローバルエンドポイントにアクセスします。
https://iam.amazonaws.com
またリクエストには、アクセスキーIDおよびシークレットアクセスキーによる署名が必要です。よってAWSのドキュメントを見る限りでは、どうもSDKでアクセスする方が容易なようです。詳細はこちらにありますので、WebAPI経由でのアクセスを検討している方はぜひご参考にどうぞ。
まとめ
本記事では、AWS IAMを解説しました。
ご覧いただいたようにIAMの概念自体はかなり簡単で、なんらかの開発ツールやミドルウェアを触ったことのある方ならすぐに分かるレベルです。やってみるとわかりますが、IAMで設定したアクセス権限体系をAWSの各種サービスで使えるというのは、予想以上の便利さです。
ぜひ導入を検討してみてくださいね!