マネジメントコンソールを使うと、色々と自動でやってくれるので便利ではあるのですが、CLIで一つ一つ作成することで理解が深まると思います。
「awscli」タグの記事が2件件あります
全てのタグを見るAzure Cloud Shellを最強のAWS CLI環境にする
過去にQiitaに投稿した内容のアーカイブです。
最近Azureも触りだしましたが、AWSにない便利な機能の一つにAzure Cloud Shell
があります。
Azure Cloud Shellとは
Azure Cloud Shell は、Azure リソースを管理するための、ブラウザーでアクセスできる対話形式の認証されたシェルです。 Bash または PowerShell どちらかのシェル エクスペリエンスを作業方法に合わせて柔軟に選択できます。
https://docs.microsoft.com/ja-jp/azure/cloud-shell/overview
ブラウザからちょっとしたコマンドが実行できるので便利ですね。また、Windows ターミナルやスマホアプリからも使用することができます。 Azure Cloud shellの環境にAWS CLIをインストールしてしまおうという作戦です。
Azure Cloud Shellの概要
公式サイトからの引用です
概念
- Cloud Shell は、ユーザーごとにセッション単位で一時的に提供されるホスト上で実行されます。
- Cloud Shell は、無操作状態で 20 分経過するとタイムアウトとなります。
- Cloud Shell では、Azure ファイル共有がマウントされている必要があります
- Cloud Shell では、Bash と PowerShell に対して同じ Azure ファイル共有が使用されます
- Cloud Shell には、ユーザー アカウントごとに 1 台のマシンが割り当てられます。
- Cloud Shell はファイル共有に保持されている 5 GB のイメージを使用して $HOME を永続化します
- Bash では、標準の Linux ユーザーとしてアクセス許可が設定されます。
Bashが使え、5GBのファイル領域があり、$HOMEは永続化されるところがポイントです。
価格
Cloud Shell のホストとなるマシンは無料です。ただし、前提条件として Azure Files 共有をマウントする必要があります。 ストレージのコストは通常どおりに適用されます。
月額約¥6.72/Giなので5G使っても月35円ぐらいです。
AWS CLI V2のインストール
Linux での AWS CLI バージョン 2 のインストールを参考にしますが、ポイントは
- ホームディレクトリ内にインストールする
です。
@Azure:~$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 31.9M 100 31.9M 0 0 102M 0 --:--:-- --:--:-- --:--:-- 102M
@Azure:~$ unzip -q awscliv2.zip
@Azure:~$ ./aws/install -i ~/aws-cli -b ~/bin
You can now run: /home/xxxxxx/bin/aws --version
@Azure:~$ rm -rf aws
@Azure:~$ rm -rf awscliv2.zip
@Azure:~$
@Azure:~$ ~/bin/aws --version
aws-cli/2.0.46 Python/3.7.3 Linux/4.15.0-1093-azure exe/x86_64.ubuntu.16
@Azure:~$
~/bin
ディレクトリにパスが通るように、.bashrc
に書いておきましょう
@Azure:~$ echo 'export PATH=~/bin:$PATH' >> .bashrc
@Azure:~$
@Azure:~$ source .bashrc
@Azure:~$ aws --version
aws-cli/2.0.46 Python/3.7.3 Linux/4.15.0-1093-azure exe/x86_64.ubuntu.16
@Azure:~$
これでインストールは完了です。
認証情報の設定
通常、AWSの認証情報は~/.aws
に保管されますが、Azure Cloud Shellの説明に
SSH キーなどのシークレットを格納するときは、ベスト プラクティスを使用します。 Azure Key Vault などのサービスには、設定用のチュートリアルが用意されています。
とありますので、これを使って認証情報を保存してみましょう。
Key Vaultの作成と認証情報の登録
Key Vaultの作成
cloud-shell-aws-cli
がKey Vaultの名称です。
@Azure:~$ az keyvault create --name cloud-shell-aws-cli --resource-group [リソースグループ名] --location japaneast
AWS アクセスキーの登録
@Azure:~$ az keyvault key create --vault-name cloud-shell-aws-cli --name aws-access-key-id --protection software
@Azure:~$ az keyvault secret set --vault-name cloud-shell-aws-cli --name aws-access-key-id --value [AWS アクセスキー]
シークレットキーの登録
@Azure:~$ az keyvault key create --vault-name cloud-shell-aws-cli --name aws-secret-access-key --protection software
@Azure:~$ az keyvault secret set --vault-name cloud-shell-aws-cli --name aws-secret-access-key --value [シークレットキー]
AWS リージョンの登録(機密性はありませんが。。)
@Azure:~$ az keyvault key create --vault-name cloud-shell-aws-cli --name aws-default-region --protection software
@Azure:~$ az keyvault secret set --vault-name cloud-shell-aws-cli --name aws-default-region --value ap-northeast-1
Key Vaultに登録した値の取得
登録した値の取得は以下でできます。
@Azure:~$ az keyvault secret show --vault-name cloud-shell-aws-cli --id https://cloud-shell-aws-cli.vault.azure.net/secrets/aws-default-region
{
"attributes": {
"created": "2020-09-06T02:02:45+00:00",
"enabled": true,
"expires": null,
"notBefore": null,
"recoveryLevel": "Recoverable+Purgeable",
"updated": "2020-09-06T02:02:45+00:00"
},
"contentType": null,
"id": "https://cloud-shell-aws-cli.vault.azure.net/secrets/aws-default-region/28db5ad04abf4a1a92d43f7ae9cccae8",
"kid": null,
"managed": null,
"name": "aws-default-region",
"tags": {
"file-encoding": "utf-8"
},
"value": "ap-northeast-1"
}
@Azure:~$
このままだと扱いづらいので必要な値だけを取得します。
@Azure:~$ az keyvault secret show --vault-name cloud-shell-aws-cli --id https://cloud-shell-aws-cli.vault.azure.net/secrets/aws-default-region --output tsv --query "[value]"
ap-northeast-1
@Azure:~$
余談となりますが、az keyvault secret show
のパラメーターで必要なid
はhttps://[Key Vault名].vault.azure.net/secrets/[Key名]
の書式ですが、以下のコマンドで取得することも可能です。
@Azure:~$ az keyvault secret list --vault-name cloud-shell-aws-cli
[
{
"attributes": {
"created": "2020-09-06T02:01:33+00:00",
"enabled": true,
"expires": null,
"notBefore": null,
"recoveryLevel": "Recoverable+Purgeable",
"updated": "2020-09-06T02:01:33+00:00"
},
"contentType": null,
"id": "https://cloud-shell-aws-cli.vault.azure.net/secrets/aws-access-key-id",
"managed": null,
"name": "aws-access-key-id",
"tags": {
"file-encoding": "utf-8"
}
},
{
"attributes": {
"created": "2020-09-06T02:02:45+00:00",
"enabled": true,
"expires": null,
"notBefore": null,
"recoveryLevel": "Recoverable+Purgeable",
"updated": "2020-09-06T02:02:45+00:00"
},
"contentType": null,
"id": "https://cloud-shell-aws-cli.vault.azure.net/secrets/aws-default-region",
"managed": null,
"name": "aws-default-region",
"tags": {
"file-encoding": "utf-8"
}
},
{
"attributes": {
"created": "2020-09-06T02:01:44+00:00",
"enabled": true,
"expires": null,
"notBefore": null,
"recoveryLevel": "Recoverable+Purgeable",
"updated": "2020-09-06T02:01:44+00:00"
},
"contentType": null,
"id": "https://cloud-shell-aws-cli.vault.azure.net/secrets/aws-secret-access-key",
"managed": null,
"name": "aws-secret-access-key",
"tags": {
"file-encoding": "utf-8"
}
}
]
@Azure:~$
ここまでで認証情報をKey Vaultに登録及び取得ができました。
なのでこれも.bashrc
に登録しちゃいましょう。
@Azure:~$ echo 'export AWS_ACCESS_KEY_ID=`az keyvault secret show --vault-name cloud-shell-aws-cli --id https://cloud-shell-aws-cli.vault.azure.net/secrets/aws-access-key-id --output tsv --query "[value]"`' >> .bashrc
@Azure:~$ echo 'export AWS_SECRET_ACCESS_KEY=`az keyvault secret show --vault-name cloud-shell-aws-cli --id https://cloud-shell-aws-cli.vault.azure.net/secrets/aws-secret-access-key --output tsv --query "[value]"`' >> .bashrc
@Azure:~$ echo 'export AWS_DEFAULT_REGION=`az keyvault secret show --vault-name cloud-shell-aws-cli --id https://cloud-shell-aws-cli.vault.azure.net/secrets/aws-default-region --output tsv --query "[value]"`' >> .bashrc
@Azure:~$
@Azure:~$ source .bashrc
@Azure:~$
動作確認
@Azure:~$ aws sts get-caller-identity
{
"UserId": "XXXXXXXXXXXXXXXXXXX",
"Account": "999999999999",
"Arn": "arn:aws:iam::999999999999:user/XXXXXXXXXX"
}
うまくいきました。