![[アップデート]AWS Service Catalog ポートフォリオへのアクセス権の付与にワイルドカードが使えるようになりました](https://devio2023-media.developers.io/wp-content/uploads/2022/08/aws-service-catalog.png)
[アップデート]AWS Service Catalog ポートフォリオへのアクセス権の付与にワイルドカードが使えるようになりました
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
昨日のアップデートでAWS Service Catalog ポートフォリオへのアクセス権の付与にワイルドカードが使えるようになりました。
どんなアップデート?
まず前提ですがAWS Service Catalogにはポートフォリオという製品群をまとめるコンポーネントがあり、このポートフォリオに対しアクセス権を付与しないと製品を起動できません。 このアクセス権の付与を行う際に、ワイルドカードを使ってIAM プリンシパル(ユーザー・ロール・グループ)を指定できるようになりました。
これにより柔軟に製品の起動を行えるようになります。
具体的にどんなことができるようになるのか
ワイルドカードが使えるようになるだけでは、どのようなことができるのかイメージしにくいですよね。 このアップデートで重要なのは、「ワイルドカードを使ったアクセス権を付与したポートフォリオを共有できる」ことにあります。
去年Organizations配下へポートフォリオの共有を行う際、アクセス権を含めた共有が可能になるアップデートがありました。
このアップデートのときに共有できたアクセス権にはワイルドカードが使えなかったため、共有したポートフォリオの製品にアクセスできるのは同じ名前を持つIAM プリンシパルのみでした。
以下の図でいうと、ポートフォリオに対しEndUserAccessというIAMロールにアクセス権を付与し、メンバーアカウントへ共有した状態です。これでメンバーアカウントのIAMロールEndUserAccessに対し共有したポートフォリオに自動でアクセス権を付与できます。

ただし、メンバーアカウント側にも同じIAMロールが存在している必要があるため、事前に作成しておくなど対応が必要でした。

今回のアップデートでどう変わるかというと、AWS Identity Centerで作成されるIAMロールにもアクセス権を付与して共有できるようになりました。
AWS Identity Centerによって作成されるIAMロールは以下のような形式です。問題だったのは許可セット名の後にアカウント単位で変わるランダムな文字列が入ってしまうことでした。
aws-reserved/sso.amazonaws.com/{リージョン}/AWSReservedSSO_{許可セット名}_{ランダムな文字列}
このランダムな文字列があるのでAWS Identity CenterのIAMロールを指定できずに、手動でIAMロールを作成する必要があったんですね。
これが今回のアップデートにより、でAWS Identity CenterのIAMロールに置き換えられるようになりました。

ランダムな文字列部分にワイルドカードが使用できるため、一括でAWS Identity CenterのIAMロールにアクセス権を付与できます。
やってみる
前提としてポートフォリオに製品が既にある状態で進めていきます。
このポートフォリオに対し、IAM Identity Centerによって作成されるIAMロールAWSReservedSSO_AWSServiceCatalogEndUserAccess_*にアクセス権を付与して、組織全体へ共有します。
共有されたメンバーアカウント側にはAWSReservedSSO_AWSServiceCatalogEndUserAccessを使ってログインし、共有されたポートフォリオにある製品vpcが表示されるかを確認していきます。
アクセス権の付与
アップデートで追加されたワイルドカードを使ったアクセス権の付与を行ってみます。
コンソールからポートフォリオを表示して、「アクセス権権の付与」をクリックします。

アクセス権付与の画面に遷移するので、アクセスタイプをプリンシパル名にします。
プリンシパル名ではタイプを/roleのまま、アクセス許可を与えたいIAM Identity CenterのIAMロールを入力します。
私は以下のようなIAMロールに対しアクセス権を許可したいため、ランダムな文字列が入る部分をワイルドカードに置き換えました。
aws-reserved/sso.amazonaws.com/ap-northeast-1/AWSReservedSSO_AWSServiceCatalogEndUserAccess_{ランダムな文字列}

最初はAWSReservedSSO_から入力してみてうまくいかなかったので、aws-reserved~から全て入力しましょう。
ポートフォリオの共有(管理アカウント)
次に組織全体に対して、アクセス権を含めたポートフォリオを共有します。
共有タブから共有を開きます。

共有する範囲を組織全体としたいので、以下のように設定します。 ここでRootを選択すると、子OUまで共有されるため全OUが対象となります。

下に「プリンシパル共有」というチェックボックスがあるのでチェックを入れます。ここを設定しないとメンバーアカウントにアクセス権は共有されないので注意しましょう。

これでアクセス権を含めたポートフォリオの共有が完了しました。
IAM Identity CenterのIAMロールで製品を確認する(メンバーアカウント)
それではアクセス権を付与したIAM Identity CenterのIAMロールで製品が起動できるか確認してみます。
AWSServiceCatalogEndUserAccessのIAMロールにIAM Identity Centerからスイッチしてログインしてみます。
AWS Service Catalogの製品を開くと、管理アカウントから共有されたポートフォリオの製品vpcが無事表示されました。(ポートフォリオに対するアクセス権がないIAMロールでは、製品が表示されません。)

他のアカウントにもAWSServiceCatalogEndUserAccessを使ってログインしてみると、同じように製品vpcが何もせずに表示されました。これでようやく本来やりたかったアクセス権を含めた共有が実現できたと言えそうです。
まとめ
アップデートによって使えるようになったワイルドカードを使ったアクセス権の付与を実際に試してみました。1アカウント内ではそれほど運用に変化はありませんが、マルチアカウントでAWS Service Catalogを活用している場合は、非常に便利なアップデートです。
ポートフォリオを利用させたい許可セットにアクセス権を付与して共有すれば、利用者は製品を起動するだけになりました。
CloudFormationテンプレートを利用者に展開したいときのハードルがグッと下がったと思うので、是非この機会にAWS Service Catalogの活用を検討してもらえたら嬉しいです。







