Security Category

IAM(Indentity Access Management)

Overview

AWSには、AWSアカウント(ルートアカウント)とIAMアカウントの2種類がある。 ルートアカウントはAWSの全てのサービスに対し、ネットワーク上のどこからでも 操作できる強力な権限を持っている。そのため、複数の利用者でAWSを利用したい場合や、 アプリケーション上からAPIを通じて、AWSリソースにアクセスする場合など、 必要に応じて、各AWSサービスごとに操作の制御が可能なIAMアカウントを作成し、運用するのが一般的である。

IAMアカウントには、以下の3種類が定義できる。

  • IAMユーザ
  • IAMグループ
  • IAMロール
IAMアカウント
種類 説明
IAMユーザ ユーザは各利用者にAWSを利用するための認証情報。ユーザには、人に限らず
CLI(Commnad Line Interface)やAPIを呼び出すアプリケーションも含まれる。
認証はそれぞれ、ID・パスワードを使用する方法と、アクセスキーと
シークレットアクセスキーを使用する方法で行う。
IAMグループ グループは同じ権限をもつユーザの集まりである。認証はユーザで行い、
認可はIAMグループに対して適切な権限を設定する方法がよい。
IAMロール ロールは永続的な権限(アクセスキー、シークレットアクセスキー)を保持する
ユーザと異なり、一時的にAWSリソースへアクセス権限を付与する場合に使用する。

認可は、「Action(どのサービスの)」、「Resource(どういう機能や範囲を)」、「Effect(許可or拒否)」という形でアクセスポリシーとして定義する。 AWSが最初から設定しているポリシーをAWS管理ポリシーといい、ユーザが独自に作成したポリシーをカスタマー管理ポリシーと呼ぶ。 これらのポリシーを上述のIAMユーザ、グループ、ロール各々に適用できる。また、これらの設定を様々なグループ、ユーザで横断的に適用できるよう、 オブジェクトとして管理できるIAM管理ポリシーと、従来の通り、ユーザ・グループ、ロール個別に設定していくインラインポリシーの2種類がある。

IAMユーザ・グループの作成

アプリケーションからアクセスするためのユーザ、及びグループを作成し、AWS管理ポリシーを割り当てる。

■管理コンソールのIAMから、ユーザを選び「ユーザの作成」を選択する。

../../../_images/management-console-iam-create-user-1.png

■ユーザ名を入力し、アクセスの種類(ここでは、プログラムによるアクセス)を設定する。

../../../_images/management-console-iam-create-user-2.png

■新規グループの作成を選択し、S3へアクセスするAWS管理ポリシーを割り当てる。

../../../_images/management-console-iam-create-group-1.png

IAMロールの作成

IAMロールは、アプリケーションでS3へのダイレクトアップロードを行う場合など、一時的にAWSリソースへアクセス権限を付与する場合に使用する。 ここでは、S3へファイルの書き込みに対して、STS(Security Token Service)を利用することを想定した、IAMロールの設定を行う。

■管理コンソールのIAMからロールを選び、「ロールの作成」ボタンを押下する。

../../../_images/management-console-iam-create-role-1.png

■アプリケーション用のユーザ(のみ)が、STSに対して、AssumreRoleリクエストが発行できるように、「別のAWSアカウント」を選択し、アプリケーション用のユーザを作成したアカウントIDを入力する。

../../../_images/management-console-iam-create-role-2.png

Warning

AWSサービス(EC2等)に対してロールを割り当ててしまうと、アプリケーションの実装を知っていれば、第3者でもアクセスできてしまうため、アプリケーションのユーザのみがAssumeRoleリクエストを発行できるように設定する。

Note

アプリケーションユーザの割り当ては後ほど行うため、ここでは、アプリケーション用のIAMユーザを作成したアカウントだけ設定する。

■S3への書き込みが行えるポリシーを作成する。新規ポリシーの作成を選択し、以下の通り、S3のバケットオブジェクトへPutObject権限を割り当てる。

../../../_images/management-console-iam-create-policy-1.png
  • サービス:S3
  • アクション:PutObjectを設定
  • リソース:書き込み用のバケット名とオブジェクト名(フォルダ名+ワイルドカード)を指定。
  • リクエスト条件:ここでは特に設定しない
../../../_images/management-console-iam-create-policy-2.png

■「ReviewPolicy」を押下し、ポリシー名を入力して、「CreatePolicy」でポリシーを作成する。

../../../_images/management-console-iam-create-policy-3.png

■作成したポリシーをロールに対して割り当て、ロール名を入力し、ロールを作成する。

../../../_images/management-console-iam-create-role-3.png

■ロールを作成したのち、信頼関係タブで、「信頼関係の編集」を押下する。

../../../_images/management-console-iam-create-role-4.png

■PrincipalのAWS属性を以下の通り書き換える。

“arn:aws:iam::<アカウント>:user:<アプリケーション用のIAMユーザ>”

../../../_images/management-console-iam-create-role-5.png

Note

アプリケーションからSTSを利用する場合、アカウントIDを含むロールARNを取得する必要があるが、アプリケーションのセキュリティ対策上の問題で、アプリケーション内で定義したロール名からARNを取得したい場合(アカウントIDなどをプロパティに定義したくない場合)、AssumeRequestするユーザがロール情報を取得できるよう、以下のようなポリシーをユーザにアタッチしておく必要がある。

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "iam:GetRole",
      "iam:PassRole"
    ],
    "Resource": "arn:aws:iam::<account-id>:role/XX-*"
  }]
}

Note

Policyは、未記入 < ALLOW < DENYの順で優先される。

AWS Certificate Manager

Overview

AWS Certification Managerは、AWSの各種サービスで使用する Secure Sockets Layer/Transport Layer Security (SSL/TLS) 証明書のプロビジョニング、管理、およびデプロイを、簡単に行えるサービスである。具体的には、

  • SSL/TLS 証明書をリクエスト、プロビジョンして、Elastic Load Balancing、Amazon CloudFront、Amazon API Gateway などのサービスへ組み込み、ウェブサイトやアプリケーションに証明書をデプロイできる。
  • リクエストしたドメインの所有権を証明して、証明書が発行されると、AWSマネジメントコンソールのドロップダウンリストで SSL/TLS 証明書を選択し、デプロイできる。
  • AWSコマンドラインインターフェイス(CLI)コマンドまたは API 呼び出しを使用して、ACM によって提供される証明書を AWS リソースにデプロイすることもできる。ACM では、証明書の更新とデプロイが自動的に管理される。

SSL証明書には、

  • ドメイン認証証明書(Domain Validation)
  • 組織認証証明書(Organization Validation)
  • EV証明書(Extended Validation)

があるが、ACMはドメイン認証型のSSL証明書であり、コンソール内での認証や、ドメインの管理者に確認のメールが届いて、 メールに記載されているURLをクリックするだけで、証明書の取得が可能である。

証明書のリクエスト

  1. 証明書を取得したいドメインを入力し、「次へ」を押下する。ここでは、¥*.debugroom.orgを入力。
../../../_images/management-console-acm-request-certification-1.png
  1. DNSの検証ラジオボタンにチェックをいれたまま、「次へ」を押下する。この方法では、Route53を使って認証を行うパターンである。
../../../_images/management-console-acm-request-certification-2.png
  1. 「確定とリクエスト」を押下する。
../../../_images/management-console-acm-request-certification-3.png
  1. ドメインのDNS設定でCNAMEレコードの追加を行うことで認証する。ここではRoute53を使用してレコードの追加を行う。「Route53でのレコードの作成」を押下する。
../../../_images/management-console-acm-request-certification-4.png
  1. 「作成」を押下し、レコードを追加する。
../../../_images/management-console-acm-request-certification-5.png
  1. DNSレコードが書き込まれ、検証フェーズに更新される。
../../../_images/management-console-acm-request-certification-6.png
  1. ACMコンソールでは、証明書の検証のステータスが表示される。検証が完了するまで少々時間がかかる。
../../../_images/management-console-acm-request-certification-7.png

Amazon Cognito

Overview

Amazon Cognitoはユーザ情報の管理や認証・認可の設定、またAWSサービスへのアクセスを許可する認証情報を提供するサービスである。 大きくユーザプールとIDプールがあり、ユーザプールではアプリユーザのサインアップやサインインオプションを提供するユーザディレクトリサービスであり、 IDプールではユーザプールで管理しているユーザや、匿名のゲストユーザに対して一時的な認証情報を発行する。

ユーザプールプールの作成

■API Gatewayから認証されることを目的としたユーザプールを作成する。コンソールからAmazon Congnitoサービスを選択し、 ユーザプールの管理ボタンを押下して、ユーザプールを作成する。

../../../_images/management-console-cognito-create-userpool-1.png


■ユーザプール名を入力し、「ステップに従って設定する」を選択する。

../../../_images/management-console-cognito-create-userpool-2.png


■Emailアドレスを使ったサインインを実行するため、「Emailおよび電話番号」を選択する。

../../../_images/management-console-cognito-create-userpool-3.png


■サインアップのために必要な属性を選択する(特に設定しなくても大丈夫だが、サンプルとしてfamily_nameとgiven_name、pictureを選択する)。

../../../_images/management-console-cognito-create-userpool-4.png


■パスワードの強度を設定し、ユーザに自己サインアップの許可を与える設定をした上で、「次のステップへ」ボタンを押下する。

../../../_images/management-console-cognito-create-userpool-5.png


■MFAはいったんオフ設定とし、アカウントの回復はEmailおよび電話を選択する。

../../../_images/management-console-cognito-create-userpool-6.png


■確認する属性としてEメールを選択し、SMSのロール名を入力して「次のステップ」ボタンを押下する。

../../../_images/management-console-cognito-create-userpool-7.png


■サインアップの確認ように使用されるSESのリージョンを選択する。基本デフォルトのままで良い。

../../../_images/management-console-cognito-create-userpool-8.png


■検証メッセージおよび招待メッセージの雛形文を入力する。

../../../_images/management-console-cognito-create-userpool-9.png


■タグは特に設定せず、「次のステップ」ボタンを押下する

../../../_images/management-console-cognito-create-userpool-10.png


■ユーザのデバイスを記憶しない設定で「次のステップ」ボタンを押下する

../../../_images/management-console-cognito-create-userpool-11.png


■続いてこのユーザプールにアクセスするアプリケーションクライアントの設定を行う。HTTPアクセスによる認証を想定する場合、

  • 「認証用の管理APIユーザの名パスワード認証を有効にする(ALLOW_ADMIN_USER_PASSWORD_AUTH)」
  • 更新トークンベースの認証を有効にする(ALLOW_REFRESH_TOKEN_AUTH)

を選択する。また、ユーザ存在エラーを防ぐを有効化し、アプリクライアントを作成して、「次のステップ」ボタンを押下する。

Note

アプリクライアントIDは後続のIDプールの作成で使用するのでメモしておくこと。

../../../_images/management-console-cognito-create-userpool-12.png


■トリガーは特にデフォルト設定(なしのまま)でユーザプールを作成する。

../../../_images/management-console-cognito-create-userpool-13.png


■トリガーは特にデフォルト設定(なしのまま)でユーザプールを作成する。

../../../_images/management-console-cognito-create-userpool-14.png


Note

ユーザプールIDは後続のIDプールの作成で使用するのでメモしておくこと。


ユーザの作成

■作成したユーザプールでユーザの作成を行う、「ユーザとグループ」メニューから「ユーザの作成」ボタンを押下する。

../../../_images/management-console-cognito-create-user-1.png


■ユーザ名と初期パスワード、サインアップ確認のEメールアドレスを入力し、「ユーザの作成」ボタンを押下する。

../../../_images/management-console-cognito-create-user-2.png


■作成されたユーザを確認する。ステータスは「FORCE_CHANGE_PASSWORD」となっており、初回アクセス時にはパスワードの変更が必要となる。

../../../_images/management-console-cognito-create-user-3.png


IDプールの作成

■AWSコンソールからAmazon Cognitoを選択し、「フェデレーテッドアイデンティティの管理」を押下し、IDプールを作成する。プール名を入力する。

../../../_images/management-console-cognito-create-idpool-3.png


■認証プロバイダーでCognitoタブを選択し、上記の手順で作成したユーザプールIDとアプリクライアントIDを入力して、「プールの作成」ボタンを押下する。

../../../_images/management-console-cognito-create-idpool-4.png


■新しく作成するIDプールに使うIAMロールを作成する。ロール名を適宜入力して作成すること。

../../../_images/management-console-cognito-create-idpool-5.png


Amazon STS

Overview

STSはIAMユーザもしくはフェデレーテッドユーザがリクエスト可能な一時的セキュリティ認証情報を提供するWebサービスである。 STSでは、Security Assertion Markup Language (SAML) 2.0 をサポートする。この機能では、フェデレーティッドシングルサインオン (SSO) が有効になり、 ユーザーは Windows Active Directory Federation ServicesなどのSAML 互換アイデンティティプロバイダーからのアサーションを使用して、 AWS マネジメントコンソールへのサインインや、プログラムの AWS API 呼び出しを行うことができる。

Note

フェデレーテッドユーザとは、特定の認証を完了した認証済みのユーザを指す。

また、Amazon、Facebook、または Google へのログインなどの信頼できるアイデンティティプロ バイダーを使用して、アプリケーションを設定し、 フェデレーションされた認証情報を配布するWeb ID フェデレーションをサポートするが、以下のようなステップで実行可能である。

  1. アイデンティティプロバイダーにアプリケーションを登録する。
  2. アイデンティティプロバイダー用の IAM ロールを作成する。
  3. そのIAMロールにアクセス権限を設定する。
  4. アイデンティティプロバイダーのSDKを使用して、ログイン後にトークンにアクセスできるようにする。
  5. AWS SDK for JavaScript を使用して、トークンを元にAWSリソースの一時的な認証情報をアプリケーションに取得させる

AWS Key Management Service(KMS)

AWS Key Management Serviceとは、データを暗号化するキーのマネージド暗号化サービスである。 KMSでは、カスタマーマスターキー(CMK)と呼ばれるタイプのキーを使用して、データを暗号化および復号する。 データキーは暗号化対象毎に固有のため、キーが流出しても影響は限定的になる。KMSでは以下のようなキー管理機能を実行できる。

  • 一意のエイリアスおよび説明を付けたキーを作成する。
  • IAMのどのユーザーおよびロールがキーを管理できるかを定義する。
  • IAMのどのユーザーおよびロールがキーを使用して、データを暗号化および復号できるかを定義する。
  • AWS KMSが1年ごとに自動でキーを更新するよう設定する。
  • キーを誰にも使用されないように一時的に無効にする。
  • 無効にしたキーを再度有効にする。
  • AWS CloudTrailでログを調査して、キーの使用を監査する。

アプリケーションのデータを暗号化する必要がある場合、開発者は、AWS SDKを使用することで、簡単に暗号化キーを使用および保護できる。

Note

AWS CloudHSMと類似するサービスであるが、KMSはマスターとなるキー自体を生成するのに対し、CloudHSMはキーを保管しておくだけのサービスである。

AWSのセキュリティ対策

DDos対策

DDosを緩和する場合は

CloudFrontエッジロケーション > ロードバランサ > WAF > Webアプリケーション

といった形でシステム構成を行っておく。

Security Inspector

Security InspetorはAWSにデプロイされたアプリケーションのセキュリティ評価サービスである。

Todo

Security Inspectorについて記述。