🙆

【初心者向け】AWS IAM 入門!完全ガイド

2023/08/07に公開

AWS Identity and Access Management(IAM)

☘️ はじめに

本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。

最新の情報については、AWS 公式ドキュメントをご参照ください。

👀 Contents

IAM とは

ID と AWS のサービスおよびリソースへのアクセスを安全に管理するサービスです。

【AWS Black Belt Online Seminar】AWS Identity and Access Management (AWS IAM) Part1(YouTube)(48:03)

blackbelt-iam-part1

【AWS Black Belt Online Seminar】AWS Identity and Access Management (AWS IAM) Part2(YouTube)(55:37)

blackbelt-iam-part2

How to use IAM Access Analyzer policy generation | Amazon Web Services(YouTube)(5:32)

how-to-use-iam-access-analyzer

IAM サービス概要

IAM ドキュメント

IAM よくある質問

IAM の料金 はありません。

認証・認可とは

IAM を理解する前に、「認証・認可」について把握しておく必要があります。

IAM ユーザー

AWS アカウントを利用するときに使用するユーザーです。ユーザーは、次のようなものを管理することができます。

MFA

AWS での多要素認証 (MFA) の使用

iam-user-mfa

ログインパスワードのほかに、仮想 MFA デバイスを有効化にして認証することで、セキュリティを高めることができます。
MFA は必ず設定するようにしましょう。

MFA を使用したログインを行っている場合のみ、IAM ロールを切り替えることができるという条件を付与することが可能です。

アクセスキー

IAM ユーザーのアクセスキーの管理

iam-user-accesskey

AWS CLI や API を利用する際に使用することができる認証情報です。
ベストプラクティスでは、アクセスキーの利用は避け、一時的なセキュリティ認証情報 (IAM ロール) を使用することが推奨されています。
EC2 などから CLI を利用する場合は、EC2 内にアクセスキーの情報を保持しない IAM ロールを使用するようにしましょう。
ローカル端末から AWS CLI で作業するには、アクセスキーが必要なので、アクセスキーを適切に管理しましょう。さらに、 MFA を利用したスイッチロールを行うようにして、認証直後に強い権限を保持している状態にしないようにしましょう。

完全にアクセスキーを使用しない方法としては、CloudShell、SSM を利用した管理用 EC2 などの方法も検討しましょう。

SSH 公開鍵

ユーザーのパブリック SSH キーを登録する

iam-user-sshkey

SSH 公開鍵を登録できます。ここで登録した SSH 公開鍵を利用すると、次のようなことができるようになります。

  • CodeCommit への SSH 接続
    • CodeCommit へのアクセスは HTTPS もある。この場合、後述の Git 認証情報 の方を利用します。
  • EC2 の Linux ユーザ情報の管理
    • SSH 公開鍵と、aws-ec2-ssh を利用することで、EC2 の Linux ユーザ情報を IAM と同期させることが出来ます。IAM のみで管理が完結できるようになります。

Git 認証情報

iam-user-git

CodeCommit に HTTPS 接続するための認証情報(ユーザー名とパスワード)を発行することができます。

Git 認証情報を使用した HTTPS ユーザーのセットアップ

CodeCommit には、Git 認証情報を使用しなくても接続できます。Git 認証情報を作成することがない代わりに、git-remote-codecommit をインストールする必要があります。

git-remote-codecommit を使用して AWS CodeCommit への HTTPS 接続をセットアップする手順

IAM ポリシー

IAM でのポリシーとアクセス許可

ポリシーとは、AWS リソースへのアクセス権限を定義した JSON ドキュメントです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["ec2:AttachVolume", "ec2:DetachVolume"],
      "Resource": ["arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*"],
      "Condition": {
        "ArnEquals": {
          "ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/instance-id"
        }
      }
    }
  ]
}

ポリシーには次の3つがあります。

  • AWS 管理ポリシー

  • カスタマー管理ポリシー

    • 独自に定義したポリシーです。実際の要件にあった細やかな制御を実装できます。
    • 最大5つまでの自動的にバージョン管理が行われます。
  • インラインポリシー

    • ユーザーやロールに直接記述されるポリシーです。ここで記載したポリシーは他のリソースにアタッチすることが出来ません。
    • ポリシーのバージョン管理ができません。
    • 汎用性が不要な場合や、ポリシーの検証などの用途に適しています。

ポリシーの論理評価

ポリシーの評価論理

基本的には、次の優先度で判定されます。

  • 「明示的な拒否」
    • ポリシー内に明示的に拒否(Deny)したものです。
  • 「明示的な許可」
    • ポリシー内に明示的に許可(Allow)したものです。
    • Deny と Allow を両方記述した場合は、Deny になります。
  • 「暗黙的な拒否」
    • 何も記載されていない操作は、暗黙的にすべてが拒否(Deny)されます。

拒否と許可は上記で示した優先度ですが、アクセス許可は様々なところで設定することができます。
それらの判断順序については、アカウント内でのリクエストの許可または拒否の決定 にポリシーの決定フローチャートがあります。

IAM ロール

IAM ロール

ロールとは、ある用途や職責など目的のために1つ以上のポリシーをまとめたものです。
ロール自体はユーザーやグループなどに直接付与することができませんので、ロールを引き受けること(sts:AssumeRole アクション)を許可した IAM ポリシーを作成する必要があります。

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::account-id:role/Test*"
  }
}

ロールには、セッション期間が設定できます。セッション期間に指定した時間が経過すると、セッションからサインアウトします。以前は 1 時間しか設定できませんでしたが、現在では 12 時間まで設定できます。あまり短くすると、マネジメントコンソールで作業していると、何度も「再ロード」画面がでますので作業内容を鑑みて設定しましょう。

マネジメントコンソールで変更する場合は、「1 時間 / 2 時間 / 4 時間 / 8 時間 / 12 時間 / カスタム期間」が選択できます。

iam-role-sessionduration

カスタム期間では、秒数で 1 時間~ 12 時間を指定できます。AWS CLI を使った場合と同じです。
iam-role-sessionduration-custom

update-role

# 12時間にする場合
aws iam update-role --max-session-duration 43200

IAM Permissions boundary(アクセス権限の境界)

IAM エンティティのアクセス許可境界

IAM ユーザーもしくはロールに付与できる権限の境界を定義したものです。IAM ポリシーで強力な権限(AdministratorAccess)が付与されたとしても、Permissions boundary を超えた権限は許可されません。

IAM ポリシーと Permissions boundary は AND 条件で評価されます。

パスワードポリシー

IAM ユーザー用のアカウントパスワードポリシーの設定

IAM ユーザーのパスワードポリシーを設定することができます。

iam password policy

ZDNET Japan-よくあるパスワード、約半数が AI ツールで 1 分以内に解読可能 という記事に、パスワードポリシー別の解析時間が記載されています。

この記事の引用元である、こちらのサイトでは、パスワードの長さから解析にどれくらいかかるか判定してくれます。

画像は、 password と入れた例です。当然ですが、実際に使用しているパスワードを入れないようにしましょう。

password policy

IAM Policy Simulator

IAM Policy Simulator

policy-simulator

ユーザー、グループ、ロールに対して設定したポリシーが正しいかどうかをテストすることができます。

policy-simulator-run

各項目を展開することで、どこのポリシーで拒否されたかを確認することができます。
policy-simulator-run

IAM Access Advisor

最終アクセス情報を使用した AWS のアクセス許可の調整

アクセス可能なサービスと最終アクセス日時が表示されるので、未使用の権限を特定し削除することが可能になります。

アクセスアドバイザーは、ユーザー/グループ/ロール/ポリシーで使用することができます。
グループの場合は、グループに所属するユーザーが最後に利用したものが表示されます。

iam-access-advisor

IAM Access Analyzer

AWS Identity and Access Management Access Analyzer を使用する

AWS リソースに紐付いているポリシーを検査し、他 AWS アカウントや外部のインターネット等からのアクセスを可能とするような設定がされているかどうかを検出および可視化してくれる機能です。

iam-access-analyzer-result

iam-access-analyzer-result-detail

ベストプラクティス

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html

  • 最小特権アクセス許可を適用
  • 多要素認証
  • CloudTrail でモニタリング
  • アクセスキーの利用は極力避ける
  • ルートユーザーは使用しない
  • 未使用のロールは定期的に棚卸を
  • IAM Access Analyzer を活用しよう

📖 まとめ

iam

GitHubで編集を提案

Discussion