この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
皆様こんにちは。
今回はCloudFormatonを利用して高可用性アーキテクトの構築をしていきます。
この記事ではIAMポリシー、IAMロールの作成、IAMポリシーをIAMロールに追加できているかマネージメントコンソールで確認します。
1.高可用性アーキテクト構築目次
2.IAMサービス概要
2-1.IAMとは
AWS Identity and Access Management (IAM) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです。IAM により、誰を認証 (サインイン) し、誰にリソースの使用を承認する (アクセス権限を持たせる) かを制御します。
参照:IAMサービス概要
2-2.アカウント登録
- AWSを利用するには最初にAWSアカウントを作成する必要があり、アカウント作成時に指定したメールアドレスとパスワードを使用することで、AWSマネジメントコンソールにログインできます。
2-3.MFA(多要素認証)
ソフトウェア | ハードウェア | ハードウェア | |
---|---|---|---|
製品 | Google Authenticator, Authy 2-Factor Authentication |
Yubikeyセキュリティー | Gemalto |
形式 | スマホアプリ | USBスティック型 | トークン型 |
コスト | 無料 | 有料(4,500円程度) | 有料(2,000円程度) |
機能 | 単一のデバイスで複数のトークンをサポート | 単一のセキュリティキーで複数のルートユーザー/IAMユーザーをサポート | 不正開封防止用キーホルダー型デバイスで内蔵電池により単体でOTPを発行 |
2-4.ルートユーザー
-
IAMユーザーは個人のアカウントに紐づくアカウントです。その個人に必要な権限を設定したIAMポリシーをアタッチします。
-
最初に作成されたAWSアカウントは「ルートユーザー」と呼びます。アカウント内の全てのAWSのサービス、リソースに対しフルアクセス権限があるためルートユーザーの乗っ取りなどの被害を防ぐためにセキュリティ対策をします。
-
セキュリティ強化。アカウントに対し強度の高いパスワード設定、ログイン時のMFA(多要素認証)を設定する必要があります。
2-5.IAMユーザー
- ルートユーザーはAWSの全ての操作が可能なため、管理者アクセスが必要な担当者ごとに新しいIAMユーザー、IAMグループを作成します。
- AdministratorAccess管理ポリシーをアタッチした「管理者」ユーザーグループにそのユーザーを配置することで、そのユーザーを管理者にします。
- その後、管理者ユーザーグループのユーザーは AWS アカウントのユーザーグループ、ユーザーなどを設定する必要があります。その後の操作はすべて、ルートユーザーではなくAWS アカウントのユーザーとそのキーを通じて行う必要があります。ただし、一部のアカウントおよびサービス管理タスクでは、ルートユーザー認証情報を使用してログインする必要があります。
参照:最初の IAM 管理者のユーザーおよびユーザーグループの作成
2-6.IAMポリシー
- 今回はCloudWatch、S3の権限を設定したポリシーを作成したいため、それをアタッチしたIAMロールを作成します。
- IAMロールを作成し、EC2にアタッチしなければカスタムメトリクスの発行とS3に対しての操作ができないため上記の条件を含むIAMロールを作成します。
- 上記の内容を作成しても権限が付与されていません。そのためIAMポリシーは設定するAWSサービス、ストレージのリソースに対しアクセス制御の許可、拒否を定義します。
2-7.類似AWSリソース
- 「AWS Sngle Sign-On」(AWS SSO)
AWS上でワークフォースアイデンティティを作成、接続しAWS組織全体のアクセスを一元的に管理するものです。 - 「Amaon Cognito」
Web、モバイルアプリの認証、承認、ユーザー管理機能を提供
3.構築したいIAM構成図
- まず IAMポリシーにカスタム管理ポリシーで”CloudWatchAlarm”、”S3”のポリシー宣言をします。
- CloudWwatchAlarmにカスタムメトリクスをプッシュする権限をもったポリシー設定
- インスタンスがS3の読み書きをできる権限をもったポリシー宣言をします。
4.全体構築ソースコード
#IAMPolicy
Resources:
ManagedPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName: hebiishi-IAM-CF
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- "cloudwatch:PutMetricData"
- "ec2:DescribeTags"
Resource: "*"
- Effect: Allow
Action:
- "s3:ListBucket"
Resource: "arn:aws:s3:::hebiishi-wordpress-s3"
- Effect: Allow
Action:
- "s3:PutObject"
- "s3:GetObject"
- "s3:DeleteObject"
Resource: "arn:aws:s3:::hebiishi-wordpress-s3/*"
Role:
Version: "2012-10-17"
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
Action:
- "sts:AssumeRole"
Path: /
ManagedPolicyArns:
- arn:aws:iam::xxx:policy/hebiishi-IAM-CF
InstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Path: /
Roles:
- !Ref Role
Outputs:
InstanceProfileOutput:
Value: !Ref InstanceProfile
Export:
Name: InstanceProfile
5.IAM構築手順
下記のIAMポリシーを作成します。
5-1.IAMポリシーの作成
CloudWatchAlarm
- CloudWwatchAlarmにカスタムメトリクスをプッシュする権限をもったポリシー設定
- Type: AWS::IAM::ManagedPolicy リソースタイプを記述します。
- Version: "2012-10-17" 日付は最新のテンプレート形式のバージョンになります。*現在の唯一の有効な値になります。
- Effect: Statement内のActionを許可するか拒否するか指定
- Action: Effectによって許可またはDeny拒否される操作を定義する
- Resource: EffectとActionの対象となるリソース
引用:ポリシー要素の指定
使用オプション | 設定値 | 説明 |
---|---|---|
ManagedPolicyName | hebiishi-IAM-CF | IAMポリシー名 |
Action | ①cloudwatch:PutMetricData, ②ec2:DescribeTags |
①インスタンスがカスタムメトリクスを発行できる権限付与 ②カスタムメトリクス発行時に必要なインスタンス情報をインスタンス自身が取得できる権限を与えています。 |
Resource | "*" | EffectとActionの対象となるリソース |
S3
- インスタンスがS3の読み書きをできる権限をもったポリシー宣言をします。
- s3:ListBucketで情報取得できる権限付与する指定をしています。
- s3:(PutObject、GetObject、DeleteObject)で下記の指定値を設定しています。
使用オプション | 設定値 | 説明 |
---|---|---|
Action | ①s3:ListBucket ②s3:PutObject ③s3:GetObject ④s3:DeleteObject |
①リソースで指定したS3の情報を取得できる権限付与 ②インスタンスがS3に対し画像をアップロードできる権限付与 ③インスタンスがS3に対し画像を取得できる権限付与 ④インスタンスがS3の画像を削除できる権限 |
Resource | arn:aws:s3:::hebiishi-wordpress-s3 | 特定のS3を指定 |
ManagedPolicyArns | 1.arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy 2.arn:aws:iam::aws:policy/AmazonS3FullAccess |
1.CloudWatch 収集(ログ&カスタムメトリクス) 2.S3に対しWordPress画像のアップロード |
#IAMPolicy
Resources:
ManagedPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName: hebiishi-IAM-CF
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- "cloudwatch:PutMetricData"
- "ec2:DescribeTags"
Resource: "*"
- Effect: Allow
Action:
- "s3:ListBucket"
Resource: "arn:aws:s3:::hebiishi-wordpress-s3"
- Effect: Allow
Action:
- "s3:PutObject"
- "s3:GetObject"
- "s3:DeleteObject"
Resource: "arn:aws:s3:::hebiishi-wordpress-s3/*"
5-2.IAMロールの作成
下記はIAMロールの設定項目です。
- マネージドポリシーをIAMロールにアタッチする必要があります。
引用:IAM でのポリシーとアクセス許可
使用オプション | 設定値 | 説明 |
---|---|---|
Action | sts:AssumeRole | ロールに対し付与するアクション |
ManagedPolicyArns | arn:aws:iam::xxx:policy/hebiishi-IAM-CF | アタッチしたいポリシーのARNを入力 |
Role:
Version: "2012-10-17"
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
Action:
- "sts:AssumeRole"
Path: /
ManagedPolicyArns:
- arn:aws:iam::xxx:policy/hebiishi-IAM-CF
5-3.確認
IAMポリシー確認内容
- AWSマネジメントコンソールから、IAMポリシー、IAMロールが作成されているか確認します。
- IAMポリシーを作成時に指定した名前で、IAMポリシーマネジメントコンソールで検索し指定したポリシー名をクリックします。
- ”ポリシーの使用状況”からアタッチされている状況が確認できました。
IAMロール確認内容
- IAMロールのマネージドコンソールから作成したIAMロールが確認できます。
”アクセスアドバイザー”からロールに付与されたサービスのアクセス許可が確認できます。
6.感想
最初はIAMポリシー、IAMロールの公式ドキュメントを参照しても記述内容に問題がある事に気づくのに時間が掛かっていて困りましたが、構築したい内容の作成できて良かったです。今後作成する際に、今回作成した方法を参考に知識、技術をい深めていきたいと思います。