🔑

Serverless Framework で AWS SSO

2022/11/17に公開

概要

Serverless Framework で AWS への認証をする際にアクセスキーを発行して利用している方も多いのではないでしょうか?
ですがアクセスキーは漏洩した際のリスクが高いので基本的には推奨されません。
シングルサインオン (SSO) を利用してログインすることができる場合にはアクセスキーを発行せずに認証できるのでそちらを利用しましょう。

AWS SSO

前提として SSO が既に構築されているものとします。
AWS CLI で SSO の設定をしておきます。

AWS CLI のインストール

AWS CLI をインストールします。
既にインストール済みの場合はスキップしてください。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

各 OS でのインストール方法はリンク先を参照してください。
一例として Windows PowerShell のコマンドを載せておきます。

CLI (Windows PowerShell)
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

SSO の設定

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-sso.html

通常は aws configure で設定をすると思いますが代わりに aws configure sso を実行することで SSO 用の設定をすることができます。

CLI
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 --profileserverless --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) にファイルが生成されているので確認しておきましょう。

ちゃんと実行できるかも適当なコマンドを実行して確認しておきます。

CLI
aws s3 ls --profile serverless-example

SSO プラグイン

Serverless Framework には AWS SSO をサポートする Serverless Better Credentials というプラグインがあります。

https://www.serverless.com/plugins/serverless-better-credentials

インストール

serverless.yml があるディレクトリでインストールします。

CLI
npm install --save-dev serverless-better-credentials

設定

serverless.ymlpluginsserverless-better-credentials を足します。

serverless.yml
service: example

frameworkVersion: '3'

plugins:
  - serverless-better-credentials

provider:
# ...

環境変数

環境変数に AWS_SDK_LOAD_CONFIG=1 を追加します。
一例として Windows PowerShell のコマンドを載せておきます。(恒久的に適用したい場合はそれ用の設定をしてください)

CLI (Windows PowerShell)
$Env:AWS_SDK_LOAD_CONFIG = 1

デプロイ

後は --aws-profile を指定して通常通りにデプロイするだけです。

CLI
serverless deploy --aws-profile serverless-example

Discussion