SG-AWS Identity and Access Management: セットアップ、ガイドライン、およびトラブルシューティングSummary<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } このドキュメントの目的は、Service Graph Connector for AWS の IAM セットアップがどのようなものであるかを説明することです。セットアップには他のバリエーションも可能です。また、このドキュメントのもう 1 つの目的は、ここで説明する IAM セットアップとお客様の IAM セットアップを比較することによって、トラブルシューティングのためのガイドラインを提供することです。ヒントは、多くの場合赤色で強調表示されています。 IAM Identityは、認証され、その後アクションを実行する権限を付与された人間またはプログラムを表します。例: ユーザー、ユーザーグループ、ロールUser は、AWS と対話しアクションを実行するエンティティを表します。一般的に固定の認証情報を持ちます。Group はユーザーの集合です。Role は User に似ていますが、より一時的なものです。単一のエンティティによって「所有」されることはできません。単一セッション用の認証情報を提供します。Policies は、エンティティがどのアクションを実行できるかを定義する特定の権限です。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Service Graph Connector for AWS v2.0 以降 Instructions<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 1.AWS IAM ユーザー AWS の IAM User は ServiceNow Instance User (以下、snow.user と呼びます) を表します。 AWS IAM コンソール内に有効なユーザー (principal) が存在する必要があります。このユーザーには一意の access key/secret key があり、それらを ServiceNow インスタンスに入力する必要があります。 重要な注意事項: このユーザーは管理アカウントまたは「指定アカウント (designated account)」のいずれかに作成されます。 IAM ユーザーはポリシー (つまり、許可されるアクションを指定する権限) に関連付けることができます。しかし、単一ユーザーに権限をアタッチする代わりに、ユーザーグループに権限をアタッチし、そのユーザーをグループのメンバーにします。 2.グループとポリシー 前の手順のユーザーは、以下のようなグループに属している必要があります。 このグループはさらに 2 つのポリシーに関連付けられています。 1. SnowMemberAccountAccessPolicy このグループのメンバーは、この組織内の任意のアカウントで API sts:AssumeRole (SnowOrganizationAccountAccessRole を取得するため) を呼び出すことができます。このポリシーが存在しない場合、snow.user は AWS API を一切呼び出せません。この API は非常に重要です。 デバッグに関する注意 : STS Assume Role API を呼び出した際に、HTTP 40x AssumeRole call has failed のようなエラーが発生する場合は、このポリシーがユーザーグループにアタッチされているか確認してください。以下を確認してください。 ユーザーが正しいグループに属していることServiceNow ユーザー (snow.user) に使用されている認証情報が正しいこと 2.SnowAccountAccessPolicy このポリシーは、snow.user が以下のポリシーに記載されている基本 API を呼び出すために必要です。その中でも organizations:* で始まるものが最も重要です。これらを代替する方法はなく、最も基本的なデータソースの CI 情報を取得するために使用されます。このポリシーをアタッチしない場合、コネクタは CI をまったく取得できません。 再度ご注意ください。上記のセットアップ (snow.user、およびグループとそのポリシー) は、管理アカウントまたは指定管理 AWS アカウントで実施する必要があります。 デバッグに関する注意 : STS AssumeRole API は呼び出せるが、診断ツールで ListAccounts API 呼び出しが失敗し、CI がほとんど取得できない場合は、管理アカウント (または指定アカウント) に SnowAccountAccessPolicy が存在するか確認してください。 このポリシーは、ServiceNow ユーザー (snow.user) を作成したアカウントに存在する必要があります。また、前述のとおり、このポリシーは正しいグループにアタッチされており、そのグループに snow.user が含まれている必要があります。 3.ロール:SnowOrganizationAccountAccessRole ユーザーに直接ポリシーをアタッチするのは最善の方法ではないことが分かっています。上で見たように、ポリシーをユーザーグループにアタッチし、そのグループ内のすべてのユーザーが、そのポリシーで指定されたリソースにアクセスできます。 しかし、ユーザーに一時的な権限を付与したい場合はどうすればよいでしょうか。AWS で一時的なアクセスを付与するにはどうすればよいでしょうか。 そのためにロールを使用します。 重要: このロールは、CI 情報を取得したいすべての AWS アカウントに存在する必要があります。このロールを正しく設定することは非常に重要であり、関連付けられたポリシー (後述) と有効な信頼関係 (trust relationship) を持つ必要があります。 関連付けられたポリシー - SnowOrganizationAccountAccesPolicy (重要) このポリシーは、snow.user (つまり ServiceNow インスタンス) が呼び出せる API 一覧を定義する重要なポリシーです。 ポリシーは以下のようになります。 { "Version": "2012-10-17", "Statement": [ { "Action": [ "organizations:DescribeOrganization", "organizations:ListAccounts", "config:DescribeConfigurationAggregators", "config:ListDiscoveredResources", "config:SelectAggregateResourceConfig", "config:BatchGetAggregateResourceConfig", "config:SelectResourceConfig", "config:BatchGetResourceConfig", "ec2:DescribeRegions", "ec2:DescribeImages", "ec2:DescribeInstances", "ec2:DescribeInstanceTypes", "ssm:DescribeInstanceInformation", "ssm:ListInventoryEntries", "ssm:GetInventory", "ssm:SendCommand", "s3:GetObject", "s3:DeleteObject", "tag:GetResources", "iam:CreateAccessKey", "iam:DeleteAccessKey" ], "Resource": "*", "Effect": "Allow", "Sid": "ServiceNowUserReadOnlyAccess" }, { "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ssm:*:*:document/SG-AWS-RunShellScript", "arn:aws:ssm:*:*:document/SG-AWS-RunPowerShellScript" ], "Effect": "Allow", "Sid": "SendCommandAccess" }, { "Action": [ "s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::servicenow-INSERT_YOUR_S3_BUCKET_NAME-us-east-2/*" ], "Effect": "Allow", "Sid": "S3BucketAccess" } ]} Trust Relationship Trust Relationship は、この特定のロールを誰が呼び出せるかを指定します。このケースでは、管理アカウント内の任意の principal にスコープされています。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::900******122:root" }, "Action": "sts:AssumeRole" } ]} デバッグに関する注意 : 特定のアカウントから CI 情報を取得できない場合は、そのアカウントに Role (SnowOrganizationAccountAccessRole) と Policy (SnowOrganizationAccountAccesPolicy) が存在するか確認してください。 指定アカウントと管理アカウントに関する注意 : 上記のセットアップは、管理アカウントで snow.user をセットアップすることを前提としています。指定メンバーアカウントでセットアップする場合は少し異なります。その場合は次を実施してください。 メンバーアカウントで snow.user を作成する管理アカウントで IAM Role (SnowOrganizationAccountAccessRole) と Policy (SnowOrganizationAccountAccesPolicy) を設定するその後、指定アカウントで作成した snow.user が管理アカウント内の IAM ロールを AssumeRole できるように Trust Relationship を作成する 4.S3 バケット:インスタンスプロファイルとバケットポリシー SSM-SendCommand および EKS-Full データソースは、データの保存および取得に S3 バケットを利用します。このバケットへのアクセスも制限したいと考えています。 この詳細ディスカバリー データを収集している EC2 マシンがあり、それらの特定のマシンだけがバケットに対して書き込み (またはその他の操作) を実行できるようにしたいと考えています。そのため、ロール (instance-profile) が EC2 マシンにアタッチされます。 ご覧のとおり、他のロールと同様に、このロールにもポリシーと Trust Relationship があります。ポリシー (以下に示す) は、principal がポリシーで指定された S3 バケットに対して PutObject、GetObject、および PutObjectAcl を実行できるようにします。 また、このロールをどのエンティティが引き受けることができるかを指定する Trust Relationship が設定されています。これは、EC2 マシンのみがこのロールを引き受けることができる信頼されたエンティティであることを意味します。 バケットポリシー S3 バケットも保護されています。どの instance-profile がそれらに対して任意のアクションを実行できるかをバケット内で指定します。サンプルを以下に示します。 関連記事: ServiceNow 1.AWS のサービスグラフコネクタ:概要 2.AWS のサービスグラフコネクタ:診断ツールと問題のトラブルシューティング 3.AWS のサービスグラフコネクタ:FAQ AWS 1.AWS IAM ID https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html 2.AWS STS AssumeRole https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } これは網羅的なリストではありません。このコネクタが動作するために必要な最小構成について説明しています。さらに多くのドキュメントおよびガイドを今後提供する予定です。