AWS
IAM

【AWS】IAMまとめ

More than 3 years have passed since last update.

どうも、iron千葉です。

IAMについて、ユーザガイドを見てポイントをまとめました。

ポイントだけ確認したい人、ざっと全体を見たい人におすすめです。


IAMとは?


  • AWS上のサービスを操作するユーザとユーザのアクセス権限を管理する

  • ユーザがアクセスるための認証情報、ユーザがアクセスるAWSリーソースを制御するための権限を集中管理

  • もしIAMがなかったら、フルアクセスのAWSアカウントをみんなで共有することになる

  • IAMは、追加料金なしで利用できる


IAMにできること


  • APIアクセスで利用するアクセスキーの発行、ローテーション、無効にするか制御できる

  • 各ユーザが操作できるAWSリソースのアクセス制御

  • AWSリソースの共有(アカウントを超えた共有)

  • 開発者、管理者、本番環境、開発環境などでのグループレベルでのアクセス権限の制御

  • SSLを使って組織内ネットワークからのみ、AWSリソースにアクセスできる


IAMへの移行


  • 単一のアカウントを持っている→そのまま移行できる

  • 組織別にアカウントを持っているがAWSリソースを共有することはない→アカウントをまとめて一括請求できる

  • 組織別にアカウントを持っていて、AWSリソースを共有したい→リソースの再作成が必要


AWSマネジメントコンソールへのログイン


  • メールアドレスとパスワードを利用したログインはフルアクセス権限

  • そのため、IAMユーザを作成し、IAMユーザにてログインすることを推奨

  • MFAを利用することにより、セキュリティレベルを向上できる


一括請求


  • 複数のアカウントをまとめて、1つのアカウントで請求可能(コンソリデートビリング)


IAMの要素


  • AWSアカウント:AWS利用する上で最初に取得するフルアクセスを持ったアカウント(メールアドレス、パスワードでマネジメントコンソールにログインできる)

  • ロール:一時的にアクセスを制限したアカウントを発行できる(権限委任)

  • リソース:S3のバケット、オブジェクト、EC2インスタンス等AWS上のリソース。ARNでリソースを特定できる

  • アクセス権限:ユーザベース(例:bobは、S3とEC2への操作権限がある)とリソースベース(例:S3はbobとbobyのアクセスを許可する)がある


IAMを使う


  • グループ作成

  • ユーザ作成

  • APIでのアクセス用にアクセスキーを発行

  • マネジメントコンソールログイン用のパスワード発行


IAMの利用方法


  • AWS上でIAMアカウントを管理→適宜IAMユーザを作成し、アクセス権限を設定してユーザに渡す

  • 既存の認証システムと連携する→IDフェデレーションによる、外部ユーザに対し一時的に利用なユーザを発行する

  • AWSアカウント間でのクロスアカウントアクセス


IAMのユーザとグループ


  • 同じようなユーザをグループでまとめられる(UNIXでいうグループ、ユーザのようなイメージ)

  • 一人のユーザが複数のグループに所属できる

  • グループ中にグループは作成できない


IAMユーザでAWSマネジメントコンソールにログインする


MFA


  • マネジメントコンソールログイン時に、メールアドレス、パスワードの他に3つ目の認証に必要な情報を入力

  • スマフォアプリまたはMFA専用デバイスに表示された数字を、ログイン情報として入力する


認証情報の種類


  • パスワード(マネジメントコンソールログイン時に利用、記号・数字等の文字の指定、期間での変更要求を設定できる)

  • アクセスキー(API、AWS CLI時に利用)

  • 証明書

  • MFA(マネジメントコンソールの追加ログイン情報として利用)


パスワードの管理


  • パスワード変更

  • パスワードポリシーの設定


    • パスワードの最少の長さ

    • 大文字、小文字、数値、アルファベット、記号の特定の文字を含むように指定

    • IAMユーザが自分で自分のパスワードを変更できるように指定

    • 指定した期間経過後にパスワードを自分で変更するように要求するように設定

    • 指定した期間経過後に管理者がパスワードリセットしないと利用できないように指定

    • 以前利用したパスワードを、再利用できないように設定

    • パスワードポリシーは、次回変更時から適用

    • ただし、既存パスワード変更期間を指定した場合はすぐに適用される




アクセスキーの管理


  • AWS CLI、SDK等でAWS操作できるキーを発行


    • アクセスキーID
      *シークレットアクセスキー



  • シークレットアクセスキーは、キー作成時のみダウンロードできる(なくした場合は、再発行)

  • キーは1IAMユーザあたり、1つ持てる

  • 状態はアクティブ、インアクティブを指定できる(利用しない場合は、削除するかインアクティブにする)


MFAの管理


  • Time-Based One-Time Password(TOTP)に準拠

  • スマフォアプリを仮想MFAデバイスとして利用できる:登録時はQRコードで

  • ハードウェアの専用MFAデイバスも利用可能(売ってるので買えば使える):登録時はデバイスのシリアルコードで

  • アカウントごとに1つのMFAデバイスを利用できる

  • MFAデバイスとして同期対象からずれた場合(利用頻度が低く、デバイスの時間がずれる等で)


    • 再同期には10分程度かかる

    • 再同期ができない場合は、電話…



  • MFAを利用しなくなった場合は、MFAを無効化する

  • MFAデバイスが故障または無くした場合…


    • MFAデバイスを無効化する

    • ルートアカウントの場合は、Contact USよりAmazonに連絡。一時的にMFAが解除される

    • IAMアカウントの場合は、ルートアカウントでログインして操作する



  • 保護API実行を、MFA承認を強制できる(ポリシーで設定)


ユーザ署名証明書の管理


  • API呼び出しで、SOAPを利用できたが、廃止が決まってるのでアクセスキーを利用する


認証情報の更新


  • アプリを中断させずにアクセスキーを変更する


    • 新しいキーを作成(アクティブなキーが2つになる)

    • アプリケーションで新しいキーを利用するように修正

    • 古いキーをインアクティブにする

    • 切り戻しは、古いキーをアクティブにするだけ




認証情報レポートの取得


  • ユーザごとの、パスワード、アクセスキー、MFA デバイス、署名証明書などの状況(アクティブとかパスワード変更日とか)をCSVでダウンロードできる


IDプロバイダを利用する


  • 外部のユーザ(googleとかFacebookとかADとかldapとか)に対して、AWS上のリソースに対するアクセス許可ができる(SSO)

  • IDプロバイダとして、SAMLまたはOpenID Connect(OIDC)を利用できる

  • SAMLプロバイダの利用方法(AD等)


    • IDプロバイダからSAMLメタデータ(発行者名・キー等の情報)を取得

    • SAMLメタデータを元に、マネジメントコンソール・またはAPIでSAMLプロバイダを作成(IDプロバイダとの信頼する)

    • SAMLプロバイダを指定して、ロールの作成

    • EC2インスタンス作成時に指定



  • OIDCプロバイダの利用方法(google、Facebook等)


    • アプリケーションをIDプロバイダ(googleやFacebook)に登録して、クライアントIDをもらう

    • クライアントID、IDプロバイダURLを元にOIDCプロバイダを作成

    • OIDCプロバイダの証明書を取得し、登録する

    • OIDCプロバイダを指定して、ロールの作成

    • EC2インスタンス作成時に指定




IAMロール(委任とフェデレーション)


  • IAMロールでできること


    • AWS以外のID(facebookやgoogle、独自のldap、AD等)とのID連携

    • EC2インスタンス(上で動作するアプリ)に権限を委任(一時アクセス用の期限付きユーザを発行)



  • ロールとは


    • IAMユーザ、グループとは全く別のもの(ユーザとかにアタッチするものではない)

    • ロールを作成してアクセス権(ポリシー)を設定できる

    • ロールに自分または他のAWSアカウントを指定し、アクセス権限を委任できるができる

    • ロールにIAMアカウントを指定し、アクセス権限を委任できる

    • ロールにIDプロバイダ指定し、アクセス制御ができる(IDフェデレーション)



  • ロールの使い方


    • マネジメントコンソールでの操作の場合:IAMでログインし、ロールの切り替えを実施。アクセス権を切り替えられる

    • API(アプリ)での操作の場合:AWS STS AssumeRoleにて一時ユーザを発行してもらい、そのユーザを利用

    • EC2インスタンスでの利用の場合:EC2インスタンスにロールを割り当て、EC2メタデータより一時ユーザを取得し利用




サーバ証明書の管理


  • IAMでELBやその他アプリで使うサーバ証明書(X.509)を管理できる

  • アップロード、削除、更新、一覧表示ができる

  • ELBでHTTPSを利用する場合は、IAMにアップロードした証明書を選択する


アクセスポリシー


  • IAMでのユーザ、グループ、ロールにアクセス権限を設定するには、JSON形式のIAMポリシーを記載しポリシーを作成する

  • 作成したポリシーは、ユーザ、グループ、ロールにアタッチして利用する

  • 記載形式はユーザガイド参照


AWS Security Token Service(STSとは)


  • 信頼されたユーザに一時的なアクセス権限を付与できる


    • 具体的には、一時的なアクセスID、アクセスキー、認証トークンを発行し、期限付きで利用できる




STSの利用ケース


  • オンプレID(SAML,LDAP)との認証連携

  • Web ID(Amazon,Google,Facebook等)との認証連携

  • クロスアカウントアクセス(他のAWSアカウントからアクセスできるようにする)

  • EC2ロール(ロールを与えたEC2上に一時IDを発行する)