皆様こんにちは。
AWS CDKを利用してマルチAZ3層アーキテクチャ構築をしていきます。
この記事ではIAMの作成を行います。
1.IAMとは
IAM(Identity and Access Management、アイデンティティおよびアクセス管理)は、組織内でユーザーのデジタルアイデンティティを管理し、適切なリソースへのアクセスを制御するシステムです。IAMは、セキュリティを強化し、データの漏洩や不正アクセスを防ぐための重要な役割を果たします。主な要素にはユーザー管理、認証、認可、監査とコンプライアンス、シングルサインオン(SSO)などがあります。
IAMユーザーの概要
IAMユーザーは、AWSアカウント内で個別の認証情報とアクセス権限を持つエンティティです。各ユーザーには固有のユーザー名、パスワード、アクセスキーが割り当てられ、AWSリソースへのアクセスが可能になります。IAMユーザーは個々の従業員やアプリケーションを代表し、必要な権限のみを付与することで、セキュリティを向上させることができます。
IAMポリシーの概要
IAMポリシーは、IAMシステム内でユーザーやグループがどのリソースにどのようにアクセスできるかを定義するドキュメントです。通常、JSON形式で記述され、アクセスの許可や拒否のルールを設定します。IAMポリシーには、次の2種類があります。
-
カスタムポリシー:組織の特定のニーズに合わせて作成されるポリシーです。管理者が柔軟にアクセス権限を設定できます。
-
管理ポリシー:AWSが提供する標準的なアクセス権限を持つポリシーです。一般的なユースケースに対応しており、迅速に適用できます。
IAMロールの概要
IAMロールは、特定の権限を持つ一連の許可を定義したもので、ユーザーやサービスに一時的に割り当てることができます。ロールは、ユーザーやサービスにアタッチされ、必要な権限を動的に提供することで、柔軟なアクセス管理を実現します。これにより、最小権限の原則を維持しながら、必要な作業を行うことができます。
関連付けた説明
例えば、特定のプロジェクトでデータベースにアクセスする必要がある場合、IAMポリシーを使用してアクセス許可を定義し、そのポリシーを含むIAMロールをデータベースリソースに割り当てます。これにより、プロジェクトメンバーがデータベースにアクセスするときには、IAMロールによって付与された最小限の権限で作業を行うことができ、セキュリティを維持できます。
詳細は公式ドキュメントを参照ください。
2.目的
EC2にて下記2つを実現するためにIAMロールを作成する。
- Cloudwatch Metricsへカスタムメトリクスをプッシュ
- EC2へSSMでの接続
- Secrets ManagerからDBのシークレット値を入手
付与するIAMポリシーは下記2つです。
※今回はAWSが提供する管理ポリシーを使用するためカスタムポリシーの作成は不要
-
CloudWatchAgentAdminPolicy:Amazon CloudWatchエージェントの管理と操作に必要な権限を付与するポリシー
-
AmazonSSMManagedInstanceCore:Systems Manager(SSM)を使用してEC2インスタンスを管理するために必要な権限を付与するポリシー
-
SecretsManagerReadWrite:Secrets Manager のシークレットに対して読み取りなどの操作を行うための権限を付与するポリシー
3.構成図
4.IAMロール作成
下記のようにIAMロールを作成します。
"ec2.iam.Role"クラスを使用
論理ID(テンプレート内で一意)の指定をしたのち、詳細のプロパティを指定しています。
プロパティは下記
使用するプロパティ | 設定値 | 説明 |
---|---|---|
assumed_by | iam.ServicePrincipal("ec2.amazonaws.com") | ロールを引き受けることができるエンティティを指定 ※今回はEC2 |
managed_policies | iam.ManagedPolicy.from_aws_managed_policy_name("ソースコード参照") | IAMロールにアタッチするポリシーを指定 |
"Tags.of()"メソッドを使用してNameタグをつけます(書式は下記)
Tags.of("リソース名").add("キー", "値")
ソースコード
# IAM ロールの作成
self.ec2_role = iam.Role(self, "kitaya-role-ec2",
assumed_by=iam.ServicePrincipal("ec2.amazonaws.com"),
role_name="kitaya-role-ec2",
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("CloudWatchAgentAdminPolicy"),
iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSSMManagedInstanceCore"),
iam.ManagedPolicy.from_aws_managed_policy_name("SecretsManagerReadWrite")
]
)
Tags.of(self.ec2_role).add("Name", "kitaya-role-ec2")
5.感想
IAMについての理解を深めることができました。
今回はAWS提供の管理ポリシーを使用しましたがカスタムポリシーの作成も今後してみたいと思いました。