【AWS】IAMまとめ


どうも、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マネジメントコンソールにログインする

* https://AWS-account-ID.signin.aws.amazon.com/console
* 例：https://123456789012.signin.aws.amazon.com/console
* URLに別名を付けられる。例：https://youralias.signin.aws.amazon.com/console/
	* 設定変更は、IAMダッシュボードのcustmizeから
	* 別名はAWS内で一意の必要あり（他の人が使ってる場合は利用できない）
 
# MFA

* マネジメントコンソールログイン時に、メールアドレス、パスワードの他に3つ目の認証に必要な情報を入力
* スマフォアプリまたはMFA専用デバイスに表示された数字を、ログイン情報として入力する

# 認証情報の種類

* パスワード（マネジメントコンソールログイン時に利用、記号・数字等の文字の指定、期間での変更要求を設定できる）
* アクセスキー（API、AWS CLI時に利用)
* 証明書
* MFA(マネジメントコンソールの追加ログイン情報として利用)

# パスワードの管理

* パスワード変更
* パスワードポリシーの設定
	* パスワードの最少の長さ
 	* 大文字、小文字、数値、アルファベット、記号の特定の文字を含むように指定
 	* IAMユーザが自分で自分のパスワードを変更できるように指定
 	* 指定した期間経過後にパスワードを自分で変更するように要求するように設定
 	* 指定した期間経過後に管理者がパスワードリセットしないと利用できないように指定
 	* 以前利用したパスワードを、再利用できないように設定
 	* パスワードポリシーは、次回変更時から適用
 	* ただし、既存パスワード変更期間を指定した場合はすぐに適用される

# アクセスキーの管理

* AWS CLI、SDK等でAWS操作できるキーを発行
	* アクセスキーID
	*シークレットアクセスキー
* シークレットアクセスキーは、キー作成時のみダウンロードできる（なくした場合は、再発行）
* キーは1IAMユーザあたり、１つ持てる
* 状態はアクティブ、インアクティブを指定できる（利用しない場合は、削除するかインアクティブにする）

# MFAの管理

* Time-Based One-Time Password（TOTP）に準拠
* スマフォアプリを仮想MFAデバイスとして利用できる：登録時はQRコードで
* ハードウェアの専用MFAデイバスも利用可能（売ってるので買えば使える）：登録時はデバイスのシリアルコードで
* アカウントごとに１つの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等）
	* ＩＤプロバイダから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ポリシーを記載しポリシーを作成する
* 作成したポリシーは、ユーザ、グループ、ロールにアタッチして利用する
* 記載形式は[ユーザガイド](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/PermissionsAndPolicies.html)参照

# AWS Security Token Service(STSとは)
* 信頼されたユーザに一時的なアクセス権限を付与できる
	* 具体的には、一時的なアクセスID、アクセスキー、認証トークンを発行し、期限付きで利用できる

# STSの利用ケース
* オンプレID（SAML,LDAP）との認証連携
* Web ID（Amazon,Google,Facebook等）との認証連携
* クロスアカウントアクセス（他のAWSアカウントからアクセスできるようにする）
* EC2ロール（ロールを与えたEC2上に一時IDを発行する）