AWS Identity and Access Management

Getting used to AWS Service 1/N

公開日: 2023-08-03
更新日: 2023-09-25

  Table of Contents

AWS Identity and Access Management

Def: AWS IAM

AWS Identity and Access Management (IAM) は, AWSのリソースへのアクセスを管理するためのサービスのこと. IAMを使用することで,

  • 認証(Athetification): 誰が環境にアクセスできるか
  • 認可(Authorization): 認証されたユーザーがどのような権限を持つか?

といったきめ細かいアクセス許可を一元管理する事が可能となる

IAMを用いることで, AWSにアクセスできるIAMユーザーやIAMグループ, IAMロールをAWSアカウントは定義することができます. ここで注意が必要なのは「IAMユーザーは個別のアカウントではなく, アカウント内のユーザー」であることです. AWS CLIやSDKを利用してAWSサービスを操作するときは, 基本的にはIAMユーザーを利用します.

Column: AWSアカウントとIAMユーザー

  • AWSアカウント
  • IAMユーザー

の2種類のアカウントがAWSではあります. AWSアカウントは, AWSへサインアップするときに作成されるアカウントのことで, AWSのすべてのサーのスをネットワーク上のどこからでも利用可能なため, ルートアカウントとも呼ばれます. ルートアカウントは権限が非常に強力なので, AWSアカウントの利用は極力避け, IAMユーザーを利用することが推奨されます

IAMの仕組み

human userまたはアプリケーションがサインイン認証情報を使用して AWS と認証. 認証は、サインイン認証情報を AWS アカウント が信頼するプリンシパル (IAM ユーザー、フェデレーションユーザー、IAM ロール、またはアプリケーション) と照合することによって行われるれます.

次に、プリンシパルにリソースへのアクセスを許可するリクエストが行われます. アクセスは承認リクエストに応じて許可されます. 例えば, コンソールに初めてサインインしてコンソールのホームページを開いたときは, 特定のサービスにアクセスしているわけではありません.

  • サービスを選択すると, 承認リクエストがそのサービスに送信さる
  • ユーザーの ID が認証されたユーザーのリストに含まれているかどうか, 付与されるアクセスレベルを制御するためにどのようなポリシーが適用されているか確認

という流れで承認が決定されます. 承認されると, プリンシパルはユーザー内の AWS アカウント リソースに対してアクションを実行したり, 操作を実行したりできます(例: S3でのバケットの作成やlocalとのsyncなど).

Principal

プリンシパルとは, AWS リソースに対するアクションまたはオペレーションをリクエストできるIDまたはワークロードです. 認証後, プリンシパルにはプリンシパルのタイプに応じて, AWS にリクエストを行うための永続的または一時的な認証情報を付与できます.

  • IAM ユーザーとルートユーザー: 永続的な認証情報が付与される
  • IAMロール: 一時的な認証情報が付与される

という違いがあります.

IAMグループ

  • IAMグループは同じ権限を持ったユーザーの集まり
  • IAMグループ自体は, AWSへのアクセス認証情報は保持せず, 認証自体はあくまでユーザー単位で行う
  • IAMグループの目的は権限を容易に, かつ正確に管理すること

複数のユーザーに同一の権限を個別に与えると, 権限付与漏れや過剰付与などミスが発生する可能性が高くなるので, Linuxにおけるグループと同じようにまとめて管理することを可能にした機能と理解できます. 1つのユーザーに対して複数のグループを割り当てることもできますが, グループ自体を階層化して管理するということはできません.

IAMロール

IAMロールは永続的な権限を保有するIAMユーザーやIAMグループと異なり, 一時的にとあるIAMユーザーに 一時的にAWSリソースへアクセス権限を付与する場合などに使用します.

ロールの使い方 状況
AWSリソースへの権限付与 インスタンス作成時にロールを付与することでEC2インスタンス上で稼働するアプリに一時的にAWSリソースへアクセス権限を与える
クロスアカウントアクセス 複数のAWSアカウント間のリソースを1つのアカウントで操作するときに使用
IDフェデレーション 社内サーバに登録されているアカウントにAWSリソースアクセスを許可する場合
Web IDフェデレーション SNSアカウントを使用してAWSリソースアクセスを許可する場合

AWS CLI で IAM ロールを使用する

IAMロールを使用するようにAWS CLIを設定するには、~/.aws/configファイルでIAMロールのプロファイルを定義する必要があります. ただし, 個別のプロファイルを設定する形で対応することが推奨です.

  • credential fileでuser1と設定されてたprofileを利用
  • Amazon リソースネーム (ARN) arn:aws:iam::123456789012:role/marketingadminroleのロールを引き受ける

という条件でロールプロファイルを設定する場合は~/.aws/configファイルで以下のように設定します

1
2
3
[profile hoohoo]
role_arn = arn:aws:iam::123456789012:role/marketingadminrole
source_profile = user1

上記の設定をすることでAWS CLI はリンクされた user1 プロファイルの認証情報を自動的に検索し, それらを使用して, 指定された IAM ロールの一時的な認証情報をリクエストします. CLI では, バックグラウンドで sts: AssumeRole オペレーションを使用してこれを実現します.

利用方法としては, --profile optionで設定したprofileを参照することで, IAMロールを使用することができます. 例として,

1
% aws s3 ls --profile marketingadmin

References



Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)