Dev AWSome Day 2018の復習① ~IAM編~
Dev AWSome Day 2018の復習① ~IAM編~:
2018年10月30日(火)に開催されたAWSのイベント「Dev AWSome Day 2018」に参加してきましたので、忘れないように復習してみます。
なお、宣伝チックなお話とか、本筋とは関係ないお話は全てカットします。
※当日時間が足らなくて、ほとんど写経状態だったので、じっくりと取り組んでみます
AWSでサービスを起動したり設定したりするためには、以下の3つの方法があります。
ハンズオン中では「Cloud9」からAWS CLIを実行していましたが、もったいないお化けが出てしまいますので、この復習ではローカルなPCにAWS CLIをインストールして実行します。
インストールの仕方はこちらを参考にしてください。
アクセス管理には「認証」と「認可」の設定が必要となります。
「IAMユーザ名」と「パスワード」を登録します。
以降、マネージメントコンソールへは「IAMユーザ名」と「パスワード」で認証されます。
AWS CLIとAWS SDKsは「アクセスキー」で認証されます。
「アクセスキー」は「アクセスキーID」と「シークレットアクセスキー」で構成されます。
権限を記述しているJSONのドキュメントになります。
IAMポリシーはIAMユーザ、IAMグループ、IAMロールに割り当てられます。
IAMロールに認証情報はなく、IAMユーザ、アプリケーション、サービスがIAMロールを引き受けます。
保存したURLでサインインしてみます。
以降の作業は、作成したIAMユーザで行います。
新しくEC2を立ち上げてみます。
そこで
を実行し、IAMユーザのアクセスキーIDとシークレットアクセスキーを設定します。
(つまりIAMユーザに割り当てられたIAMポリシーの設定内容でアクセスするということ)
設定したアクセスキーIDとシークレットアクセスキーは「~/.aws/credentials」ファイルに保存されます。
以降、このインスタンス上のプログラム(AWS SDKsを使用)からサービスへのアクセスが可能になります。
例えばPythonで、以下のようなコードを実行してみます。
するとこんな感じの出力になります。
IAMロールを作成し、そこにポリシーを設定して、サービスに設定する方法もあります。
先に、「~/.aws/credentials」ファイルを削除しておきます。
(ここでは、前に作成したIAMポリシーではなく、IAMロールに設定したアクセス権限でプログラムがアクセスできるようになります)
ただし今度は「~/.aws/credentials」ファイルは作成されていません。
イマイチIAMはわかりにくいのですが、「認証」と「認可」をちゃんと切り分けて考えると、多少は理解しやすくなるような気がします。
また同様に、「IAMユーザ」「IAMポリシー」「IAMロール」が理解できれば良いような気がします。
なお、今回のハンズオンは、この「認証」と「認可」を理解するのが、一番のポイントだったような気がします。
2018年10月30日(火)に開催されたAWSのイベント「Dev AWSome Day 2018」に参加してきましたので、忘れないように復習してみます。
なお、宣伝チックなお話とか、本筋とは関係ないお話は全てカットします。
※当日時間が足らなくて、ほとんど写経状態だったので、じっくりと取り組んでみます
準備
AWSでサービスを起動したり設定したりするためには、以下の3つの方法があります。- マネージメントコンソールから操作する(その先でAPIを呼び出している)
- AWS CLIからAPIを呼び出す
- AWS SDKsからAPIを呼び出す
ハンズオン中では「Cloud9」からAWS CLIを実行していましたが、もったいないお化けが出てしまいますので、この復習ではローカルなPCにAWS CLIをインストールして実行します。
インストールの仕方はこちらを参考にしてください。
IAM(Identity and Access Management)のお話
アクセス管理には「認証」と「認可」の設定が必要となります。- 認証(IAMユーザ)
- 誰がそのAPIを呼び出したのかを確認する
- 認証情報(ユーザ名/パスワード)を提示することで確認する
- 認可(IAMポリシー)
- APIを呼び出した人(もしくはプログラム)が、そのAPIを実行できる権限を持っているかを確認する
- 以下の2つの観点でアクセスできるかをチェックする
- どのリソースに対して
- どのような操作(=APIコール)
認証(IAMユーザ)
「IAMユーザ名」と「パスワード」を登録します。以降、マネージメントコンソールへは「IAMユーザ名」と「パスワード」で認証されます。
AWS CLIとAWS SDKsは「アクセスキー」で認証されます。
「アクセスキー」は「アクセスキーID」と「シークレットアクセスキー」で構成されます。
認可(IAMポリシー)
権限を記述しているJSONのドキュメントになります。IAMポリシーはIAMユーザ、IAMグループ、IAMロールに割り当てられます。
IAMロール
IAMロールに認証情報はなく、IAMユーザ、アプリケーション、サービスがIAMロールを引き受けます。
実際に試してみる
IAMポリシーの作成
- マネージメントコンソールを開く
- 「IAM」を選択
- 「ポリシー」を選択
- 「ポリシーの作成」ボタンをクリック
- 「JSON」タブをクリック
- JSON形式で権限を設定
- 「Review policy」ボタンをクリック
- IAMポリシーの「名前」を入力
- 「Create policy」ボタンをクリック
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DevAWSomePolicy01", "Effect": "Allow", "Action": [ "sns:*", "application-autoscaling:*", "tag:GetResources", "cognito-identity:*", "s3:*", "apigateway:*", "logs:*", "cloudformation:*", "dynamodb:*", "cloud9:*", "rekognition:*", "cognito-sync:*", "iam:*", "cloudwatch:*", "lambda:*", "ec2:*", "cognito-idp:*" ], "Resource": "*" } ] }
IAMユーザの作成
- マネージメントコンソールを開く
- 「IAM」を選択
- 「ユーザー」を選択
- 「ユーザーを追加」ボタンをクリック
- ユーザー詳細の設定で以下を入力
- ユーザー名
- アクセスの種類
※「プログラムによるアクセス」と「AWS マネジメントコンソールへのアクセス」の両方をチェック - コンソールのパスワード
※「カスタムパスワード」を選択して、パスワードを設定 - パスワードのリセットが必要
※チェックを外す
- 「次のステップ:アクセス権限」ボタンをクリック
- 「既存のポリシーを直接アタッチ」をクリック
- 作成したIAMポリシーをチェックし、「次のステップ:確認」ボタンをクリック
- 「ユーザーの作成」ボタンをクリック
- 表示されているURLを保存(IAMユーザでサインインするときに使用します)
- 「.csv のダウンロード」ボタンをクリックし、ローカルにCSVファイルをダウンロードします
ここにアクセスキーIDとシークレットアクセスキーが設定されています - 「閉じる」ボタンをクリック
サインインの確認
保存したURLでサインインしてみます。以降の作業は、作成したIAMユーザで行います。
プログラムへの認可(その1)
新しくEC2を立ち上げてみます。そこで
> aws configure
(つまりIAMユーザに割り当てられたIAMポリシーの設定内容でアクセスするということ)
AWS Access Key ID [None]: AKIAI7K4HXXXXXXXXXXX AWS Secret Access Key [None]: Is9vUlrXXXXXXX+/zIWfuPXXXXXXXXXXX Default region name [None]: us-west-2 Default output format [None]:
以降、このインスタンス上のプログラム(AWS SDKsを使用)からサービスへのアクセスが可能になります。
例えばPythonで、以下のようなコードを実行してみます。
import boto3 client = boto3.client('ec2') client.describe_instances()
プログラムへの認可(その2)
IAMロールを作成し、そこにポリシーを設定して、サービスに設定する方法もあります。先に、「~/.aws/credentials」ファイルを削除しておきます。
> rm ~/.aws/credentials
IAMロールの作成
- マネージメントコンソールを開く
- 「IAM」を選択
- 「ロール」を選択
- 「ロールの作成」ボタンをクリック
- 今回は「EC2」を選択し、「次のステップ: アクセス権限」ボタンをクリック
- 「AmazonEC2ReadOnlyAccess」にチェックして、「次のステップ:確認」ボタンをクリック
※もちろん、自分で作成したIAMポリシーを選択しても良い - 「ロール名」を入力し、「ロールの作成」ボタンをクリック
(ここでは、前に作成したIAMポリシーではなく、IAMロールに設定したアクセス権限でプログラムがアクセスできるようになります)
- マネージメントコンソールを開く
- 「EC2」を選択
- 「インスタンス」を選択
- 先程起動したインスタンスを選択し、右クリック
- 「インスタンスの設定」-「IAM ロールの割り当て/置換」を選択
- 「IAMロール」に先ほど作成したIAMロールを選択し、「適用」ボタンをクリック
- 「閉じる」ボタンをクリック
ただし今度は「~/.aws/credentials」ファイルは作成されていません。
まとめ
イマイチIAMはわかりにくいのですが、「認証」と「認可」をちゃんと切り分けて考えると、多少は理解しやすくなるような気がします。また同様に、「IAMユーザ」「IAMポリシー」「IAMロール」が理解できれば良いような気がします。
なお、今回のハンズオンは、この「認証」と「認可」を理解するのが、一番のポイントだったような気がします。
コメント
コメントを投稿