Amazon Web Services

IAM (Identity and Access Management) を理解する

IAMとは

「ユーザーに対してAWSのアクセスを制御する仕組み」のことです。
※CloudFrontやRoute 53と同様、グローバルサービスなのでリージョンを気にする必要がありません。

IAM初回利用時の流れ

IAMユーザー / IAMグループの登録

ルートユーザーを使用し最初のIAMユーザーを作成します。

IAMユーザーはユーザーまたはアプリケーションの実体で、構成要素は「名前」「認証情報(コンソールPW, アクセスキー)」です。
※ここで作成したアクセスキーは共有してはいけません。もしセキュリティの侵害があった場合、IAMユーザーの削除 / PW変更などを行います。

このIAMユーザーやIAMグループ(IAMユーザーの集合)を用いることで、実際にユーザーがAWSサービスを利用することができます。

IAMポリシーで権限を付与

IAMユーザーやIAMグループは作成直後には権限が付与されていないため、IAMポリシーをAWSリソースへ関連付ける必要があります。

IAMポリシーでIAMユーザーに直接権限を付与することも可能ですが、人数が多い場合にはIAMグループを利用して一元的に管理すると楽です。
※IAMユーザーが所属できるグループは最大10個です。

[例] ①ユーザーがIAMユーザーでログイン→②IAMポリシーでアクセス権を確認→③AWSの各種サービスへアクセス (S3など)


※こちらのIAMポリシーでは、AWSアカウント(id: 123456789012)のIAMユーザー(yonaha)以外の操作を拒否しています。具体的な対象は、S3バケット(exture-test-buketおよびその配下)に対するすべての操作です。

許可と拒否

IAMユーザーではデフォルトだと何も許可されていません。

そのためIAMポリシーで明示的に許可を設定しない限り、すべての操作が拒否されます。(暗示的な拒否)

上で示したようにIAMポリシーのJSONファイルで明示的に許可/拒否を記述することで、ユーザーは対象の操作を行えるようになるというわけです。(明示的な許可/拒否)

IAMポリシーの権限の優先度:
「明示的な拒否 > 明示的な許可 > 暗示的な拒否」
(つまり、権限を付与するには明示的に許可する必要がありますが、他のポリシーで明示的に拒否されているとその操作は行えません)

IAMポリシーの種類

AWS管理ポリシー

AWSで事前に定義されたポリシーのテンプレート群です。

代表的なものとしてはAdministratorAccess(すべてのアクセス権を提供), PowerUserAccess(IAM以外のアクセス権を提供)などが挙げられ、ユーザーはこのようなポリシーを選択するだけで利用できます。

カスタマー管理ポリシー

ユーザー自身が作成・カスタマイズできるポリシーです。

AWS管理ポリシーでは自社のセキュリティ要件を満たせない場合などに使われます。

インラインポリシー

IAMユーザー / IAMグループ / IAMロールに埋め込まれているポリシーに対し、個別に設定を反映させるポリシーです。
※インラインポリシーは複数のIAMユーザー / IAMグループ間で共有できません。

IAMによる認証方式

IAMユーザー名とPW

ブラウザのAWSマネジメントコンソールからIAMを利用するために、IAMユーザー名とPWを利用するという方式です。

MFA(多要素認証)

前述したIAMユーザー名とPWに加えて、MFAデバイスなどで認証コードを利用するという方式です。

IAMロール

AWSサービスなどに対して操作権限を付与する仕組みです。

IAMユーザーやIAMグループとは紐付いておらず、IAMポリシーからIAMロールへ直接権限を付与します。

IAMロールは各種サービス (EC2やLambdaなど) に紐づけるもので、ユーザーには直接紐付けされません。

[例] ①EC2インスタンスにIAMロールを直接割りあてる→②EC2インスタンス上で稼働するアプリからAWS SDK経由で操作できるようになる
(EC2からS3への読み書きを許可, LambdaからDynamoDBへの書き込みを許可など)

キーペア

キーペア(アクセスキーIDとシークレットアクセスキー)を使って認証する方式です。

前述したAWS CLIやAWS SDKなどで利用されますが、キー流出によるリスクがあることから現在は推奨されていません。

現在はキーペアの代わりに「IAMロールを使用する」という方法が推奨されています。

IAMでAWSを操作する3つの方法

ブラウザからAWSマネジメントコンソールにログイン

IAMユーザーのユーザー名とPWを用いてブラウザからログインする方法です。

AWS CLIでWindowsやLinuxからログイン

操作先のリージョンやIAMユーザーごとに作成できる「アクセスキーID」「シークレットアクセスキー」を事前に作成し、ログインする方法です。

AWS SDKでプログラムからAPIを利用

例えばJavaのようなプログラムからAWS SDKでAPIを指定し、AWSの各種サービスを利用するという方法です。

SDKでAPIを利用する場合、前述したAWS CLI同様2つのキーペアによる認証が必要となります。

ただセキュリティの観点では、キーペアではなくIAMロールを利用する方が良いでしょう。

IAMによるIDフェデレーション(SSO)

IAMと組織で利用されている認証の仕組みと連携させるという方式です。

IDフェデレーションでSSO機能を利用することで、IAMで全員分の認証情報を登録するという手間を省け、楽にAWSサービスを利用できます。

SAML2.0 / Open ID Connect

IAMでは、SAML2.0やOpen ID ConnectといったSSOを実現でき、認証したユーザーごとに一時的なアクセスキーが発行されます。

このAWSの一時的なアクセスキーを管理 / 発行するのが STS (Amazon Security Token Service) です。

[例] ①ユーザーが組織の認証基盤で認証→②その基盤からSTSへ認証を連携→③STSから一時的なトークンが発行される→④ユーザーがAWSにアクセスできるようになる

Web IDフェデレーション

例えばFacebookのように、OpenID ConnectをサポートしているSNSをIDフェデレーションで連携させることでAWSへのSSOが可能です。(Web ID フェデレーション)

ちなみにAmazon Congnitoというサービスを利用すれば、Webやモバイルアプリからの認証をSNSと連携させることができます。

Directory Service

Microsoft ADと認証連携を行うことができるサービスです。

Directory ServiceのAD Connectorを利用することで、組織の既存ADと認証連携を行うことができます。

 

 

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Amazon Web Services

    Direct Connect vs Site to Site VPN

    AWS Direct Connect と Site to Site V…

  2. Amazon Web Services

    Pythonを用いたAmazon S3の署名付きURLの発行と、発行時の注意点

    こんにちは、エクスチュアの黒岩と申します。つい最近、AWSア…

  3. Amazon Web Services

    パブリックサブネット vs プライベートサブネット

    パブリックサブネット と プライベートサブネットの違いパブリックサ…

  4. Amazon Web Services

    ELB (ALB・NLB・CLB) をサクッと学ぶ

    ELB(Elastic Load Balancing)とは3種類の…

  5. Amazon Web Services

    System Managerを利用したVPC内Redshiftへの接続

    Redshiftを構築するにあたって、private subnet内で…

  6. Amazon Web Services

    Amazon Redshift ビルド168まとめ

    この記事はAmazon Redshiftのアップデート情報からどのよう…

最近の記事

  1. 回帰分析はかく語りき Part3 ロジスティック回帰
  2. GCSへのSnowflake Open Catalogによる…
  3. VPC Service Controlsで「NO_MATCH…
  4. モダンデータスタックなワークフローオーケストレーションツール…
  5. Streamlit in Snowflakeによるダッシュボ…
  1. Adobe Analytics

    ページの深さとは-Adobe Analyticsの指標説明
  2. ブログ

    インドネシアのデジタルマーケティング
  3. Salesforce

    Zapier(ザピエル)経由でSansanで取り込んだ名刺をSalesforce…
  4. IT用語集

    GA(Google Analytics)とAA(Adobe Analytics)…
  5. ChatGPT

    LangChainって何?: 次世代AIアプリケーション構築 その1
PAGE TOP