Serverless Framework で AWS SSO
概要
Serverless Framework で AWS への認証をする際にアクセスキーを発行して利用している方も多いのではないでしょうか?
ですがアクセスキーは漏洩した際のリスクが高いので基本的には推奨されません。
シングルサインオン (SSO) を利用してログインすることができる場合にはアクセスキーを発行せずに認証できるのでそちらを利用しましょう。
AWS SSO
前提として SSO が既に構築されているものとします。
AWS CLI で SSO の設定をしておきます。
AWS CLI のインストール
AWS CLI をインストールします。
既にインストール済みの場合はスキップしてください。
各 OS でのインストール方法はリンク先を参照してください。
一例として Windows PowerShell のコマンドを載せておきます。
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
SSO の設定
通常は aws configure
で設定をすると思いますが代わりに aws configure sso
を実行することで SSO 用の設定をすることができます。
aws configure sso
コマンドを実行すると SSO start URL と SSO region を聞かれるので入力します。
SSO region は SSO 用の region なので気を付けてください。
ブラウザが開くのでログインします。
Allow で許可したら CLI へ戻ります。
アカウントを選択しロールも選択します。
(1つしかない場合は自動選択?)
AWS CLI で使用する region と output format を聞かれるので入力します。
こちらが通常の aws configure
でも聞かれる region になります。
CLI profile name で名前も付けておきましょう。
default
にすると aws --profile
や serverless --aws-profile
の指定なしで適用されるデフォルト設定になります。(意図しない実行を防ぐためには別の名前を付けることを推奨します)
CLI default client Region: ap-northeast-1
CLI default output format: json
CLI profile name: serverless-example
確認
%USERPROFILE%\.aws
(Windows) または ~/.aws
(Linux & Mac) にファイルが生成されているので確認しておきましょう。
ちゃんと実行できるかも適当なコマンドを実行して確認しておきます。
aws s3 ls --profile serverless-example
SSO プラグイン
Serverless Framework には AWS SSO をサポートする Serverless Better Credentials
というプラグインがあります。
インストール
serverless.yml
があるディレクトリでインストールします。
npm install --save-dev serverless-better-credentials
設定
serverless.yml
の plugins
に serverless-better-credentials
を足します。
service: example
frameworkVersion: '3'
plugins:
- serverless-better-credentials
provider:
# ...
環境変数
環境変数に AWS_SDK_LOAD_CONFIG=1
を追加します。
一例として Windows PowerShell のコマンドを載せておきます。(恒久的に適用したい場合はそれ用の設定をしてください)
$Env:AWS_SDK_LOAD_CONFIG = 1
デプロイ
後は --aws-profile
を指定して通常通りにデプロイするだけです。
serverless deploy --aws-profile serverless-example
Discussion