この記事について
主に
- 認証と権限
- 開発ツール
についてChatGPT4による要約結果のコピペです。
社内の新規利用者向けに権限認証まわりの説明資料を作ろうと要約しました。要約を読んでみて自分用備忘録にもしたくなり記事にしました。
説明(要約)に重複個所がありますがご容赦ください。
検索
目的
今までAWSリソース構築の初任者に対してコンソール/CLI/SAMの使い方だけ説明してましたが、(意識含めて)安全に使うためにユーザー/権限/認証の仕組みを知ってもらいたく用語の整理をしました。
主な用語
- サービスとリソース
- RoleとPolicy
- セキュリティ認証情報
- user タイプ
- IAM user認証情報
- AWS IAM Identity Center user認証情報
- 自分たちが使う開発ツール
調査日/エンジン
- 2024.1.13
- ChatGPT4
サービスとリソース
サービスは AWS が提供する幅広い機能 (コンピューティング、ストレージ、データベースなど) を指し、リソースはこれらのサービス内で作成および管理する特定のインスタンスまたはオブジェクトです。
(2024.1.18著者追記) 下図はS3とLambdaの例でサービスとリソースを説明しています。
サービス
これらは、クラウド インフラストラクチャを運用、保護、拡張するために AWS が提供するさまざまなツールまたはソリューションです。
AWS のサービスには幅広い機能が含まれており、それぞれが特定の種類のクラウド コンピューティングのニーズに特化しています。
例としては、コンピューティング能力の Amazon EC2、ストレージの Amazon S3、サーバーレス コンピューティングの AWS Lambda などがあります。これらのサービスは、クラウド環境を作成および管理するために使用する基本的な構成要素です。
リソース
一方、リソースは、これらのサービス内の操作可能な個別のエンティティです。これらはより具体的であり、サービス内で作成されるインスタンスまたはオブジェクトと考えることができます。
たとえば、Amazon S3 サービス (ストレージ サービス) 内では、個々のストレージ コンテナはリソースである S3 バケットと呼ばれます。同様に、EC2 インスタンスは Amazon EC2 サービス内のリソースです。各リソースには、それに関連付けられた特定のプロパティとアクションがあります。
プログラミングのコンテキストでは、特に Boto3 などの AWS SDK を使用する場合、リソースは AWS のサービスと対話するためのより高いレベルの、より抽象化されたインターフェイスを提供します。この抽象化により、サービス API と直接対話する場合と比較して、より直感的で簡素化されたコーディングの実践が可能になります。
このコンテキストにおけるリソースは、識別子 (特定のリソースを識別するための一意の値)、属性 (リソースのプロパティ)、およびアクション (リソースに対して実行できる操作) を持つことができます。
RoleとPolicy
(2024.1.18著者追記) ChatGPT4よりこちらの方の記事のほうが端的にまとめられていますので引用追記させていただきます。
(参考)
AWSのIAMロールとポリシーの違い
Role
(参考)
IAM ロールに関する AWS の公式ドキュメント
AWS IAM ロールは、特定のアクセス許可を保持する AWS アカウント内の ID です。
IAM ユーザーとは異なり、ロールは特定の個人に関連付けられておらず、ロールを必要とする人なら誰でも引き受けることができます。
ロールは、パスワードやアクセス キーなどの長期的な資格情報を割り当てずにアクセスを委任する場合に便利です。これらは、ロール セッション中に一時的なセキュリティ認証情報を提供します。
ロールは多用途であり、クロスアカウントアクセスなどのシナリオを可能にしたり、既存の外部 ID を持つユーザーにアクセス許可を付与したり、アプリケーションが AWS リソースに安全にアクセスできるようにしたりできます。
IAM ロールは、さまざまな状況でアクセス制御を管理するために不可欠であり、AWS セキュリティ管理の重要なコンポーネントです。詳細については、IAM ロールに関する AWS の公式ドキュメントを参照してください。
Policy
(参考)
IAM ポリシーに関する AWS の公式ドキュメント
AWS IAM ポリシーは、AWS でのアクセスを管理するために重要です。
これらのポリシーは、IAM ID (ユーザー、グループ、またはロール) またはリソースにアタッチされ、アクセス許可を定義します。これらは、アイデンティティが AWS で実行できるアクションと実行できないアクションを決定します。
IAM ポリシーは主に JSON ドキュメントであり、AWS はアイデンティティベースのポリシー、リソースベースのポリシー、アクセス許可境界、組織 SCP、ACL、セッション ポリシーなど、いくつかのタイプをサポートしています。
ID へのアクセス許可の付与から、エンティティの最大アクセス許可の定義、クロスアカウント アクセスの制御まで、各タイプは異なる目的を果たします。詳細については、IAM ポリシーに関する AWS の公式ドキュメントを参照してください。
セキュリティ認証情報
(参考)
セキュリティ認証情報に関する AWS ドキュメント
AWS Identity and Access Management(AWS IAM)
(参考)
AWS IAMは主に、AWS リソースに対するきめ細かいアクセス制御を提供することに重点を置いています。
IAM の各ユーザーは AWS アカウントの一部であり、AWS マネジメントコンソールにアクセスしてプログラムによるリクエストを行うためのパスワードやアクセスキーなどの個別の認証情報を持つことができます。
(2024.1.18著者追記) 下図はパスワードとMFAデバイス等でログインするIAM userを示します。図に示すようにIAM userはAWS IAMのリソースの一部です。
ユーザーは直接またはグループで許可されたPolicyのサービスを操作することが出来ます。
IAM ユーザーには通常、長期の認証情報が付与されます。ユーザーが長期の資格情報を使用してプログラムによるアクセスを必要とするシナリオでは、ベスト プラクティスとしてアクセス キーを定期的に更新することをお勧めします。
AWS IAM Identity Center
(参考)
IAM Identity Center とは何ですか?
AWS Organizationsに登録されている子アカウントに対して操作可能なサービスです。
AWS IAM Identity Center は、アクセス管理に対するより集中的なアプローチを提供し、複数の AWS アカウントとアプリケーションを管理する組織に特に役立ちます。
IAM Identity Center は IAM ユーザーとグループを作成しません。代わりに、ユーザー情報専用のアイデンティティ ストアがあります。
(2024.1.18著者追記) デフォルトではIAM Identity Center ディレクトリがID ソースとして自動的に構成され、E メールアドレスに関連付けられたディレクトリに基づいてIAM Identity Center 認証サービスにリクエストをリダイレクトします。
Active Directory または外部 ID プロバイダー (IdP) を使用も可能で、Microsoft Active Directory、Okta などの外部 ID プロバイダーとの統合をサポートします。
AWS アカウントおよびアプリケーションへのシングル サインオン (SSO) アクセスを提供し、より広範なスケールでアクセスを管理できるようになります。
(2024.1.18著者追記) 下図では2つの許可セット(IoTとWeb)を割り当てられたIAM Identity Center userを示します。
IAM userと違ってマネジメントコンソールに表示されるIAM Identity Center userにはARNがありません。
認証を受けたディレクトリからのリダイレクトでロールを使用できます。
このユーザーでは二つのアカウントにSSO出来る設定になっています。
IAM Identity Center のユーザーには、AWS リソースにアクセスするための短期認証情報が付与されます。また、好みのアイデンティティ ソースでアイデンティティを管理し、アカウント間で一貫して適用されるきめ細かいアクセス許可を使用して、それらを AWS 全体で使用できるように接続することもできます。
IAMとIAM Identity Centerの違い
認証情報管理
IAM はユーザーに長期認証情報を提供するのに対し、IAM Identity Center は短期認証情報を付与してセキュリティを強化します。
アクセス管理
IAM は単一の AWS アカウント内のアクセスを管理するのに適していますが、IAM Identity Center は複数の AWS アカウントとアプリケーションが存在するシナリオに優れており、一元的なアクセス管理を提供します。
外部 ID プロバイダーとの統合
IAM Identity Center では、IAM の主な焦点ではない集中 ID 管理のために外部 ID プロバイダーとの統合が可能です。
シングルサインオン(SSO)
IAM Identity Center は、複数の AWS アカウントおよびアプリケーションにわたる SSO 機能を提供します。これは、IAM では利用できない機能です。
user タイプ
(参考)
user タイプ
root user
AWSアカウントの所有者で、AWSとリソースに完全なアクセス権を持っています。
IAM user
AWSアカウント内で特定のカスタム権限を持つID。管理者やヘルプデスクからサインイン認証情報を提供された場合に該当します。
IAM Identity Center の user
AWSアクセスポータルからサインインするユーザー。IAMアイデンティティセンターやアクティブディレクトリ、外部IDプロバイダーで作成されることがあります。複数の許可セットを割り当てた場合フェデレーティッドユーザーとなります。
フェデレーティッド ID
外部IDプロバイダーを使用してサインインするユーザー。例えば、Amazon、Facebook、GoogleのアカウントでAWSにログインする場合です。
AWS ビルダー ID
AWSの特定サービスやツールへのアクセス用の個人プロフィールです。
IAM user認証情報
(参考)
AWS ユーザーと認証情報
コンソールサインイン認証情報
AWS マネジメントコンソールへのサインインに使用されます。
多要素認証 (MFA)
ユーザーのサインインに追加のセキュリティ層を追加し、MFA デバイスからのコードなどの 2 番目の要素を必要とします。
アクセスキー
アクセスキーを使用して、AWS CLI、AWS Tools for PowerShell、AWS SDK、またはダイレクト AWS API コールからプログラムによる呼び出しを AWS に送信します。
一度に持つことができるアクセスキー (アクティブまたは非アクティブ) は最大 2 つです。
図にIAM userのアクセスキーとシークレットアクセスキーを使った認証フローの概要を示します。
AWS CodeCommit の SSH 公開キー
AWS CodeCommit リポジトリへのアクセスを認証するユーザー SSH 公開キー。1 度に最大 5 つの SSH 公開キー (アクティブまたは非アクティブ) を持つことができます。
AWS CodeCommit の HTTPS Git 認証情報
AWS CodeCommit リポジトリへの HTTPS 接続の認証に使用できるユーザー名とパスワードを生成します。同時に最大 2 セットの認証情報 (アクティブであれ非アクティブであれ) を保持できます。
Amazon Keyspaces の認証情報 (Apache Cassandra 用)
Apache Cassandra と互換性のある Amazon Keyspaces にアクセスするために使用されます。Amazon Keyspaces に対する認証に使用できるユーザー名とパスワードを生成します。一度に持つことができる認証情報のセットは 2 つまでです (アクティブまたは非アクティブ)。
X.509 デジタル署名用証明書
X.509 証明書を使用して、一部の AWS のサービスに対して安全な SOAP プロトコルリクエストを実行します。一度に持つことができる X.509 証明書 (アクティブまたは非アクティブ) は最大 2 つです。
AWS IAM Identity Center user認証情報
(参考)
ユーザー認証
ユーザーサインイン
IAM Identity Center では、ユーザーはユーザー名を使用して AWS アクセスポータルにサインインします。
このプロセスは、ユーザーの電子メール アドレスに関連付けられたディレクトリに基づいて、リクエストを IAM Identity Center 認証サービスにリダイレクトします。
認証されると、ユーザーは割り当てられた AWS アカウントおよび SaaS アプリケーションにシングル サインオンでアクセスできるようになり、複数のアカウントの認証情報を管理する必要がなくなります。
認証セッション
サインイン セッション: ユーザーが IAM Identity Center にサインインするたびに作成され、最大 90 日間持続します。
アプリケーションセッション: Amazon SageMaker Studio などの AWS 管理アプリケーションにアクセスするためのサインインセッションを使用して取得します。これらのセッションの有効期間は 1 時間で、サインイン セッションが有効である限り自動的に更新されます。
セッションの有効期限とアクセス制御
ユーザーが IAM Identity Center で無効化または削除されると、そのユーザーは新しいサインイン セッションを作成できなくなります。
既存のサインイン セッションは最大 1 時間継続されますが、その間、ユーザーは新しいアプリケーションと IAM ロールのセッションを開始できます。アプリケーション セッションは、サインイン セッションの有効期限が切れた後も最大 1 時間継続できます。
AWS マネジメント コンソールまたは CLI へのアクセス
AWS マネジメント コンソールまたは CLI にアクセスするには、IAM Identity Center サインイン セッションを使用して IAM セッションを取得します。これらの IAM ロール セッションの期間は、管理者が最大 12 時間まで構成できます。
図にIAM Identity Center userがアクセスキー、シークレットアクセスキー、session tokenでCLI等からloginする際の認証フローの概要を示します。
自分たちが使う開発ツール
AWS CLI
(参考)
AWS CLI の公式ドキュメント
AWS コマンドラインインターフェイス (AWS CLI) は、AWS のサービスを管理するための統合ツールです。
さまざまな AWS サービスと対話するための一貫したインターフェイスを提供し、コマンドライン経由で使用できるように設計されており、スクリプトによる自動化が可能です。
AWS CLI の使用を開始するには、まずインストールしてセットアップする必要があります。これには、セキュリティ認証情報、デフォルトの出力形式、AWS リージョンの構成が含まれます。
インストール後は、コマンドラインから複数の AWS サービスを直接制御できます。インストールとセットアップの手順を含む、AWS CLI の使用を開始するための詳細なガイドラインについては、AWS CLI の公式ドキュメントを参照してください。
AWS SDK
(参考)
SDK とは?
Software Development Kit (SDK) は、開発者向けのプラットフォーム固有の構築ツールのセットです。
特定のプラットフォーム、オペレーティングシステム、またはプログラミング言語で実行されるコードを作成するには、デバッガー、コンパイラー、ライブラリなどのコンポーネントが必要です。
SDK は、ソフトウェアの開発と実行に必要なすべてを 1 か所にまとめます。さらに、ドキュメント、チュートリアル、ガイドなどのリソースや、アプリケーション開発を高速化するための API やフレームワークも含まれています。
AWS python SDK(Boto3)
(参考)
Boto3 の公式ドキュメント
Boto3 として知られる AWS SDK for Python を使用すると、Python 開発者は Amazon EC2 や Amazon S3 などの AWS サービスを作成、設定、管理できます。
Boto3 は、オブジェクト指向 API と、AWS サービスへの低レベルのアクセスを提供します。Python 開発者が AWS のサービスを使用するソフトウェアを作成できるように設計されています。
Boto3 のドキュメントでは、SDK を「Boto3」と呼ぶことがよくあります。これは、その機能と使用方法についてのコミュニケーションを簡素化するための慣例です。詳細と詳しい使用方法については、Boto3 の公式ドキュメントを参照してください。
AWS SAM CLI
(参考)
AWS SAM CLIの公式ドキュメント
AWS サーバーレス アプリケーション モデル コマンドライン インターフェイス (AWS SAM CLI) は、AWS SAM テンプレートとサポートされているサードパーティ統合を使用してサーバーレス アプリケーションを構築および実行するためのツールです。
AWS SAM CLI コマンドのドキュメントは、プロンプト ( $Linux 用および>Windows 用)、ディレクトリ仕様、ユーザー入力、置換可能なテキスト、コマンド出力などの特定の形式に従っています。このドキュメント形式の例がsam deployコマンド用に提供されています。
このツールは、AWS でサーバーレス アプリケーションを管理するために不可欠であり、構築、デプロイ、ローカル テストなどの機能を提供します。AWS SAM CLI の使用方法の詳細については、AWS の公式ドキュメントを参照してください。
AWS CDK
(参考)
AWS CDKの公式ドキュメント
AWS Cloud Development Kit (AWS CDK) は、TypeScript、JavaScript、Python、Java、C#、Go などの使い慣れたプログラミング言語を使用してクラウド インフラストラクチャを定義できるツールです。
中程度から高度な経験を持つ AWS ユーザー向けに設計されています。AWS CDK はコードを AWS CloudFormation テンプレートに変換し、AWS リソースをより効率的にデプロイおよび管理できるようにします。
AWS CDK は、さまざまな AWS サービスをサポートしており、S3 バケットや Lambda 関数などのリソースを定義するための構造のライブラリが含まれています。これらの構造は、低レベルの CloudFormation 構造 (L1)、高レベルの厳選された構造 (L2)、アーキテクチャ全体のパターン (L3) などのレイヤーに分類されます。
AWS CDK を使用するには Node.js が必要で、追加の前提条件はプログラミング言語によって異なります。CDK Toolkit は、AWS CDK アプリと対話するためのメインのコマンドライン ツールで、デプロイ、差分、トラブルシューティングなどの機能を提供します。
その他の開発ツール
docker imageのコントロールプレーン(ECS)用のcliツールとしてaws copilot、SPA webプロジェクト構築用にaws amplify、等があります。
(参考)
今後の予定
図と参考文献を追加したいと思います。
ChatGPT × AWS公式Docって微妙な組み合わせと思いつつ、要約してみると意外と違和感がなかったです。
ただ、初学者にとってはAWS公式Doc読まされてるのと変わらない気がするので、図を追加して正式版資料にしたいと思います。
(2024.1.18 暫定で図追記、リソースベースの権限の扱い他についても図を作る、繰り返し読むと微妙な要約ですね今後は最後自分の理解に合わせて修正したいと思います。)
追記
- (2024.1.16) user タイプを追加
- (2024.1.18) リンク先URL修正・追加
- (2024.1.18) 図追加
- (2024.1.31) アクセスキー認証フロー図追加