tanish-kr's learning log

Learning output log

Aws

IAM

AWS Identity and Access Management(IAM)を使用すると、ユーザー、セキュリティ認証情報、およびユーザーとアプリケーションがアクセスできるAWSリソースを制御するアクセス許可を集中管理できます。

IAMの機能

  • AWSアカウントへの共有アクセス
  • 詳細なアクセス権限
  • Amazon EC2で動作するアプリケーションからAWSリソースへの安全なアクセス
  • 多要素認証(MFA)
  • ID フェデレーション
  • 保証のためのID情報
  • PCI DSSへの準拠
  • 多くのAWSサービスとの統合
  • 結果整合性
  • 使用量無料

IAMへのアクセス

  • AWS Management Console
  • AWS コマンドラインツール
  • AWS SDK
  • IAM HTTPS API

IAMの仕組み

用語

IAMリソース

IAMに保存されているユーザー、グループ、ロール、ポリシー、およびIDプロバイダー。AWSサービスと同様に、IAMのリソースを追加、編集、削除することができる

IAMアイデンティ

識別し、グループ化するために使用されるIAMリソースオブジェクト。IAMユーザーにポリシーをアタッチすることができる。ユーザー、グループ、ロールなど

IAMエンティティ

AWSによって認証に使用されるIAMリソースオブジェクト

プリンシバル

AWSにサインインし、リクエストを作成するためにAWSアカウントルートユーザー、またはIAMロールを使用する人またはアプリケーション。フェデれーティッドユーザーと引き受けたロールが含まれる。

  • ベストプラクティス

    ルートユーザーは日常業務には使用しない。代わりにIAMエンティティを作成して利用する。

リクエスト

リクエストには以下の情報が含まれる

  • アクションまたはオペレーション
    • プリンシバルが実行するアクションまたはオペレーション
  • リソース
    • アクションまたはオペレーションを実行する対象のAWSリソースオブジェクト
  • プリンシバル
    • エンティティを使用してリクエストを送信するユーザーまたはアプリケーション
  • 環境データ
    • IPアドレス、ユーザーエージェント、SSL有効化ステータス、または時刻に関する情報
  • リソースデータ
    • リクエストされているリソースに関連するデータ

認証

プリンシバルとして、AWSに認証情報を使用してリクエストを送信するには、認証されている必要がある。(AWSサインイン)

  • ルートユーザー
    • Eメール
    • パスワード
  • IAMユーザー
    • アカウントID またはエイリアス
    • ユーザー名
    • パスワード
    • 追加のセキュリティ情報(MFAなど)

承認

承認の際に、AWSはリクエストコンテキストの値に基づいて、リクエストに適用されるポリシーを確認します。次に、ポリシーを使用してリクエストの可否を決定します。

  • デフォルトではすべてのリクエストが拒否される
  • アクセス許可ポリシー(アイデンティベースまたはリソースベース)に明示的な許可が含まれている場合、デフォルト設定は上書きされる
  • Organizations SCP, IAMアクセス許可の境界、またはセッションポリシーがある場合、その許可は上書きされる
  • ポリシー内の明示的な拒否は、すべての許可に優先される

アクションまたはオペレーション

IAMは以下のアクションを含む約40のアクションをサポートしている

  • CreateUser
  • DeleteUser
  • GetUser
  • UpdateUser

リソース

AWSで承認されたリクエスト内のオペレーションは、アカウント内の関連リソースに対して実行できる。リソースは、サービス内に存在するオブジェクト

IAMユーザー

AWSサービスに対して様々な操作を行うユーザ

アクセスの種類

プログラムによるアクセス

AWS API, CLI, SDKなどの開発ツールへのアクセスキーIDとシークレットアクセスキーを有効にする

AWSマネジメントコンソールへのアクセス

ユーザにAWSマネジメントコンソールへのサインインを許可するためのパスワードを有効にする

ユーザグループ

ユーザグループはIAMユーザーの集合で、グループを使用して、ユーザの集合に対するアクセス許可を指定できる。 グループ内にユーザを追加でき、グループ毎にアクセス許可ポリシーを設定できる。

ポリシー

IDまたはリソースにアタッチされたときに、そのアクセス許可を定義するエンティティ

JSONでポリシーを作成

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "dynamodb:*",
    "Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books"
  }
}
  • Version - 使用するポリシーの言語のバージョン。2012-10-17(最新)バージョンを使用する
  • Statement - ポリシーのメイン要素
    • Sid - 複数のステートメントを区別するためのステートメントID
    • Effect - AllowまたはDenyを定義。アクセスの許可を指定する。
    • Principal - リソースベースのポリシーを作成する場合は、アクセスを許可または拒否するアカウント、ユーザー、ロール、またはフェデれーティッドユーザを指定する必要がある。
    • Action - ポリシーで許可または拒否するアクションのリスト
    • Resource - IAMアクセス許可ポリシーを作成する場合は、アクションが適用されるリソースを指定する必要がある。
    • Condition - ポリシーでアクセス許可を付与する状況を指定する

ポリシーの例(参照)

ロール

特定のアクセス権限を持ち、アカウントで作成できるIAMアイデンティ。IAMロールは、AWSで許可/禁止する操作を決めるアクセス権限ポリシーが関連付けられているAWSアイデンティであるという点で、IAMユーザーと似ているが、ユーザーは一人の特定の人に一位に関連付けられるのに対し、ロールはそれを必要とする任意の人が引き受けるようになっている。

使用可能な範囲

  • ロールと同じAWSアカウントのIAMユーザー
  • ロールとは異なるAWSアカウントのIAMユーザー
  • EC2等、AWSが提供するウェブサービス
  • SAML2.0またはOpenID Connectと互換性のある外部IDプロバイダー(Idp)サービスによって認証される外部ユーザ、またはカスタム作成されたたIDブローカー

ロールの用語と概念

AWSサービスロール

サービスが顧客に変わって、顧客のアカウントでアクションを実行するために引き受けるロール。

EC2インスタンスのAWSサービスロール

アプリケーションがEC2上で実行しているサービスロールの特殊なタイプは、アカウントでアクションの実行を引き受けることが出来る。このロールはEC2インスタンス起動時に割り当てられる。

AWSサービスにリンクされたロール

AWSサービスに直接リンクされた一意のタイプのサービスロール。 サービスにリンクされたロールは、サービスによって事前定義されており、他のサービスを呼び出す必要のあるアクセス権限がすべて含まれている。

ロールの連鎖

ロールの連鎖は、AWS CLIまたはAPIを利用して2つ目のロールを引き受けるロールを使用する場合に発生する。ロールを引き受けるときは、セッションタグを渡して、タグを推移的に設定可能。ロールセッションは最長で1時間で制限されている。

委任

委任により、制御するリソースへのアクセス許可するユーザにアクセス許可を付与できる。委任には、2つのアカウント間の信頼を設定することが含まれる。1つ目は、リソースを所有するアカウント、2つ目はリソースにアクセスする必要があるユーザを含むアカウント。以下のいずれかを指定可能

  • 同じアカウント
  • 組織の制御下にある別々のアカウント
  • 異なる組織によって所有される2つのアカウント

フェデレーション

外部IDプロバイダーとAWSとの間に信頼関係を作成すること。

フェデレーティッドユーザ

IAMユーザを作成する代わりに、AWS Directory Service、エンタープライズユーザディレクトリ、またはウェブIDプロバイダーに既存のアイデンティを使用できるユーザのこと

信頼ポリシー

ロールを引き受けるために信頼するプリンシバルを定義するJSONポリシードキュメント

アクセス許可ポリシー

ロールで使用できるアクションやリソースを定義するJSON形式のアクセス許可に関するドキュメント。

アクセス許可の境界

ポリシーを使用して、アイデンティティベースのポリシーがロールに付与出来るアクセス許可の上限を設定する機能。

プリンシバル

アクションを実行してリソースにアクセスできるAWS内のエンティティ。以下2つの方法をいずれかを使用して、リソースに対するアクセス許可を付与できる

  • ユーザまたはロールに対し、アクセス権限ポリシーをアタッチすることができる
  • リソースベースのポリシーをサポートするサービスについては、リソースにアタッチされているポリシーのPrincipal要素でプリンシバルを指定出来る

クロスアカウントアクセスのロール

あるアカウントのリソースに対するアクセス権限を、別のアカウントの信頼されるプリンシバルに付与するロール。

IAM IDプロバイダ

IAM IDプロバイダ(IdP)は、AWS外のユーザーIDを管理します。

サポートされているタイプ

  • SAML
  • OpenID Connect