fu3ak1's tech days

何事もシンプルに。主にAWS関連の記事を書いています

AWS Organizationsを活用したマルチアカウントのセキュリティサービス使用方法 ~1. IAM、AWS SSO~

Organizationsを活用したセキュリティサービスの活用、第一弾は認証・認可にかかわるIAMとAWS SSOについて見ていきたいと思います。

Organizationsの紹介(はじめに編)はコチラ

シングルアカウントの場合

AWSアカウントを1つで運用する場合、ユーザーの認証・認可では以下の対応が必要になります。

  • ルートユーザの保護
  • 管理者および利用者のIAMユーザーの作成

それぞれマルチアカウントになるとどうするのが良いのか見ていきたいと思います。

ルートユーザの保護

ルートユーザとは、AWSアカウント作成時に設定したメールアドレスとパスワードでログインできるユーザのことを指します。Organizations経由でAWSアカウントを作成した場合も、ルートユーザは同じく存在します。

このルートユーザを保護するために、「強力なパスワードの設定」と「多要素認証(MFA)の有効化」を行いますが、現時点でOrganizationsから複数アカウント一括でこの設定をする方法はありません。そのため、各アカウントのルートユーザーでログインしてパスワードおよびMFAの設定を行う必要があります。

Organizationsからアカウントを作成した場合、AWS側でランダムにルートユーザーのパスワードが設定されます。利用者にこのパスワードは通知されないため、パスワードの初期化を行ってログインを行います。

ログイン後、MFAの有効化を行います。

f:id:fu3ak1:20201225100817p:plain

MFAの設定以外にもルートユーザのみ設定可能な以下のような項目は合わせて設定しておくと良いでしょう。

※追記:請求情報、Cost Exploerはマネジメントアカウント側で有効にすることで組織内のアカウント全てで有効になります。

  • IAMユーザーの請求情報アクセス許可 →マネジメント(親)アカウントのみでOK
  • Cost Explorerの有効化  →マネジメント(親)アカウントのみでOK
  • サポートプランの変更

ここまではシングルアカウントでやっていた作業を各アカウントそれぞれで実施するだけですね。

Organizationsを使用してルートユーザの保護方法として、Service Control Policy(SCP)を使用する方法もあります。

SCPは前回の記事でも記載のとおり、複数のアカウントにまとめてIAMポリシーのような形でポリシーを記載して、実行できる操作を制限できる機能です。

AWS公式ドキュメントにも以下のような例があり、この例ではルートユーザのEC2操作をDenyしています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RestrictEC2ForRoot",
      "Effect": "Deny",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::*:root"
          ]
        }
      }
    }
  ]
}

ただし、すべてのルートユーザの操作を拒否できるわけではないため注意が必要です。拒否が効かない内容は以下のドキュメントに書いてあります。

docs.aws.amazon.com

ルートユーザの保護はここまでです。

IAMユーザの作成、管理

シングルアカウントの場合、アカウント内の利用用途に応じて、用途ごとにIAMグループを作成し、個人ごとのIAMユーザーをグループに適用していくのが良いかと思います。 複数アカウントになった場合、アカウントごとにIAMユーザーを作成していくと、認証情報(ID、パスワード、アクセスキー)が多くなり、管理も煩雑になります。 認証情報が多くの場所にできると、セキュリティリスクにもなります。

そこで認証情報の一元管理ができ、Organizationsとも連携できる機能がAWS SSOAWS Single Sign-On)です。概要と開始方法を書いていきます。

AWS SSOとは

AWS SSOは、複数AWSアカウントの認証情報を一元管理してシングルサインオンの機能を提供するサービスです。 ID、パスワードはもちろん、認可の情報(IAMポリシー、どのActionができるか)も合わせて一元管理できるすばらしいサービスです。

実際の設定と画面を見たほうがわかりやすいと思いますので、開始方法をまずは書いていきます。

AWS SSOの開始方法

以下のような構成で試していきます。マネジメント配下に2アカウントあり、それぞれ別のOU(組織単位)に属しています。 OUには複数アカウント所属することも可能です。

AWS SSOは、アカウントの委任には対応していないため、マネジメントアカウント上で設定する必要があります。

f:id:fu3ak1:20201225104833p:plain

なお、AWS SSOで管理するIDはMicrosoft Active Directoryなど、外部のIDプロバイダーを指定することも可能です。今回はAWS内でできる限り完結するために、AWS SSO内でIDの設定を行いたいと思います。

Azure ADでの設定方法は以下の記事で書いていますので、参考にしてもらえればと思います。(一部設定作業は今回と同様になります。)

fu3ak1.hatenablog.com

それでは設定していきます。 マネジメント(親)アカウントのIAMユーザーでログインします。

AWS SSO画面に遷移し、有効にします。

f:id:fu3ak1:20201219230930p:plain

Organizationsの組織が作成されていない場合は、以下のとおり表示されます。 AWS組織の作成を押すことで、組織が自動作成されます。

Organizations側から組織を作成済みであればこの画面は出ないかと思います。

f:id:fu3ak1:20201218225714p:plain

組織の新規作成時は、メールの検証が必要となるため、アカウントのメールアドレスに届いたメールを確認して青いボタンを押しておきます。

f:id:fu3ak1:20201218225915p:plain

30秒ほどでSSOの設定は完了すると思います。

ユーザー、グループの作成

ユーザー単独ではなくグループ単位で権限管理するため、まずはグループを作成します。

f:id:fu3ak1:20201225113313p:plain

管理者用にadminというグループを作成します。

f:id:fu3ak1:20201225113340p:plain

続いてはユーザーです。

f:id:fu3ak1:20201225113452p:plain

必須項目であるユーザー名、メールアドレス、氏名情報のみ入力します。

f:id:fu3ak1:20201225124704p:plain

先ほど作成したadminグループに所属させ、ユーザーを追加します。

f:id:fu3ak1:20201225125051p:plain

以下のように登録したメールアドレスにメールが届くので青いボタンを押しておきます。

f:id:fu3ak1:20201225125502p:plain

パスワードを設定してログインはできますが、まだAWSアカウントの設定をしていないためアプリケーションが無いと表示されます。

f:id:fu3ak1:20201225125618p:plain

f:id:fu3ak1:20201225125705p:plain

アクセス権限セットとアカウントの設定

AWSアカウントにログインできるよう設定していきます。まずは権限を設定するアクセス権限セットです。

f:id:fu3ak1:20201225125906p:plain

今回はAWS側で職務単位で用意されている職務機能ポリシーを使用します。

※本番運用時は、必要な権限を決めて最低限の権限となるように付与しましょう。

f:id:fu3ak1:20201225132327p:plain

管理者用にAdministratorAccessを付与します。

f:id:fu3ak1:20201225133058p:plain

タグは特に設定せず、内容確認して作成します。

f:id:fu3ak1:20201225134254p:plain

作成できました。

f:id:fu3ak1:20201225134334p:plain

続いてログインする対象のアカウントを選択します。 アカウント一覧はOU単位で表示されます。今回はsystem01アカウントとauditアカウントの2つを選択して、ユーザーを割当します。

f:id:fu3ak1:20201225140755p:plain

f:id:fu3ak1:20201225141508p:plain

作成しているグループadminに割当します。

f:id:fu3ak1:20201225142554p:plain

作成した権限セットを選択して完了します。

f:id:fu3ak1:20201225142530p:plain

しばらくするとアカウント側の設定が完了します。詳細を見ると、アカウント側でIAMロールが作成されていることがわかります。

f:id:fu3ak1:20201225142935p:plain

MFAの設定

ログイン時にMFAを強制するよう設定します。ここも一括でできるのがAWS SSOの魅力ですね。

f:id:fu3ak1:20201225144337p:plain

サインインのたびに要求し、登録がない場合は登録を要求するようにして保存します。

f:id:fu3ak1:20201225144458p:plain

ログイン確認

SSOの設定が完了したので、作成したユーザーでログインしてみます。 ログイン用のURLはAWS SSOのTopにも表示されています。

f:id:fu3ak1:20201225144650p:plain

ユーザー名、パスワードを入力すると以下のようにMFAを設定する画面が表示されます。 指紋認証も可能な「組み込みの認証アプリ」を使用しようとしたのですが、私のPCが対応してないようだったので、今回は認証アプリを使用します。

スマホでログイン画面を見た場合は、指紋認証も設定できそうでした。

f:id:fu3ak1:20201225150209p:plain

認証アプリでQRコードを読み取って、表示された番号を入力して設定します。

f:id:fu3ak1:20201225150609p:plain

f:id:fu3ak1:20201225150643p:plain

なお、私だけ、たまたまなのかもしれないですが、初回は以下のようにエラーとなりました。 再度ログインURLにアクセスすることでログインできました。

f:id:fu3ak1:20201225150828p:plain

ログインが完了すると、以下のようにアクセス可能なAWSアカウントが一覧で表示されます。 system01アカウントのマネジメントコンソールへアクセスします。

f:id:fu3ak1:20201225151636p:plain

ログインできました。

f:id:fu3ak1:20201225151244p:plain

AWS SSOの設定は以上です。

AWS SSOのポイント

利用方法が理解できたところで、あらためてAWS SSOのポイントです。

認証・認可の管理を一ヵ所で行える

これが一番大きなポイントかと思います。MFAの強制もAWS SSO1ヵ所で設定してすべてのSSOユーザーに有効にできるのはとても良いですね。

f:id:fu3ak1:20201225152549p:plain

CLIが使用できる

本記事の手順では紹介しませんでしたが、マネジメントコンソールへ入るときに、「Command Line or …」を選択すると一時的なアクセスキーを発行できます。 より安全な形でキーの発行、CLIの利用が可能になります。

f:id:fu3ak1:20201225153039p:plain

AWS以外のアプリも使用できる

AWSアカウントへのログインをメインとしてAWS SSOがよく利用されますが、他のアプリへのログインも可能です。随時使用できるアプリは増えているようです。設定はSSO>アプリケーションから可能です。

AWS SSOをIDのベースにして他アプリへのログインといった管理もできますね

f:id:fu3ak1:20201225153312p:plain

外部IDプロバイダとの連携も可能

設定手順の最初にも書きましたが、外部IDとの連携機能も嬉しいですね。たとえば普段の業務ではActive Directoryの認証を使用している場合、その認証でAWSへログインするといった運用も可能です。

さいごに

本記事ではマルチアカウントのセキュリティサービス紹介の第一弾としてAWS SSOをメインに紹介しました。

認証・認可のところはAWSの使用開始にも必要であり非常に重要な部分でありますので、できるだけ早く検討、設定することをおススメします。

次回はコスト管理のサービスをまとめていきたいと思います。

次回はコチラ

AWS Organizationsを活用したマルチアカウントのセキュリティサービス使用方法 ~はじめに~

AWSのセキュリティサービス、活用できていますでしょうか。

私も過去に以下のような発表を行ったり、

以下のような記事を書いております。

www.nri-net.com

記載内容は、AWSアカウントは作成した時点でリスクを持つので、最低限有効化すべきサービスを有効にして、セキュアな状態を保ちましょうというものになります。

ただし、この内容はあくまでAWSアカウントを1つ作成するときの内容となっています。最近では開発、本番など環境に応じて複数のアカウントで1システムを運用することも多くなってきていると思います。

そこで複数アカウントの場合はAWSのセキュリティサービスをどう使用できるのか書いていきたいと思います。 すべてのサービスを1記事で書くと長くなるので、連載形式で順々に書いていこうと思います。

今回は「はじめに」ということでマルチアカウント管理の要である、Organizationsの機能についてざっと整理します。

AWS Organizationsとは

Organizationsは、複数のAWSアカウントを管理して、各種サービスをアカウント間で連携できる機能を持つサービスです。いくつかポイントを紹介します。

一括請求ができる

通常(Organizationsを使用しないで)AWSを利用する場合は、AWSアカウントごとにクレジットカード情報を登録し、アカウント単位で請求が発生します。

AWSにはコストを可視化できるCost Exploerなどコスト管理のサービスがいくつかありますが、これらのサービスもアカウント単位で利用することになるため、システム全体としてコストを管理していく場合に難しくなります。また、アカウントの追加ごとにカード情報を入力する必要があるため、手間もかかりますし、セキュリティ面でもカード情報が多く登録されることは好ましくないかと思います。

f:id:fu3ak1:20201223183804p:plain

Organizationsを使用すると、請求およびコストの管理をマネジメントアカウントという全アカウントの親にあたるアカウントで一元管理が可能になります。

マネジメントアカウント上でシステム全体、またアカウントごとのコスト管理も可能になり、請求情報も1ヵ所で管理できるようになります。

f:id:fu3ak1:20201223184355p:plain

他のAWSサービスを組織単位で使用できる

Organizationsで作成したAWSアカウントの集まりを組織と呼びますが、組織単位(=全アカウント)でまとめてAWSサービスの設定が行えます。 使用できるサービスは限られますが、例えばAWSの操作履歴を残すCloudTrailの証跡設定では、組織単位でCloudTrailの証跡を有効にすることで、全アカウントの操作履歴を1つのアカウントで見れるようになります。

f:id:fu3ak1:20201223185209p:plain

管理アカウントの委任

複数のアカウントに分ける場合、役割ごとにアカウントを分けるのが一般的であり、AWSもそれをベストプラクティスとする場合が多いです。役割ごとに分ける=1アカウントに1つの役割を持たせるということになります。

Organizationsのマネジメントアカウントは請求管理の役割を持つので、セキュリティ情報の集約は別途セキュリティアカウントを用意してそこに集める構成を取ることも多いです。ただし、組織単位でサービスを使用すると、デフォルトではマネジメントアカウントに情報が集約されます。たとえばAWSの設定情報履歴を保存する AWS Configでは、CloudTrailのときと同様デフォルトでマネジメントアカウントに情報が集約されます。

f:id:fu3ak1:20201223224901p:plain

この情報集約の役割を別アカウントに移せるのがアカウントの委任機能です。 委任が使用できるサービスは限られますが、アカウント委任を使用してセキュリティ集約アカウントに情報を集めることができます。

f:id:fu3ak1:20201223225214p:plain

OU(Organizational Unit)とSCP(Service Control Policy)

OrganizationsにはOUという機能があり、組織内のアカウントをOUという単位でグループ化することができます。たとえば以下のように複数のシステムアカウントをまとめて一つのOU、セキュリティアカウントは別のOUという形でグループ化しておくことができます。

f:id:fu3ak1:20201223230005p:plain

このOUと組み合わせて使用できる強力なセキュリティ機能がSCPです。SCPは複数アカウント(OU単位)に設定できるIAMポリシーのような機能で、「指定したOUに所属するアカウントではアクセスキーの作成を禁止する」といったセキュリティガードレールの設定も可能です。OUとSCPの具体的な設定方法については、以前私が発表した資料に書いておりますので、合わせてみていただけると幸いです。

そのほか指定のOUに所属するアカウント全てにCloudFormation(StackSets)を実行するといった、別サービスとの連携機能も一部あります。

AWS SSOとの連携

AWS SSO はOrganizationsと組み合わせて使用できるシングルサインオンのサービスです。1箇所で利用者の認証・認可の管理ができます。 こちらはOrganizationsの機能というよりは別のサービスになりますので、次回以降の記事で解説していこうと思います。

各セキュリティサービスの利用方法

Organizationsの機能をざっくり整理できたところで、これを活用して各セキュリティサービスがどう利用できるのか、以下のポイントで見ていきたいと思います。

  • サービス有効化、マルチアカウントでの集約手順
  • 組織単位で利用可能か
  • アカウントの委任は可能か

見ていくサービスは以下のとおりです。各サービスの詳細は次回以降の記事で順々に書いていこうと思います。

  1. ルートユーザの保護、IAMの管理(AWS SSO)
  2. コストの可視化(Cost Explorer、Budgets)
  3. CloudTrail
  4. AWS Config
  5. Amazon GuardDuty
  6. IAM Access Analyzer
  7. AWS Security Hub
  8. Amazon Detective
  9. AWS Personal Health Dashboard
  10. AWS Trusted Advisor

各サービスの記事ができたら、この記事にもリンクを貼っていく予定です。 ひととおり書けたら、まとめと、CloudFormationでコード化するところも書いてみたいと思います。

マイペースで進めますので、完成は未定です・・1月上旬くらいには・・

ひととおり書いてまとめました

re:Invent2020セッションレポート :(DOP309) Test twice, deploy once: Testing infrastructure code on AWS

概要

インフラコードのテストに関するセッションです。タイトルの「Test twice, deploy once」は、英語のことわざ(?)である「measure twice and cut once」(2回測って、1回切る=慎重に)から来ているようです。どのように正確に、インフラをテストできるのか。といった観点ですね。

AWSさんのセッションなので、AWS標準のツールであるCloudFormationとCDKを使用する場合の話になります。(TerraformなどAWS外のIaCツールについての説明はありません)

セッション内容

Why infrastructure as code?

  • 背景

    • 昔はオンプレミスのサーバー数百台にそれぞれJavaなどのソフトウェアをインストールしていた。時間がかかる
    • 2000年代前半にIaCという言葉が出てきてブームになってきた
    • 現代ではインフラはコード前提で考えるべき。クリックではなくLovelyなインフラのコードを
  • なぜIaCなのか?

    • 再利用可能で、何がデプロイされるのか予測できる
    • 共通のツールで変更リリースをコード変更として実行できる、テストもできる
    • 本番やステージングなど、環境のコピーがしやすい

f:id:fu3ak1:20201221223559p:plain

Testing AWS CloudFormation

  • コードには何をするか?

    • テストをする、アプリケーションと同様
    • 本番環境にリリース前にテストを実行しておきたい
  • CloudFormationの概要

f:id:fu3ak1:20201221224250p:plain

  • テストはどこから始めれば良いか
    • Editorでまずできる
    • 例えばVS Codeであればテスト用のプラグインが用意されている
    • 例えばCloudFormation nag、セキュリティ的な警告も出してくれる(強い権限のIAMなど)

f:id:fu3ak1:20201221224551p:plain

  • cfn-nag
    • rubyのgemパッケージ
    • セキュアでないコードを見つけて警告を出してくれる

f:id:fu3ak1:20201221224816p:plain

  • cfn-lint
    • linter
    • コードの静的解析ツールで、文法チェックを行ってくれる
    • リージョン単位でサポートしていないEC2などのケイパビリティも含めてチェックしてくれる

f:id:fu3ak1:20201221225104p:plain

  • TaskCat
    • 実際にテンプレートをデプロイしてテストできるツール
    • 複数のパラメータ入力に対応
    • 設定したパラメータで、実際にテンプレートがデプロイできるかチェックできる
    • デプロイが正常に完了したら、リソースは削除される

f:id:fu3ak1:20201221225220p:plain

Testing AWS Cloud Development Kit (AWS CDK)

  • なぜCDKなのか?
    • CloudFormationはパラメータを書くので読みやすい、JSON or YAML
    • Pythonコードで開発を行っているチームの場合、なぜPythonでIaCを書かないのか?となる
    • CDKを使うとPythonで書ける
    • JavaC#など他の言語にも対応している
    • 開発も盛んに行われており、ライブラリも多い
    • CloudFormationよりも複雑になることもある、なのでテストをする

f:id:fu3ak1:20201221225922p:plain

  • CDKをどうテストしていくか
    • jest というツールを使用してテストができる
    • Snapshot tests、Fine-grained assertions、Validation tests3種のテストができる

f:id:fu3ak1:20201221230231p:plain

  • Snapshots
    • CDKでデプロイした状況をSnapshotとして状態保存しておき、変更がされたら検知ができる
    • 一度CDK経由でデプロイして、リソースの変更が行われると、テストがfailとなる
    • テストがfailした場合はスナップショットを更新して対応する

f:id:fu3ak1:20201221230528p:plain

  • fine-grained assertions
    • Snapshotsではできなかった機能単位の細かなテストを実施したい
    • fine-grained assertionsを使用して実行できる
    • 例えばメッセージ保持期間がXXXのSQSリソースがあるかチェックするいった書き方ができる
    • チェックする内容から書くテスト駆動開発な進め方もできる

f:id:fu3ak1:20201221231142p:plain f:id:fu3ak1:20201221231213p:plain

  • SQSキューの保持期間が誤っていると以下のようにエラーになる

f:id:fu3ak1:20201221231313p:plain

  • validation tests
    • 時間がないので資料なし、説明でさらっと
    • 値の最小、最大といった少し複雑な書き方ができる。

Pipeline

  • IaCもアプリ同様にパイプラインにいれましょう

  • GitリポジトリにIaCテンプレートをコミット

f:id:fu3ak1:20201221232015p:plain

  • Buildフェーズではテストに必要なパッケージを用意してlintやnagといったコード解析テストを実行
  • CDKの場合はjestを使用

f:id:fu3ak1:20201221232130p:plain

  • Testフェーズではどこかの環境にデプロイを行い、Lambda等を使用して環境チェックを行うテストを実行する
  • テストが正常終了したらProduction環境へリリース

f:id:fu3ak1:20201221232223p:plain

  • CloudFormationの場合は以下のようなパイプライン構成となる

f:id:fu3ak1:20201221232412p:plain

CDK Pipelines デモ

※デモ見たいかたはこちらのセッション動画をご覧ください(28:50頃~)

↓デモより一部説明を抜粋↓

  • CDK Pipelinesはマルチリージョン、マルチアカウントにパイプラインの整備ができる
  • パイプラインリソースとアプリケーションリソース(デモではLambda+API GW)をCDKの中で管理
  • stageという概念を使って、同じAWSリソースを複製できる
  • cdk deployコマンドでパイプラインをデプロイできる
  • test用のステージおよび処理もCDKの中に書ける(CurlコマンドによるURLチェックなど)
  • デモで使ったコードは以下Githubにある

GitHub - darko-mesaros/cdk-pipelines

f:id:fu3ak1:20201221234029p:plain

f:id:fu3ak1:20201221234134p:plain

Homework

  • 宿題(まとめ)
    • インフラコードに色々なツールを入れて書き方デバッグ、テストをしてみよう
    • インフラをCI/CDしよう
    • 素晴らしいセキュアなインフラコードを書くことを楽しもう

f:id:fu3ak1:20201221233846p:plain

感想

今やっている私がやっている業務にドンピシャな内容でした。現在はCloudFormationをメインにIaCの管理を行っていますが、パラメータを全て書くというところにツラさを感じているところです。パラメータの可読性は高くて良いのですが。

また、パイプラインも合わせてCloudFormationで作っているのですが、パイプラインの数も多くなりここも中々ツラくなってきているところです。CDK Pipelinesはパイプラインの整備や管理に大いに役立ちそうです。できるところから、CDKも試していきたいと思います。

IaCのテストにフォーカスしたセッションは過去に見たことがなく、悩んでいるところでもあったのでとても有益なセッションでした。インフラもテスト駆動で開発していきたいですね。

Azure AD と AWS SSOの連携

はじめに

AWSアカウントがたくさん増えて、アカウントごとにIAMユーザーがいて、それぞれにMFAを設定して、、もう大変! となった経験はありますでしょうか。

私は今もそういった経験をしておりますが、そんなマルチアカウントのログインの助けになるのがAWS SSOです。 マイボス佐々木さんが構成の整理と説明を以下の記事でわかりやすくしてくれています。

blog.takuros.net

↑の記事でもおススメの構成となっている、IdP + AWS SSOのパターンを今回は試してみたいと思います。

f:id:fu3ak1:20201219235124p:plain

IdPはAzure上でマネージドで作成できる、Azure Active Directoryを使用します。 AWSと同じくクラウド環境のため、画面上からポチポチするだけでADおよびユーザーが作成できるので検証に便利です。

それではやっていきましょう。

AWS SSOの設定

SSOはOrganizationsの組織情報を使用した機能となるため、Organizationsの親アカウントで設定する必要があります。

AWS SSO画面に遷移し、有効にします。

f:id:fu3ak1:20201219230930p:plain

Organizationsの組織が作成されていない場合は、以下のとおり表示されます。 AWS組織の作成を押すことで、組織が自動作成されます。

f:id:fu3ak1:20201218225714p:plain

組織の作成時、メールの検証が必要となるため、アカウントのメールアドレスに届いたメールを確認して青いボタンを押しておきます。

f:id:fu3ak1:20201218225915p:plain

外部のAzureADをIDソースとして利用します。 IDソースを選択を押下して設定画面へすすみます。

f:id:fu3ak1:20201219231049p:plain

IDソースの変更を押します。

f:id:fu3ak1:20201218230458p:plain

メタデータファイルをダウンロードしておきます。

f:id:fu3ak1:20201219231127p:plain

Azure ADの設定

新規テナント、ユーザーの作成

Azureのテナントとは不動産のテナントと同様で、ユーザーやグループ、オブジェクトなどをひとまとまりで管理できる部屋のようなものです。Azureアカウント作成時にデフォルトで1つのテナントがあるのですが、今回は新規でSSO用の専用テナントを作成します。

Azure Active Directoryの画面へ遷移し、テナントを作成をおします。

f:id:fu3ak1:20201218231137p:plain

デフォルトのAzure ADでOK。

f:id:fu3ak1:20201218231232p:plain

任意の組織名、ドメイン名を入力します。

f:id:fu3ak1:20201218231429p:plain

確認して作成します。

f:id:fu3ak1:20201218231551p:plain

テナントの作成が完了したら、作成したテナント上で、ログイン確認用のユーザーを作成しておきます。

(もともとのテナントがダークモードONだったので色が変わりました)

f:id:fu3ak1:20201218231725p:plain

testという名前で作成しておきます。名と姓を入力しておかないとAWS側でエラーになるため注意です。

f:id:fu3ak1:20201219004835p:plain

アプリケーションの作成

AWSへ連携するために、エンタープライズアプリケーションを作成します。

f:id:fu3ak1:20201218232018p:plain

新しいアプリケーションを作成を選ぶと、以下の通り各種サービスが選択できます。 AWSが一番最初に大きく出てくるので押したくなりますが、今回はAWS SSOなので独自のアプリケーションを作成をおします。

f:id:fu3ak1:20201218232559p:plain

名前は任意でOKです。今回はAWS SSOとして作成します。

f:id:fu3ak1:20201218232655p:plain

作成後以下のような画面になるので、シングルサインオンの設定をおします。

f:id:fu3ak1:20201218232839p:plain

SAMLを選択

f:id:fu3ak1:20201218232953p:plain

さきほどAWS SSOの画面からダウンロードしたメタデータを使うので、メタデータファイルのアップロードを選択します。

f:id:fu3ak1:20201218233059p:plain

f:id:fu3ak1:20201218233253p:plain

アップロードすると右側に以下の画面が表示されます。そのまま保存を押せばOKです。

f:id:fu3ak1:20201218233344p:plain

Testするのか表示されますが、AWS側の設定がまだ完了していないため、ここはいいえにします。

f:id:fu3ak1:20201219231351p:plain

このあとブラウザのリロードを行うと、以下のようにSAML名証明書にメタデータのダウンロードリンクが表示されるので、そこからダウンロードします。

f:id:fu3ak1:20201218233826p:plain

AWS SSOの設定(つづき)

AWS側に戻ります。

IDプロバイダーのメタデータのところから、Azure側でダウンロードしたメタデータファイルをアップロードします。

f:id:fu3ak1:20201218234141p:plain

ACCEPTと入力し、IDソースを変更します。

f:id:fu3ak1:20201219231542p:plain

完了!

f:id:fu3ak1:20201218234308p:plain

今回はADのユーザーが自動的にAWS側にも連携されるよう、自動プロビジョニングを有効化しておきます。

f:id:fu3ak1:20201218234522p:plain

SCIMエンドポイントとアクセストークンの情報はメモしておきます。

f:id:fu3ak1:20201218234736p:plain

Azure 側プロビジョニング設定

またAzureに戻ります(行ったり来たり・・)

さきほど作成したアプリケーションからプロビジョニングの設定をしていきます。

f:id:fu3ak1:20201218235209p:plain

プロビジョニングモードを自動に変更して、さきほどメモしたURLとトークン情報を入力し、テスト接続を行います。無事接続できると右上に成功の旨が表示されます。

その後、左上の保存を押します。

f:id:fu3ak1:20201219231714p:plain

一度保存すると下部のプロビジョニング状態を変更できるので、オンにして保存します。

f:id:fu3ak1:20201218235744p:plain

ユーザー属性のマッピング情報を変更します。

f:id:fu3ak1:20201219001251p:plain

「mobile」と「facsimileTelephoneNumber」を削除します。

f:id:fu3ak1:20201219231801p:plain

「mailNickname」を「objectId」に変更します。2つの削除と1つの変更が終わったら左上の保存を押します。

f:id:fu3ak1:20201219001623p:plain

エンタープライズアプリケーションのページに戻り、ユーザーを追加します。

f:id:fu3ak1:20201219000102p:plain

先ほどADで作成したtestユーザーを追加して割り当てます。

※本来の運用を考えると、グループ単位で割り当てたほうが良いでしょう。今回は検証用途のためユーザー単独で割り当てます。

f:id:fu3ak1:20201219005243p:plain

プロビジョニングの実行間隔は40分になっているため、手動で再開して追加したユーザーを反映させます。

f:id:fu3ak1:20201219000619p:plain

しばらくするとプロビジョニングが完了してユーザー1と表示されます。

f:id:fu3ak1:20201219005344p:plain

AWSのSSO画面にもユーザーが追加されています。

f:id:fu3ak1:20201219005612p:plain

アクセス権限セット、対象AWSアカウントの決定

ログインするAWSアカウントのユーザーに付与する権限(IAMポリシー)を決定します。

アクセス権限セット

まずはアクセス権限セットの作成からです。

f:id:fu3ak1:20201219232048p:plain

今回は検証用途のためAWS側で職務単位で用意されている職務機能ポリシーを使用します。

※本番運用時は、必要な権限を決めて最低限の権限となるように付与しましょう。

f:id:fu3ak1:20201219232117p:plain

閲覧権限のみ与えるViewOnlyAccessを使用します。

f:id:fu3ak1:20201219232254p:plain

タグは特に設定せず、内容確認して作成します。

f:id:fu3ak1:20201219232347p:plain

できました。

f:id:fu3ak1:20201219232421p:plain

対象AWSアカウントの選択と割り当て

次はログインするAWSアカウントを選んでいきます。

Organizations配下に2アカウントあるため2つ共選んでユーザーを割り当てます。

f:id:fu3ak1:20201219232754p:plain

プロビジョニングされたTestUserを選択します。

f:id:fu3ak1:20201219232927p:plain

先ほど作成したアクセス権限セットを作成して完了します。

f:id:fu3ak1:20201219233006p:plain

完了!

f:id:fu3ak1:20201219233150p:plain

ログイン確認

設定がすべて終わったので、SSOのTOPに表示されているデフォルトのポータルURLへアクセスしてログインしてみます。

f:id:fu3ak1:20201219233426p:plain

作成したAzure ADのユーザー名、パスワードを入力します。

f:id:fu3ak1:20201219233645p:plain

AWS Account(2)と表示されています!クリックすると一覧でアカウントが一覧で出るのでログインしたい方を選択します。

今回はマネジメントコンソールで入ります。CLI用のキーも表示できますね。

f:id:fu3ak1:20201219234108p:plain

ログインできました!まっさらな状態のアカウントなのでリソースは特にない状態ですが・・。

f:id:fu3ak1:20201219234334p:plain

検証は以上です。

CLIやMFAなどまだまだ試したいことはありますが、今回の記事はAzure ADでユーザーを作成してSSOと連携するところを主目的として書いていますので、ここまでとしておきます。

まとめ

ただ試してみたかっただけですw SSOが便利で重要なことは知っていたのですが、やはり自分で試してみないとわからないという主義なので、実際に触ってみました。 触ってみて改めてですが、以下のポイントが良いですね。

  • ID/パスワードの管理がAWS外で一元管理できる。元々業務で使用しているIDがあればそれも流用できる
  • アクセス権限セットを使用して、アカウント単位の権限ではなく、必要な権限セットを複数のアカウントに適用できる
  • CLIもイケる

AWS SSOの管理がOrganizationsの親アカウント限定なので、これがOU単位であったり、もう少し細かい単位で制御できると最高かと思います。今後に期待です。

これから作ろうと思っている方何かの参考になれば幸いです。

re:Invent 2020 サービスアップデート 2週目(12/7~12/11)のまとめ

社内勉強会でしゃべったネタの一部なのですが、特に隠しておく情報でもないため、ブログに書いておこうと思います。 先週発表されてAWSのアップデートを、個人的にまとめて社内で紹介しました。 深さはあまりなく各発表の内容をざっくり書いています。

本日開催されたAWSさん公式のBlackBeltのほうが詳しい気がしますが、セルフメモ的な意味もこめて書いておきます・・

Compute

ECR cross region replication

コンテナイメージのリージョン間コピーが可能に。アカウント間コピーも可能

EC2に新たなネットワークメトリクス追加

新たに5個追加。帯域上限を超えたIN/OUTパケット数、コネクション上限を超えたパケット数、 DNSメタデータなどのlinklocalへの上限を超えたパケット数、PPSの上限超えパケット数。

Network

VPC Reachability Analyzer

AWSサービス間のネットワーク経路を可視化できるサービス。画面上で通過するENIやSGが一目で見れるため、ネットワークが繋がらない場合に役立つ。1分析あたり$0.10

Developer tools

Amplify CLIがFargateへのコンテナデプロイへ対応

ソースコードを用意して、amplify init、configure、add、pushの数回のコマンドを実行するだけで、Fargateのサービスを公開できる。パイプラインも自動作成される

CodeGuru Profilerのメモリおよびヒープメモリ対応

CPU、レイテンシーベースだったのがメモリも対応。ヒープメモリも対象

Security

AWS Audit Manager

監査を簡略化するためのサービス。GDPR、HIPPA、PCI DSSなど主要なコンプライアンスに対応 AWSアカウント内のリソース状況を既存のサービスを使用して取得する。エビデンスを自動収集し、 コンプライアンス標準に合わせた言葉も使用される。監査レポートの出力も可能。マルチアカウントにも対応

Analytics

Amazon Redshift ML

SQLコマンドで学習モデルの作成、学習、デプロイが可能。 CREATE MODEL文でモデルが学習、デプロイされる。TARGETでラベルのカラムを指定する。 その後SELECT文で予測結果を取得可能。裏ではSageMaker(autopilotベース)が動き、アルゴリズムは自動選定

Amazon Redshift Automatic Table Optimization

クエリの状況を監視し、機械学習を使用してソートキーなどを自動選定、データの再配置も実施する

Amazon Redshift federated queryがRDS(MySQL)をサポート

PostgreSQLだけでなくMySQLも追加

Amazon Redshift native console integration with partners

パートナー企業とのやり取りがやりやすく

Amazon Redshift が JSON と semi-structured dataのサポート

半構造化データやJSONもOKになった

Amazon Redshift data sharing

Redshiftクラスター間でデータを共有するサービス

Amazon Redshift RA3.xlplus node

小さいノードができた。これまでは4xlと16xl

Amazon Neptune ML

グラフDBのNeptuneでもRedshift ML同様の仕組みで機械学習が使用可能に 不正検知やレコメンデーションなどのユースケースで使用可能

Amazon EMR Studio

EMR用のIDE。SageMakerでも使われているJupyter notebooksが使用されている。 処理コードの開発がやりやすくなる

Amazon EMR on Amazon EKS

EKS(Kubernetes)上でEMRのデータ処理を実行可能に

QuickSightがElasticsearchをサポート

データソースとしてElasticSearchの指定が可能に

ML/AI

Amazon HealthLake

多種多様な医療データをAWS上に集約し、機械学習を使用して標準化、分析が可能。HIPPAにも対応

Amazon Lookout for Metrics

CloudWatch Anomaly Detectionの他サービス対応版。数値データの異常なふるまいを機械学習を使用して検知 CW、S3、RDS、Redshiftに加え、外部のSaaSにも対応(Salesforce, Google Analyticsなど) SNS経由で通知

Amazon Forecast Weather Index

天気予報

Amazon SageMaker Edge Manager

エッジデバイス上にデプロイされた学習モデルを管理、監視するためのサービス

Amazon SageMaker Clarify

学習データの偏りを検知するサービス。 たとえば画像の年齢判定のモデルを学習する場合に、データが特定の年代に偏ってないかなど

Deep Profiling for Amazon SageMaker Debugger

昨年発表されたDebuggerの新機能。ハードウェアリソースの分析や処理の稼働状況を分析できる

Amazon SageMaker JumpStart

目的に合わせて、学習済みのさまざまな既存のモデルを選択してデプロイ可能 不正検知や数値予測、自然言語処理や画像認識などさまざまなモデルあり そのままデプロイもできるが、既存の学習モデルを*ファインチューニングして、自分のモデルも開発可能。 たとえば一般的な画像分類のモデルから商品分類のモデルを学習してデプロイすることが可能 ※「ファインチューニング」既存のモデル全体を再調整して新たなモデルを学習すること。転移学習は既存の出力に追加学習

Amazon Kendra incremental learning

検索結果に応じて、継続的に増分のデータを使用した学習が可能

Amazon Kendora のcustom synonymsサポート

ユーザ独自の特定の用語を登録可能

Amazon Kendra の Google Drive connector対応

Google Driveをデータソースとしてサポート

さいごに

一番アップデートの多かった1週目ではなく2週目ピンポイントのまとめとなりました。 先週1週間でどんな感じでアップデートがあったのか、全体感はみれるかなと思います。

MLキーノートがあったこともあり、ML/AI、Analytics系のアップデートが多かったですね。

re:Invent2020セッションレポート :(EMB023) Amazon Aurora Serverless v2: Instant scaling for demanding workloads

概要

2020 re:Inventで新しく発表された、Amazon Aurora Serverless v2のセッションです。もともとAurora Serverlessは機能としてありましたが、今回パワーアップしてv2としてリリースされました。

セッション内容

Auroraの概要

通常の(サーバーレスじゃない)Auroraの概要です。ここらへんはBlackBelt公式ドキュメントも(特に日本の方は)わかりやすいと思います。

AuroraはAWSクラウド環境用に開発した独自のリレーショナルデータベースサービスで、MySQLPostgreSQLに互換性があります。通常のRDSよりもクラウドに特化した機能が多く備わっています。独自となっていますが、接続するアプリケーションから見ると従来のMySQLPostgreSQLと同様になりますので、特別アプリケーションの変更は不要です。

f:id:fu3ak1:20201213213531p:plain

  • コンピュート機能とストレージ機能は分離されていて、データは3AZに分散されている

f:id:fu3ak1:20201213213758p:plain

  • ストレージは分離されているため、Writer(書き込み)またはReader(読み込み)ノードにアタッチするという形でノードを生成
  • Writerは1ノード、Reader(リードレプリカ)は最大15個作成可能です。指定のReaderでカスタムリードエンドポイントの作成も可能

f:id:fu3ak1:20201213214216p:plain

  • クラスター」という単位でAuroraを設計、構築していく
  • アプリケーションの内容がデータベースのIOスループットやレイテンシの要件に影響する
  • マルチAZ等可用性の設計も行う
  • ストレージの拡張やフェイルオーバーやAWS側で自動実行される

f:id:fu3ak1:20201213214717p:plain

  • DBのキャパシティ管理は難しい
  • 3つの例を紹介、スパイキー(たまに高い)、不規則(開発など)、一定の傾向があるもの
  • ピーク時に合わせて用意すると料金が高くなる
  • ピークよりも低く設定するとユーザー影響が出る
  • 自前でモニター、キャパシティ管理は大変
  • そこでAurora Serverless!!

f:id:fu3ak1:20201213215200p:plain

Aurora Serverless v2

  • キャパシティをオートスケールしてくれる Serveless v2
    • 素早くスケールするので急なアクセス増にも耐えられる
    • きめ細かく的確にキャパシティを設定してくれる
    • 通常のAuroraの機能もフルで使用できる。マルチAZやグローバルDBなど
    • 最大90%のコスト削減

f:id:fu3ak1:20201213215700p:plain

  • 読み書き(Read-Write)のスケーリング
    • 最初は特にノードはなく、アプリからアクセスがあると、Router fleetという部分がそれを処理し、Writerを起動する
    • 起動の単位はAurora Capacity Unit(ACU)と言う
    • アクセス数、クエリ数が多くなるとACUを自動で増やしていく
    • 最低キャパシティを指定して、常時稼働させておくことも可能。初回接続時のインパクトを抑える

f:id:fu3ak1:20201213220441p:plain

  • 読み込み(Read-Only)のスケーリング
    • Write同様にアクセスに応じて自動スケールする
    • 読み込み専用のアクセスに応じてスケール

f:id:fu3ak1:20201213220718p:plain

  • 通常のAuroraとMixも可能
  • この例ではReaderのみServerless v2

f:id:fu3ak1:20201213220950p:plain

デモ

※デモは動画のほうが見やすいと思います。気になる方は是非直接セッション動画をご覧ください

  • CloudWatchメトリクスの画面。オンラインストアを例とし、青がオーダー数でオレンジがAuroraのキャパシティ
  • スクリプト処理でSQLを継続実行
  • スケールダウンはスケールアップよりも緩やかに行われる。バックグラウンドプロセスの動きも見ながら、影響がないように

f:id:fu3ak1:20201213222131p:plain

セッションまとめ(re:Cap)

  • サーバーレスなオートスケーリングAurora
  • 本番環境もOK
  • 数千トランザクション/秒にも耐えられる
  • 必要なリソースだけ用意する、安い

f:id:fu3ak1:20201213222440p:plain

感想

高機能すぎて、本当にここまでキレイに動いてくれるのかという感じですね。まだプレビュー段階ですので、今後に期待です。 このセッションを見る前は、通常のAuroraと同様に裏でノード(インスタンス)が稼働してそれをAWSが自動管理してくれるのかと思っていましたが、Lambdaのような小さなVMが稼働し、それをスケールアウト/インしてきめ細やかなキャパシティ管理を実現しているということでうね。驚きました。

RDSのノードタイプの決定や、そのサイズ、レプリカ個数の管理は難しい、というか構築したら基本はそのまま稼働させるという考えが多かったので、そこを動的に変えてくれるなら任せてみたいですね。使用前の金額見積が難しい部分はありますが、基本は安くなると思うので期待です。

Chatbotと時間限定IAMポリシーを使用した本番接続運用を考える

こんにちは。上野と申します。

Japan APN Ambassador Advent Calendar 2020 10日目のエントリです。AWSさんに挟まれた日程で記事を書いております。ほかの方の記事も、おもしろいものばかりですので是非読んでみてください。

Ambassadorって何?というかたは下記の記事を読んでもらえるとわかると思います。

APN Ambassadorってなんだ? - Qiita

私は2020年にAmbassadorとして選んでいただきました。資格取得や登壇、執筆などが評価され、選出いただいたと考えています。

本エントリの内容について

私は技術的なネタを書きます。

コロナウィルスの影響で在宅勤務が増えるなか、みなさま本番システムのアクセスはどう管理していますでしょうか。 オフィス内に本番接続ルームを用意して、そこからアクセスするという運用をされている方も多いと思います。

ただ、今後もコロナの状況が続くとなると、中々オフィスに出向くのは厳しいかもしれません。そこで私からは本番アクセスの一例として、Chatbot時間限定IAMポリシーを使用したアクセス運用を紹介したいと思います。

実際に運用で使っているわけではなく、私の1アイディアですので参考として読んでいただけると幸いです。

使用するサービスについての前知識

Chatbot

Chatbotは、SlackやAmazon ChimeのチャットツールとAWSを連携するサービスです。チャットでメッセージ送信をトリガーにLambda関数を実行できるため、今回はそれを使用します。

なお、Chatbotを準備してLambda関数を実行するまでの内容は以下記事で解説しています。

fu3ak1.hatenablog.com

時間限定IAMポリシー

IAMポリシーには、ConditionにDateLessThanを指定することで、時間限定のAWSアクセスを付与できます。 今回はこれを使用して一時的なアクセスをユーザーに付与します。

「IAMポリシーの例」

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "DateGreaterThan": {"aws:CurrentTime": "2020-04-01T00:00:00Z"},
                "DateLessThan": {"aws:CurrentTime": "2020-06-30T23:59:59Z"}
            }
        }
    ]
}

参考: AWS: 日付と時刻に基づいてアクセスを許可する - AWS Identity and Access Management

運用方法(利用時)の流れ

技術的な点は一旦置いておいて、どのような流れで一時アクセスを付与するのか流れで説明します。

1.デフォルトの状態=何もできない

デフォルト状態では、IAMポリシーを空にしておき、IAMユーザーはログインのみできる状態にしておきます。

f:id:fu3ak1:20201208215626p:plain

この状態でログインしてEC2の画面を表示すると、以下のとおりAPIエラーとなり各種情報が表示されません。 本番の運用状況にもよりますが、例えばデフォルトRead権限はつけておくというポリシーもありかと思います。

f:id:fu3ak1:20201208215744p:plain

2.Slack経由でIAMユーザーに権限を付与する。

IAMユーザーが本番アクセス(AWSへログイン)が必要になったとします。 管理者がSlack上に↓のメッセージを実行することで、指定したユーザーに権限が付与されます。 ここではユーザー名をprd-userとします。--payloadオプションでIAMユーザー名を指定しています。

@aws lambda invoke temp-access --payload {"user":"prd-user"}

すると以下の通りChatbotが実行するか質問してくるので、Yesを押します。

f:id:fu3ak1:20201208223239p:plain

Lambdaが実行されます。「End time is・・」に記載されている時刻は、 IAMユーザーのアクセスが不可となる時間です。(UTCで表示されてます)

※時刻の設定やレスポンスはLambda内でもろもろ実装

f:id:fu3ak1:20201208223340p:plain

この時点でアクセス権限が付与されました。

f:id:fu3ak1:20201208222651p:plain

3.IAMユーザーログイン

アクセス権限が付与されたので、アクセスしてみます。

以下のように、先ほどAPIエラーとなっていた各数値の情報が表示されました。 これでアクセスが可能になったことがわかります。

今回はIAMユーザーにAdministratorAccess同様(全許可)のポリシーを時間限定で付与しています。 実運用では、本番運用に必要な権限のみ許可するほうが良いでしょう。

f:id:fu3ak1:20201208221504p:plain

4.指定時間経過後

指定した時間が経過すると、以下のようにまた情報が表示されなくなります。特に再ログインは無しで、画面遷移していると急にエラーになります。

そのため設定する利用時間は慎重に設定する必要があります。また、ChatbotからLambdaを再実行すれば期間延長可能です。

f:id:fu3ak1:20201208222304p:plain

運用方法はここまでです。

技術情報の補足

ソースコードは以下githubに置いています。 CloudFormationテンプレート(CreateTempIAMPolicy.yml)をデプロイすれば、Lambda関数が作成されます。 Chatbot経由のLambda実行は繰り返しになりますがこちらの記事を参考にしてください。

github.com

アーキテクチャは以下の通りです。 LambdaがIAMポリシーを付与するだけという、割とシンプルなつくりです。

f:id:fu3ak1:20201208224012p:plain

その他いくつか実装面の補足情報を書いておきます。

  • 利用可能な時間は、Lambda関数の環境変数で設定しています。CloudFormationテンプレートのデフォルトは180で、単位は分です。(3時間)
  • IAMポリシーはIAMユーザーにインラインポリシーとして設定しています。通常ポリシーを一元管理にするために、管理ポリシーを付与してそれをIAMグループに付与するのが一般的ですが、今回は指定したユーザーのみに付与するためインラインにしました。
  • 指定時間が経過しても、インラインポリシー自体は残り続けます。ただし時間切れ状態です。再度Lambda関数が実行されると、ポリシーが新しい時間で上書きされます。

実運用上での考慮事項

実際の本番運用で使う場合は、この実装だけでは足りず、追加で考慮も必要になるかと思います。 いくつか検討事項として出てきそうなところを書いてみます。

IAMポリシーについて

運用方法の流れでも書いたとおり、例では許可するActionとResourceを*(=全許可)で指定しているため、実際の運用では本番運用で必要な権限のみ指定して許可する必要があります。 また、IAMポリシーではIP制限をかけたり、MFAを強制させることもできますので、そういった追加のセキュリティポリシーを追加するとよりセキュアなアクセスが実現できます。

本番持ち出しについて

IP制限など、特定の端末にアクセスを絞らない場合は、データの端末への持ち出しが気になるところです。以下は1つの例ですが、WorkSpacesを本番アクセス仮想端末として使用することで、ファイルの端末への書き出しを防ぐことができます。

WorkSpacesへのログインは、クライアント証明書ベースの認証もできるので、証明書が入った端末のみアクセス可能といった制御もできますね。

f:id:fu3ak1:20201208232102p:plain

VPC内へのアクセスについて

VPC内にEC2を多く配置していると、EC2にSSHでログインすることもあるかと思います。

私としては、サーバーに直接SSHアクセスするのではなく、Systems ManagerのSession Managerを使用してサーバーアクセスするのが良いと思います。こうすることでサーバアクセスの認証もIAMで一元管理できるからです。操作ログも取得も可能です。Session Managerの使い方はこちらに書いています。

Chatbotの利用について

今回、Slackの特定のチャンネルからChatbotを実行できるようにしているのですが、このチャンネル内のユーザーであれば誰でもLambda関数が実行可能となります。そのため、管理者のみのプライベートチャンネルにしたほうが良いです。

Lambda側で呼び出したSlackユーザー情報が取れれば、ユーザーに応じて処理実行有無を制御できるのですが、現状Slackユーザー情報は取得できないようです。

まとめ

すいません、なんだか長くなってしまった気がします。

本番運用されている方、アクセス方法に悩まれている方も多いかと思いますので、何かの参考になれば幸いです。

今回ご紹介したのは1つの手段です。アクセス手段を作ることは目的ではなく、本番上の情報を守ることが本来の目的かと思いますので、どういったら守れるのか、そういった観点でアクセス方法も考えていきたいですね。

ありがとうございました、明日のアドベントカレンダーもお楽しみに!!