AWS のIAM ID センターのcredentials取得までの流れ(AWS SDK ローカル接続で必要な)

# はじめに
記録に残しておこうと言った感じです！(✿´ ꒳ \` )
あと少し書いた後で調整しています。きっと大丈夫かと思いますが不安な際は都度公式のリンク貼っているのでそちら確認もいいかもしれません！ちなみに`credentials`は期限設定によりますがセッション切れたらちゃんと新しいのにしないと使えません。(セッションの時間は許可セット設定の箇所で調整できます。自分は1時間にしています。)

ちなみに最終的に獲得したい値達は以下のようなものです！
```
[277650267482_PowerUserAccess]
aws_access_key_id=XXXXXXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXX
aws_session_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```

SDK認証系の詳しい情報はここらから
https://docs.aws.amazon.com/sdkref/latest/guide/access.html

今回の参考リンクは主に以下です！(◍•ᴗ•◍) 
https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html
https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-enable-identity-center.html

# 流れ

(step1 ~ step8)
:red_circle: AWS外部でアクセス出来るAWSのサービス(IAM ID　センター)有効
↓
:red_circle: そこでユーザー作成
↓
:red_circle: そこでアクセスどこまで出来るかの権限作成
↓
:red_circle: ユーザーと権限の紐付け

(step9)
:red_circle: AWS credentials取得


詳細は以下Stepで:man_tone1:


# Step1 『IAM ID センター』を有効にする
『IAM ID センター』とはなんですか:girl_tone1:? … AWSからの接続以外でAWSサービスに接続する時絶対必要なやつらしいです。認証の管理で。(以下が公式の説明)
>AWS 以外のコンピューティング サービスで開発する場合に AWS 認証情報を提供する推奨方法です。
https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html


- [『IAM Identity Center コンソール』](https://console.aws.amazon.com/singlesignon)へアクセスし一回リージョンを自分がよく使うのに念の為変更(東京)して『有効にする』をタップ。
<img width="200px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/cbdc9331-bddd-b4d3-4d19-4530f8b7e6f6.png">

- タップして『組織』を作成していないと作成しろと出るのでそのまま『AWS組織を作成する』をタップ。
<img width="200px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/e242a408-e113-52a5-4d7e-9f21ad6bacba.png">

- ここでメールがくるのでメールできた有効のボタンを押してください( ･ὢ･ ) 
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/38324ce4-7558-dd1d-da20-f61ca740d32e.png">

メール私はすぐきましたがすぐこない時もあるようです(◍•ᴗ•。◍) 

ちなみに今の時点で元々開いているものと今リンクから開いたもの、、、
『**IAM  Identity Center**』と『**AWS Organizations**』のページを開いています(◍•ᴗ•◍) 
ちなみに以下操作は『**IAM  Identity Center**』かそれ以外のページで『**AWS Organizations**』はもう使用しません。

ハ------------!!!!!!!!!!!!!!!!!
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/972a855c-1638-a78b-309e-fb8845dbd2bf.png">

開くのいっぱいですね:fishing_pole_and_fish:

迷った時に、
『**IAM  Identity Center**(こっち基本)』 => https://ap-northeast-1.console.aws.amazon.com/singlesignon/home
『**AWS Organizations**(基本もう見ない)』 => https://us-east-1.console.aws.amazon.com/organizations/v2/home/accounts


# Step2 『ID ソース』を選択する (今回はデフォルトのもの使うのでスキップ)
『ID ソース』とはなんですか:girl_tone1:? … 管理する場所を選択するみたいです。(以下が公式の説明)
> IAM Identity Center のアイデンティティ ソースは、ユーザーとグループが管理される場所を定義します
https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-choose-identity-source.html

管理場所は以下3つあるよう。
:penguin:ふむ私は断然デフォルトで作成されるやつですかね、、

|管理方法(IDソース)|少し説明|
|:-|:-|
|Identity Center ディレクトリ|デフォルトで自動的に作成される箇所|
|Active Directory|デフォルトでないやつのディレクトリ|
|外部 ID プロバイダー|Azureとか外部で管理したい時に使うらしい。ふ〜〜ん。|

では、
ちなみに管理方法の変更は、
`『設定』 => 『アイデンティティソース』の『アクション』 => 『アイデンティティソースの変更』`
から出来そうでした。

# Step3 『IAM Identity Center 』でユーザーを作成 (ユーザー側で承認するところまで)
[参考リンク1](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-use-identity-center-directory-create-user-in-identity-center.html)
[参考リンク2](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html)

- 『ユーザー』 => 『ユーザー追加』をタップ。
- 以下のような入力欄出てくるので良い感じに入れて『次へ』をタップ。
```
・『ユーザー名』…後で変更不可の1 ～ 100

・『パスワード』…デフォルトの設定だと自分でパスワード作成しろって感じのメール送れるらしいです。
※ちなみにメールは『no-reply@signin.aws』か『no-reply@login.awsapps.com』からくるそう。

・『メールアドレス』…メール送りたい人のメールアドレスですね。

・『メールアドレスを確認』…上と同じメールアドレス

・『名』…使用者の名前とかで。

・『姓』…使用者の苗字とかかで。

・『表示名』…上記で打った『名』と『姓』が勝手に入るのでそれで。変えても大丈夫かとは思いますが、

あとは任意なので無視
```
- グループは任意なので『次へ』をタップ
- 『ユーザーを追加』をタップ
- ここでメールが来るのでメールの許可のボタンタップ。
![スクリーンショット 2023-06-19 0.24.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/d1ef41eb-ce49-0c46-412c-735c211e19db.png)
- 『メールの許可のボタンタップ』でパスワード作成するように促されるので適当なパスワードを。パスワード作成あとユーザー名と指定したパス入力で以下のような画面へ行けます！(✿´ ꒳ ` )ちなみにユーザー名はメールにくっついてくるので作成者に聞かなくても大丈夫そう。

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/44b461ba-c3e6-8fe9-2dd0-35953bca4225.png">

:girl_tone1::girl_tone1::girl_tone1::girl_tone1::girl_tone1::girl_tone1:
上記でMFAのやつも登録出来そうですね。!!!!

パスワードだけだと怖いので設定します！

ちなみに管理画面の方でも設定できそうでした!

設定ユーザーが最終的には設定だろうですが。

では！(ちなみにこれはやらなくても良いけどセキュリティ的にやりたいのでって感じです<=書きましたがやれって書いてありました、、(◍•ᴗ•◍)後々の処理で<=ここで設定しなくても後の設定で強制されるの認識。『Step6 MFA認証』参考。)

・**『MFA devices』タップ**
・**『Register device』タップ**
・**何かしらの認証アプリをインストール　※アプリストアなどから。　私はすでにGoogleのAuthenticatorあるのでこれ使用します。**
・**『認証アプリ』タップ**
・**『NEXT』タップ**
・**『Show QR Coed』タップ**
・**表示したQRコードをアプリで読み取る**
・**『認証コード』の箇所にアプリで表示される6桁のコードを入力**
・**『MFAを割り当て』タップ**
・**『完了』タップ**

当たり前かもですが、登録すると、AWSの『IAM Identity Center』ページのユーザー詳細の『MFA デバイス』の箇所にちゃんと登録されたものが表示されました。

:girl_tone1::girl_tone1::girl_tone1::girl_tone1::girl_tone1::girl_tone1:

# Step4 管理権限セットを作成する ※許可セット
[参考リンク1](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-create-an-administrative-permission-set.html)
『管理権限セット』とはなんですか:girl_tone1:? … 作成したユーザーにどこまでの権限をつけてやるか設定するみたいです。(以下が公式の説明)
>ユーザーとグループが AWS アカウントに対して持つアクセスのレベルを定義します。
https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-create-an-administrative-permission-set.html

- 『許可セット』をタップ。
- 『許可セットを作成』をタップ。(ちなみにここではリージョンないようでリージョン設定箇所グローバルになってます。)
- 『事前定義された許可セット』をタップ。(選択されたものそのまま)
- 『AdministratorAccess』をタップ。(選択されたものそのまま) 
**<font color="red">※後続ステップ(Step8)で『PowerUserAccess』のみの権限も追加付与します。<=正直最初からこれだけはダメなのかなとか思ったりしてもいます。きっと問題なさそう。実際のSDKのアクセスもこれだけで問題なかったので。ちなみにSDKの方の説明ではこっちの権限でって書いてありましたので、、</font>**
※上記いいつつも、今回はここら辺気にしないで行きます！
- 『次へ』をタップ。
<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/3601eff9-d24d-2dab-6bfd-534f0d7135ef.png">

- 次の表示もデフォルトのまま『次へ』をタップ。
※セッション期間とか設定できるページ。
- 『作成』をタップ。

# Step5 作成したユーザーに作成した許可セットを紐づける。(セットする。)
[参考リンク1](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-assign-account-access-admin-user.html)

- 『AWS アカウント』をタップ
- ツリーみたいの表示されるので紐付けたいアカウントのチェックボックスタップ。
- 『ユーザーまたはグループの割り当て』をタップ
- 上部の『ユーザー』タブタップ。
- 割り当てるユーザーのチェックボックスタップ。
- 『次へ』タップ。
- 次の箇所で割り当てるものタップ。今回は『AdministratorAccess』。
- 『次へ』タップ。
- 『送信』タップ。

# Step6 MFA認証(セキュリティ強化的なものだが強制でみたいにみえたのでここでは必須扱いにします。)
[参考リンク1](https://docs.aws.amazon.com/singlesignon/latest/userguide/mfa-enable-how-to.html)
ここなのですが、上でMFA設定した場合で設定した場合そのまま登録したもの使えました!
きっとこれ設定で全てのユーザーにMFA強制出来るの認識です。

- 『設定』タップ
- 『設定』タップ
- 『サインインごと(常時オン)』タップ
- 『Authenticator アプリケーション』タップ
- 『サインイン時に MFA デバイスを登録するよう要求する』タップ
- それ以外今回はずす感じにして『変更を保存』をタップ。

![スクリーンショット 2023-06-19 2.07.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/e80c90bf-bcd3-0b20-d98f-17526d052296.png)

# Step7 (スキップ可)　アクセスポータルURLアクセス問題なし確認
[参考リンク1](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-sign-in-access-portal.html)
-  『ダッシュボード』 => 『AWS アクセスポータルの URL』のURLで問題なくアクセス出来る確認。
- 『AWS アカウントのアイコン』タップしてユーザー表示される確認。


# Step8 許可セット追加付加で使用権限を追加。(変更ではないのですね、、)
[参考リンク1](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-create-permission-set-to-grant-least-privilege-permissions.html)
[参考リンク2](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)

<font color="blue">ユーザーに権限をいくつかつけて、ユーザーは必要なとき必要な権限のものを使用のイメージ</font>
<font color="green">でSDK使用の時は『PowerUserAccess』の方使って見たいな感じかと</font>

- 上記『Step4』を参考に権限『PowerUserAccess』のものを作成。※step4では『AdministratorAccess』で作成していたもの。

- 上記『Step5』を参考に作成権限紐付ける。『PowerUserAccess』に紐づける。『AdministratorAccess』にチェック入れない。

上記することでポータルでアクセスするとユーザーの箇所の権限が以下のように2種類になります。
![スクリーンショット 2023-06-19 2.53.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/0928ad16-a64b-d29e-c428-337ea215acfa.png)


# Step9 credentials取得
[参考リンク1](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)
[参考リンク2](https://docs.aws.amazon.com/cli/latest/userguide/sso-configure-profile-token.html#sso-configure-profile-token-auto-sso)

- 　アクセスポータルへアクセス (参考step7)
- 　使いたいユーザー権限(今回はPowerUserAccess)の『Command line or programmatic access』タップ。
![スクリーンショット 2023-06-19 3.08.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/61cd8f52-c44c-25e8-328a-fea7f9d19552.png)
- 　自分に合ったOSを上部タブで選択。「option2」の箇所に今回必要なものがあるの感じです！

dockerのファイル設定の参考に以下なるかもしれないので添付しておきます！

https://qiita.com/sachiko-kame/items/efd1232c8014e180f466

# おまけ1

コマンドでただS3の中をみたいだけの場合以下の手順でできたので記載しますが、
これの活用方法がいまだにわかりません。どう活用するかコメント等で教えていただけると、、

- 自分に合ったOSを上部タブで選択。「option1」行う。

- 以下コマンド叩く

```
$ aws configure sso

SSO start URL: (上記の『Command line or programmatic access』タップ。で表示されているもの入力)
SSO Region [None]: (上記の『Command line or programmatic access』タップ。で表示されているもの入力)
```

- ブラウザ開かれるのでAWSの『Allow』タップ。
<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/56920da5-e5a2-4f05-b66e-bccbc2a2a3f4.png">

- ターミナルに戻ると権限選択できるので『PowerUserAccess』の方にしてエンター。
<img width="100px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/b1cb88e7-71d4-2f03-7d83-9ddb032bb929.png">

- ターミナルで以下まだ出てくるので、全部エンターで[]の中がNoneでないはずなので。
```
CLI default client Region[XXXX]: エンター
CLI default output format [json]: エンター
CLI profile name [XXXXXXXXXXXXXXXXXXXXXXXx]: エンター
```

ここで`~/.aws/config`の箇所に良い感じに作成されるよう。だが、、う〜〜んの感じのしか作成されていませんでした。[参考リンク2]の7のみたいの出来ていると思ったのに。ただ成功している感じには出ているのでスルーします。

ちなみに以下コマンドでアクティブなセッションの表示されるのでそれで良い感じに出ていればOKとします。
```
$ aws sts get-caller-identity
```


https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/credentials.html
ここからまたあるのかも


ちなみにセッション再開は以下でできるよう。
```
//aws configure sso打って最後出てきたaws s3 ls --profile XXXXXXXXXXで出てきた『XXXXXXXXXX』入力。
$ aws sso login --profile XXXXXXXXXX
```

設定から行いたい場合
```
$ aws configure sso
```

ログアウトの場合
```
$ aws sso logout
```
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/sso-using-profile.html

ログインがうまくと以下のようなコマンドでバケット一覧取得出来ました。『XXXXXXXXXX』は各自違うかと。
```
$ aws s3 ls --profile PowerUserAccess-XXXXXXXXXX
//out put => 2023-06-20 02:13:08 sample-img
```


# おまけ2
SDK使う時はSDK取り込まないといけないので以下のリンク等参考になるかと思います。
[参考リンク1(ここから自分の言語にあったリンクへ行ってください。)](https://docs.aws.amazon.com/sdkref/latest/guide/overview.html)
[参考リンク2(PHP)](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/getting-started_index.html)

私の場合PHPなので今回はPHPの参考でやります！

- 『composer.phar』が存在することを確認し以下コマンド

```
//Composer で aws-sdk-php をインストール
$ php composer.phar require aws/aws-sdk-php
```


- 使う箇所(phpファイル)でimportし必要なもの使うようにしていく。

※自分はdockerでやっているのですが『AWS credentials』がDockerのコンテナに適切に配置されていれば`$ aws configure sso`とかは不要だったんだろうなと、、

その時でたエラー等々の説明は以下リンクです。

https://qiita.com/sachiko-kame/items/efd1232c8014e180f466

以下Sample

```PHP
//AWS
use Aws\S3\S3Client;  
use Aws\Exception\AwsException;

$s3Client = new S3Client([
    'profile' => '277650267482_PowerUserAccess',
    'region' => 'ap-northeast-1',
    'version' => '2006-03-01', //ここ決まりっぽいです。またはlatestかと
]);

try {
    $result = $s3Client->createBucket([
        'Bucket' => 'abcde-img',
    ]);
} catch (AwsException $e) {
    echo $e->getAwsErrorMessage();
}
```

# 最後に

終わりです！:hatched_chick: