どうも、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
*シークレットアクセスキー
- アクセスキー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を発行する)