0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Lamda を使って AWS Secret Manager からアクセスキー、シークレットキーを取得して awscli を動作させる

0
Posted at

はじめに

https://qiita.com/bakachou/items/d8633df31b7cd9b4262c
ここで、Lambda を利用して AWS EC2 のインスタンスを管理する記事を書いている続き。

アクセスキーとシークレットキーを AWS Password Manager から取得して、Lambda で awscli を実行させるメモ。

手順

https://qiita.com/bakachou/items/d8633df31b7cd9b4262c
Lambda のレイヤーを作成するときに Ruby、Python の関数でも利用できるようにする。

  1. Amazon Secret Manaer で awscli のアクセスキー、シークレットキーを登録
  2. Lamdaレイヤーで互換性のランタイムで Ruby、python などプログラムが実行できるものを選択する
  3. レイヤーを関数に割り当てる
  4. [コード]で Secret Manager からデータを取得するプログラムを実行して awscli を動作

Amazon Secret Manaer で awscli のアクセスキー、シークレットキーを登録

AWS Secret Manager で [新しいシークレットを保存する] を選択

image.png

[キー/値のペア] でAWS のアクセスキー、シークレットキーを登録

image.png

[シークレットの名前] を入力して [次] をクリック

image.png

ローテーションは特に関係ないため、そのまま [次] をクリック

image.png

レビュー画面で確認を促されるので、確認後 [保存]する

image.png

レビュー画面で Secret Manager から情報を取得するサンプログラムが表示される。
これをあとで使うので、どこかコピーしておく。
(後でも表示できるので、コードを記載するときにでもよい)

image.png

Lamdaレイヤーで互換性のランタイムで Ruby、python などプログラムが実行できるものを選択する

image.png

互換性のあるランタイムで以下を選択する

  • Pytho 3.13
  • Ruby 3.3
  • Amazon Linux 2023

image.png

レイヤーを Lambda 関数に割り当てる

python は知らないので ruby で作ります

image.png

関数を作り、レイヤーを割り当てます

image.png

[コード]で Secret Manager からデータを取得するプログラムを実行して awscli を動作

[コード] のタブで以下のように ruby のコードを記載します。

Secret Manager から取得するコードは AWS Sercret Manager の画面でサンプルコードが出てきますので、それを利用します。
下のサンプルでは EC2 のインスタンスID 一覧を表示しています。

image.png

require 'json'
require 'aws-sdk-secretsmanager'

command='/opt/bin/aws --version'
result = system (command)
p result

def get_secret()
  client = Aws::SecretsManager::Client.new(region: 'ap-northeast-1')

  begin
    get_secret_value_response = client.get_secret_value(secret_id: 'AWSCLI_SECRET')
  rescue StandardError => e
    # For a list of exceptions thrown, see
    # https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
    raise e
  end

  secret = get_secret_value_response.secret_string
  # Your code goes here.

  return secret
end


def lambda_handler(event:, context:)
    # TODO implement
    { statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end

secret_string = get_secret()

hash_secret = JSON.parse(secret_string)
# p hash_secret['AWS_API_KEY']
# p hash_secret['AWS_SECRET_KEY']
  
command="/opt/bin/aws configure set hash_secret['AWS_API_KEY'] hash_secret['AWS_SECRET_KEY']"
result = system (command)
p result
  
command="aws ec2 describe-instances --query 'Reservations[].Instances[].{InstanceId:InstanceId}'"
result = system (command)
p result  
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?