7 年間溜めた AWS IAM AWS 管理ポリシーへの愛を語りました #devio2022
7 年前からが好きだよ AWS 管理ポリシー
コンバンハ、千葉(幸)です。
弊社主催のオンラインイベントDevelopersIO 2022の「アルティメットLT AWS愛を語り尽くす!AWS バーサス クラスメソッド 〜むしろお前が好きだよ〜」で AWS IAM AWS 管理ポリシーへの愛を語ってきました。
ここが好きだよ AWS 管理ポリシー
好きなポイントをかいつまんで書きます。
新サービスや新機能の発表の前に作成・更新されていることがある
新サービスや新機能が発表される前から、それらのための AWS 管理ポリシーが作成・更新されていることが多いです。
AWS管理ポリシーの更新をウォッチすることで、「もしかしたらこんなことできるようになるのかな?」という想像が捗ったりします。
数が多い
2022/8/1 時点で 960個以上の AWS 管理ポリシーがありました。推しを見つけたくなりますね。
たまに数が減る
非推奨(Deprecated)になると、IAM リソースにアタッチされていない限り消えて無くなっていきます。儚さを感じていいですね。
命名規則や説明文がバラエティ豊か
「ポリシー名でアンダースコアそこに挟むの……?」「説明が数百文字あるものもあれば 20文字足らずで終わるものもある……」など、眺めていて飽きません。
いろんなチームがそれぞれ独自に決めてるんだろうな、とか過去の歴史があるんだろうな、といった妄想が捗ります。
おすすめの AWS 管理ポリシーの愛で方
CSV 形式にしてスプレッドシートで愛でるのがおすすめです。
IAM ポリシーの一覧を必要な項目にのみ絞って出力する例が以下。
aws iam list-policies\ --scope AWS\ --max-items 1000\ | jq -r ' ["ポリシー名","パス","デフォルトバージョン","作成日時","更新日時","アタッチ可否"], (.Policies[] | [.PolicyName,.Path,.DefaultVersionId,.CreateDate,.UpdateDate,.IsAttachable]) | @csv' | pbcopy
一度に取得できるポリシーは1,000個までなので、複数回に分けての実行が必要になる日も近そうです。 勘違いでした。1,000個を超えても一度のコマンド実行で取得できます。
上記のコマンドでは IAM ポリシーの「説明(description
)」は取得できないため、そちらの情報が欲しいときは例えば以下のように実行します。
aws iam list-policies --max-items 1000 --scope AWS --output json | jq -r '.Policies[].Arn' \ | while read policy; do aws iam get-policy --policy-arn $policy --output json | jq -r '.Policy | [.PolicyName,.Description] | @csv' >> policies.csv done
上記の例だとひとつずつ直列に実行することになり時間がかかるため、xargs
コマンドなどを使用してパラレルでやる方がおすすめです(後から気づいた)。
1,000 を超える日も近い
AWS 管理ポリシーの数、そして他の何かの種類が今年中に 1,000 を超えそうです。
どちらが先に到達するか楽しみに待ちましょう!
登壇資料
AWS 管理ポリシーには AWS のすべてが詰まっています。興味を持つ方が増えれば何よりです。
以上、 チバユキ (@batchicchi) がお送りしました。
おまけ
泣く泣く削ったスライドです。
AWS 管理ポリシーをアルファベット順に並べた場合の先頭と末尾 5 つを調べてました。
テンポが悪くなるので削ったスライド pic.twitter.com/eouKap2Yij
— Batchi (@batchicchi) July 27, 2022
おまけ2
AWS 管理ポリシーを愛でている最中に生まれた各種情報です。いずれも 2022/7/27 0:00(JTC)時点のアクティブな(非推奨でない)ポリシーを対象にしています。
月ごとの AWS 管理ポリシーの増加数
月 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 |
---|---|---|---|---|---|---|---|---|
01 | - | 9 | 9 | 4 | 15 | 8 | 7 | 4 |
02 | 91 | 6 | 7 | 6 | 3 | 4 | 12 | 7 |
03 | 4 | 2 | 2 | 13 | 5 | 2 | 6 | 5 |
04 | 12 | 2 | 5 | 8 | 8 | 9 | 15 | 15 |
05 | 10 | 3 | 3 | 14 | 6 | 15 | 13 | 5 |
06 | 0 | 1 | 2 | 16 | 19 | 24 | 5 | 6 |
07 | 11 | 1 | 2 | 3 | 11 | 4 | 2 | 3 |
08 | 0 | 2 | 10 | 7 | 12 | 19 | 14 | - |
09 | 3 | 2 | 7 | 4 | 5 | 14 | 18 | - |
10 | 14 | 1 | 11 | 11 | 9 | 9 | 12 | - |
11 | 6 | 17 | 36 | 40 | 28 | 19 | 37 | - |
12 | 5 | 14 | 8 | 7 | 29 | 41 | 2 | - |
ポリシー名に登場する記号の件数
記号 | 件数 |
---|---|
+ | 0 |
= | 0 |
, | 0 |
. | 0 |
@ | 0 |
_ | 31 |
- | 11 |
ポリシー名の長さ TOP20
# | ポリシー名 | 長さ |
---|---|---|
1 | AmazonSageMakerServiceCatalogProductsCloudformationServiceRolePolicy | 68 |
2 | AmazonSageMakerServiceCatalogProductsCodePipelineServiceRolePolicy | 66 |
3 | AmazonSageMakerServiceCatalogProductsApiGatewayServiceRolePolicy | 64 |
4 | AmazonSageMakerServiceCatalogProductsCodeBuildServiceRolePolicy | 63 |
5 | AmazonSageMakerServiceCatalogProductsFirehoseServiceRolePolicy | 62 |
6 | AmazonSageMakerAdmin-ServiceCatalogProductsServiceRolePolicy | 60 |
7 | ApplicationDiscoveryServiceContinuousExportServiceRolePolicy | 60 |
8 | AWSBudgetsActions_RolePolicyForResourceAdministrationWithSSM | 60 |
9 | AmazonSageMakerServiceCatalogProductsLambdaServiceRolePolicy | 60 |
10 | AmazonSageMakerServiceCatalogProductsEventsServiceRolePolicy | 60 |
11 | AWSServiceRoleForCloudWatchAlarmsActionSSMServiceRolePolicy | 59 |
12 | AmazonSageMakerServiceCatalogProductsGlueServiceRolePolicy | 58 |
13 | AWSIoTDeviceDefenderAddThingsToThingGroupMitigationAction | 57 |
14 | AWSIoTDeviceDefenderReplaceDefaultPolicyMitigationAction | 56 |
15 | AWSIoTDeviceDefenderPublishFindingsToSNSMitigationAction | 56 |
16 | QuickSightAccessForS3StorageManagementAnalyticsReadOnly | 55 |
17 | AWSKeyManagementServiceMultiRegionKeysServiceRolePolicy | 55 |
18 | AWSKeyManagementServiceCustomKeyStoresServiceRolePolicy | 55 |
19 | AWSCloudWatchAlarms_ActionSSMIncidentsServiceRolePolicy | 55 |
20 | DynamoDBCloudWatchContributorInsightsServiceRolePolicy | 54 |
ポリシー名の短さ TOP20
# | ポリシー名 | 長さ |
---|---|---|
1 | Billing | 7 |
2 | AWSDenyAll | 10 |
3 | SupportUser | 11 |
4 | AWSConnector | 12 |
5 | LexBotPolicy | 12 |
6 | AWSConfigRole | 13 |
7 | SecurityAudit | 13 |
8 | DataScientist | 13 |
9 | AWSCloud9User | 13 |
10 | IAMFullAccess | 13 |
11 | AWSLambdaRole | 13 |
12 | AmazonSNSRole | 13 |
13 | IVSRecordToS3 | 13 |
14 | AWSIoTLogging | 13 |
15 | ReadOnlyAccess | 14 |
16 | ViewOnlyAccess | 14 |
17 | AWS_ConfigRole | 14 |
18 | AWSSSOReadOnly | 14 |
19 | AmazonChimeSDK | 14 |
20 | IAMUserSSHKeys | 14 |
説明の長さ TOP20
# | ポリシー名 | 長さ |
---|---|---|
1 | AWSElasticDisasterRecoveryReplicationServerPolicy | 738 |
2 | AWSApplicationMigrationReplicationServerPolicy | 661 |
3 | AWSElasticDisasterRecoveryConversionServerPolicy | 660 |
4 | AmazonGuardDutyMalwareProtectionServiceRolePolicy | 652 |
5 | AWSApplicationMigrationConversionServerPolicy | 589 |
6 | VMImportExportRoleForAWSConnector | 569 |
7 | AWSElasticDisasterRecoveryRecoveryInstancePolicy | 544 |
8 | AWSBackupAuditAccess | 503 |
9 | AmazonRedshiftQueryEditorV2ReadSharing | 457 |
10 | AmazonRedshiftQueryEditorV2ReadWriteSharing | 437 |
11 | AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy | 436 |
12 | AWSIoTSiteWiseConsoleFullAccess | 430 |
13 | AWSElasticDisasterRecoveryFailbackInstallationPolicy | 406 |
14 | AWSWAFConsoleFullAccess | 404 |
15 | AWSWAFConsoleReadOnlyAccess | 398 |
16 | AmazonRedshiftQueryEditorV2NoSharing | 388 |
17 | NeptuneConsoleFullAccess | 378 |
18 | AmazonDocDBConsoleFullAccess | 374 |
19 | AmazonEKS_CNI_Policy | 372 |
20 | ServerMigrationConnector | 367 |
説明の短さ TOP20
# | ポリシー名 | 長さ |
---|---|---|
1 | AWSDenyAll | 16 |
2 | AWSRoboMakerServicePolicy | 24 |
3 | AWSRoboMakerServiceRolePolicy | 24 |
4 | AWSIQFullAccess | 30 |
5 | LexBotPolicy | 31 |
6 | AWSSSODirectoryReadOnly | 33 |
7 | AWSXrayReadOnlyAccess | 34 |
8 | AmazonTextractFullAccess | 34 |
9 | AmazonEMRFullAccessPolicy_v2 | 34 |
10 | AlexaForBusinessPolyDelegatedAccessPolicy | 34 |
11 | LexChannelPolicy | 35 |
12 | AmazonSSMFullAccess | 35 |
13 | CloudWatchFullAccess | 35 |
14 | AWSXrayWriteOnlyAccess | 35 |
15 | AmazonRekognitionReadOnlyAccess | 35 |
16 | AWSXrayFullAccess | 36 |
17 | AWSFMAdminFullAccess | 36 |
18 | AWSPanoramaFullAccess | 36 |
19 | AWSIoTEventsFullAccess | 36 |
20 | AmazonMacieServiceRolePolicy | 36 |
こういうのをまとめてるだけでご飯が進むタイプです。