AWS 勉強会 – 準備編
はじめに
こんにちは、システム開発第一グループの kishinami です。
ここ数年は AWS を使用したプロジェクトでお世話になっています。
クラウドサービスとしては AWS がトップのシェア率となっていますが、AWS の知識はあっても実際には触ったことがない社員が居た為、興味がある社員向けに勉強会を開催しました。
以上を踏まえて、その勉強会を開催するにあたっての準備・確認作業を、記事にまとめてみたいと思います。
目的
ユーザーを作成後、そのユーザーへ Administrator ロールを付与するなどすれば、AWS 内の各サービスやリソースの作成・編集が可能です。
ただ、実際の開発の際は、必要な時に編集可能なロールへ切り替えて操作することが多いと思うので、勉強会でも同様にロールの切替の機構を構築して進めていきたいと思いました。
実現したいことを図にすると、以下のような内容になります。
機構を構築できたら、テストユーザーを作成して、動作検証を行ってみます!
構築手順
AWS マネージコンソール上での構築手順となります。
①ロールの作成
まずは、編集可能なロール( AdminRole
)を作成します。
- IAM コンソールの左側ペインから
ロール
をクリック、更に右上のロールを作成
をクリック - 表示された
信頼されたエンティティを選択
画面で以下を選択して次へ
をクリック- 信頼されたエンティティタイプ:AWS アカウント
- AWS アカウント:このアカウント(xxxxxxxxxxxx)
-
許可を追加
画面で以下を選択して次へ
をクリック- 許可ポリシー:AdministratorAccess
-
名前、確認、および作成
画面で以下を選択してロールを作成
をクリック- ロールの詳細
- ロール名:AdminRole
- 説明:適宜入力
- ロールの詳細
なお、作成されたロールの信頼ポリシーは以下の内容となっています。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
補足
本来であれば、触れるサービスの絞り込みを行うべきかもしれませんが、面倒なので 色々なサービスに触れてほしいので、 AdministratorAccess
を付与しています。
②ポリシーの作成
続いて、先ほど作成したロール( AdminRole
)への切替( AssumeRole
)を許可するポリシー( PromoteAdminRolePolicy
)を作成します。
- IAM コンソールの左側ペインから
ポリシー
をクリック、右上のポリシーの作成
をクリック - 表示された
アクセス許可を指定
画面で以下を選択して次へ
をクリック- サービスを選択:STS
- アクション許可:AssumeRole
- リソース:作成したロール(
AdminRole
)の ARN
- サービスを選択:STS
-
確認して作成
画面で以下を選択してポリシーの作成
をクリック- ポリシーの詳細
- ポリシー名:PromoteAdminRolePolicy
- 説明:適宜入力
- ポリシーの詳細
③ユーザーグループの作成
最後に、デフォルトで許可するロールと、作成したロール( AdminRole
)への切替を許可する2つのユーザーグループを作成します。
デフォルトで許可するロールのユーザーグループ
- IAM コンソールの左側ペインから
ユーザーグループ
をクリック、右上のグループを作成
をクリック - 表示された
ユーザーグループを作成
画面で以下を選択してユーザーグループを作成
をクリック- グループに名前を付ける
- ユーザーグループ名:適宜
- 許可ポリシーを添付:IAMUserChangePassword、ReadOnlyAccess
- グループに名前を付ける
作成したロール( AdminRole
)への切替を許可するユーザーグループ
- IAM コンソールの左側ペインから
ユーザーグループ
をクリック、右上のグループを作成
をクリック - 表示された
ユーザーグループを作成
画面で以下を選択してユーザーグループを作成
をクリック- グループに名前を付ける
- ユーザーグループ名:適宜
- 許可ポリシーを添付:作成したポリシーを付与
- グループに名前を付ける
以上で構築が完了しました。
動作検証
テストユーザーを作成して、マネージコンソール上とローカルで動作検証を行ってみます。
テストユーザーの作成
まずは、動作検証用のテストユーザーを作成します。
- IAM コンソールの左側ペインから
ユーザー
をクリック、右上のユーザーの作成
をクリック - 表示された
ユーザーの詳細を指定
画面で以下を選択して次へ
をクリック- ユーザーの詳細
- ユーザー名:test-user
- AWS マネジメントコンソールへのユーザーアクセスを提供する:チェック
- ユーザータイプ:IAM ユーザーを作成します
- コンソールパスワード:自動生成されたパスワード
- ユーザーの詳細
-
許可を設定
画面で以下を選択して次へ
をクリック- 許可のオプション:ユーザーをグループに追加
- ユーザーグループ:先ほど作成した2つのユーザーグループを付与
-
確認して作成
画面で内容を確認してユーザーの作成
をクリック
AWS マネージコンソールで検証
作成したテストユーザーに ReadOnly
権限が付与されていることを確認してみます。
- 作成したテストユーザーでログイン。
- S3 コンソールの左側ペインから
バケット
をクリック、既存バケット群が表示されることを確認 - 適当な既存バケットへ以下の操作でファイルをアップロードして失敗することを確認
- 右上の
アップロード
をクリック -
ファイルとフォルダ
で適当なローカルファイルを選択して、アップロード
をクリック - エラー(アクセス拒否)が発生してアップロードされない
- 右上の
続いて、Administrator
権限へ切り替えて確認してみます。
- 右上のアカウント(test-user@xxxx-xxxx-xxxx)をクリック、
ロールの切り替え
をクリック -
ロールの切り替え
ダイアログで以下を入力して、ロールの切り替え
をクリック- アカウント ID:xxxxxxxxxxx
- IAM ロール名:作成したロール(
AdminRole
)名 - 表示名:適宜
- 表示色:適宜
- 切り替え後、既存バケットへのファイルのアップロードを再度実行すると成功!
ローカル(CLI)で検証
最後に、ローカル(CLI)を使用して確認してみます。
アクセスキーの準備
最初に、以下の手順でアクセスキーを作成・取得します。
- 作成したテストユーザーでログイン。
- IAM コンソールの左側ペインから
ユーザー
をクリック、一覧からtest-user
をクリック -
アクセスキーを作成
をクリック - 表示された画面で
コマンドラインインターフェイス (CLI)
を選択して、アクセスキーを作成 - 作成されたアクセスキー(シークレットアクセスキー)を控えておきます
設定/認証ファイルの作成
自身のルートフォルダ配下に .aws
フォルダを生成した上で、以下のファイルを配置します。
credentials (認証ファイル)
[default]
aws_access_key_id = アクセスキー
aws_secret_access_key = シークレットアクセスキー
config (設定ファイル)
[default]
region = ap-northeast-1
output = json
[profile AdminRole]
region = ap-northeast-1
role_arn = 作成したロール( `AdminRole` )の ARN
output = json
source_profile = default
動作検証
マネージコンソール同様、まずは ReadOnly
権限の確認を行います。
-
aws s3 ls
を実行すると、既存バケットの一覧が表示されることを確認 -
aws s3 rm s3://xxx(先に上げたファイルのパス)
でマネージコンソールでアップロードしたファイルを削除を実行すると、エラー(アクセス拒否)が発生して削除が失敗
続いて、Administrator
権限へ切り替えて確認してみます。
-
export AWS_PROFILE=AdminRole
を実行 - 再度
aws s3 rm s3://xxx(先に上げたファイルのパス)
を実行すると成功!
最後に
以上でロールの切替の機構が構築出来ました 👏
勉強会向けに始めた準備作業ですが、個人的にも理解の整理が行えて良かったです!
因みに、本来であれば、編集権限への切り替えを許可する機構も必要とは思います。
(もっと言えば、 IAM IdC でユーザー管理するのが今風なのかも?)
参考サイト
構築にあたって参考にしたサイトです、感謝 🙇♂️
- https://dev.classmethod.jp/articles/iam-role-passrole-assumerole/
- https://blog.serverworks.co.jp/assume-role-divedeep