PowerShellを活用してAWS IAMのSAMLプロバイダを追加しシングルサインオンを強化する方法

AWS環境でのアクセス管理は、セキュリティと利便性の両面で重要な課題です。特に、大規模な組織では多数のユーザーがAWSリソースにアクセスするため、シングルサインオン(SSO)を導入することで、管理の簡素化とセキュリティの強化が可能になります。

SSOの実装には、Security Assertion Markup Language(SAML) を活用するのが一般的です。SAMLを利用すると、既存のIDプロバイダ(IdP)を使ってAWSのIAM(Identity and Access Management)にシームレスにログインできるようになります。本記事では、PowerShellを活用してAWS IAMにSAMLプロバイダを追加し、SSOを強化する方法 を解説します。

本記事を通じて、次の内容を学ぶことができます:

  • SAML認証の基本概念とAWS IAMとの統合方法
  • PowerShellを使ったAWS IAMの操作準備
  • PowerShellによるSAMLプロバイダの追加・管理
  • IAMロールとSAMLプロバイダの関連付け
  • 認証テストとトラブルシューティングの方法

これにより、手動操作を減らし、よりセキュアで効率的なAWS環境を構築できるようになります。次のセクションでは、AWS IAMにおけるSAML認証の概要について解説します。

目次

AWS IAMにおけるSAML認証とは


AWS Identity and Access Management(IAM)は、AWSのリソースへのアクセス管理を行うためのサービスです。IAMを活用することで、ユーザーの認証と権限管理を統合的に制御できます。その中でも、Security Assertion Markup Language(SAML) を使用したシングルサインオン(SSO)は、既存のIDプロバイダ(IdP)を活用しながらAWS環境へのアクセスを簡素化する方法の一つです。

SAML認証の基本概念


SAML(Security Assertion Markup Language)は、異なるドメイン間で認証情報を安全にやり取りするための標準プロトコルです。AWS IAMにおけるSAML認証では、企業や組織が既に使用しているIdP(Identity Provider) を活用し、AWSへのアクセスを統合管理できます。

SAML認証の仕組み


SAML認証の基本的な流れは次のようになります:

  1. ユーザーがIdP(例:Azure AD、Okta、Google Workspaceなど)にサインイン
  2. IdPが認証情報(SAMLアサーション)を発行
  3. SAMLアサーションがAWS IAMに送信される
  4. IAMがアサーションを検証し、適切な権限でAWSにログイン

このように、ユーザーはAWS専用の認証情報を持たなくても、IdPの認証情報を利用してAWSへアクセスできるようになります。

IAMにおけるSAML統合のメリット


AWS IAMでSAML認証を利用することには、以下のメリットがあります。

  • シングルサインオン(SSO)を実現
  • ユーザーは一度のログインでAWSを含む複数のサービスにアクセス可能
  • セキュリティの強化
  • 認証情報をAWS側で管理しないため、パスワード漏洩のリスクを軽減
  • IDプロバイダと統合した管理が可能
  • 既存のActive DirectoryやクラウドIdP(Okta、Google Workspaceなど)と統合できる
  • アクセス管理の一元化
  • IAMロールと組み合わせることで、特定のAWSリソースへのアクセスを制御可能

次のセクションでは、AWS IAMにおけるSAMLプロバイダの役割について詳しく解説します。

AWS環境でのSAMLプロバイダの役割

AWS IAMにおけるSAMLプロバイダは、AWSアカウントと外部のIDプロバイダ(IdP)を統合するための仕組みです。SAMLプロバイダを設定することで、AWS IAMロールをSAML認証を通じてユーザーに割り当て、シングルサインオン(SSO)を実現できます。

SAMLプロバイダの仕組み

SAMLプロバイダは、IdPから送信されるSAMLアサーション(認証情報)をAWSが受け取るための仲介役を担います。AWS環境でSAML認証を実施するには、以下の3つの要素が必要です:

  1. SAMLプロバイダの設定(AWS IAM)
  • 外部IdP(Azure AD、Okta、Google Workspaceなど)をAWSに登録
  • SAMLメタデータをAWS IAMにアップロード
  1. IAMロールの作成とSAMLプロバイダとの紐づけ
  • IdPが認証したユーザーに適切なIAMロールを割り当て
  • ロールに応じたアクセス権限を付与
  1. ユーザーのSAML認証プロセス
  • IdPで認証後、SAMLアサーションをAWSに送信
  • AWSがアサーションを検証し、適切なIAMロールを付与
  • ユーザーはAWSコンソールまたはCLIでアクセス可能

なぜSAMLプロバイダを活用するのか?

AWS IAMでSAMLプロバイダを利用することで、以下のような利点があります。

  • ユーザー管理の一元化
  • 企業の既存IdPを活用し、AWSのユーザー管理を統合できる
  • Active DirectoryやOktaなどと連携し、ユーザーごとのAWSアカウントを不要に
  • セキュリティの向上
  • AWS側でユーザー認証情報を直接管理しないため、パスワード漏洩リスクを軽減
  • 多要素認証(MFA)を既存のIdPに統合できる
  • アクセス管理の柔軟性
  • IAMロールを活用することで、ユーザーごとに異なる権限を動的に適用可能
  • 短期間のアクセス権付与(セッションベース)で、不要な長期アクセスを防止

どのようなシナリオで使われるのか?

AWS IAMのSAMLプロバイダは、次のようなユースケースで特に有効です。

  • 企業のシングルサインオン(SSO)
  • 社内の認証システム(Azure AD、Okta)を利用して、AWSへの統合ログインを提供
  • 一時的なAWSアクセスの管理
  • 外部パートナーや契約社員に限定的なAWSアクセスを許可し、期間が終了したら自動的にアクセスを無効化
  • マルチアカウント環境での統合管理
  • AWS Organizationsを活用し、複数のAWSアカウントをSAML経由で管理

次のセクションでは、PowerShellを使用してAWS IAMを操作する準備について詳しく解説します。

PowerShellを使ったAWS IAMの操作準備

AWS IAMのSAMLプロバイダをPowerShellで管理するためには、適切な環境を準備する必要があります。本セクションでは、AWS Tools for PowerShellのインストールから認証情報の設定までの手順を解説します。

AWS Tools for PowerShellのインストール

AWSをPowerShellで操作するためには、AWS Tools for PowerShell をインストールする必要があります。以下の手順でセットアップを行います。

1. PowerShellのバージョン確認


まず、PowerShellのバージョンを確認し、最新版を使用していることを確認します。

$PSVersionTable.PSVersion

PowerShell 5.1以上、またはPowerShell Core(7.0以上)が推奨されます。

2. AWS Tools for PowerShellのインストール


次に、AWS Tools for PowerShellをインストールします。

Windows環境の場合:

Install-Module -Name AWS.Tools.Installer -Scope CurrentUser
Install-AWSToolsModule AWS.Tools.IAM -Force

macOS/Linux環境の場合(PowerShell Coreを使用):

Install-Module -Name AWS.Tools.Installer -Scope CurrentUser
Install-AWSToolsModule AWS.Tools.IAM -Force

インストールが完了したら、次のコマンドで正しくインストールされたか確認します。

Get-AWSPowerShellVersion

AWS CLIの認証情報設定

PowerShellでAWSを操作するには、認証情報を設定する必要があります。以下の方法でAWSアクセスキーを設定できます。

1. AWS 認証情報を手動設定


以下のコマンドを実行し、アクセスキーとシークレットキーを設定します。

Set-AWSCredential -AccessKey "YOUR_ACCESS_KEY" -SecretKey "YOUR_SECRET_KEY" -StoreAs default

この設定は、PowerShellセッションをまたいで使用できるようになります。

2. AWSプロファイルを設定する(推奨)


AWS CLIを使用してプロファイルを設定する方法もあります。

aws configure

入力を求められるので、アクセスキー、シークレットキー、デフォルトリージョンを入力します。

IAMの権限を確認

PowerShellでIAMを管理するために、適切な権限が付与されているかを確認します。SAMLプロバイダの追加には、以下のポリシーが必要です。

IAMユーザーまたはロールに次のIAMポリシーをアタッチしてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateSAMLProvider",
                "iam:UpdateSAMLProvider",
                "iam:DeleteSAMLProvider",
                "iam:GetSAMLProvider"
            ],
            "Resource": "*"
        }
    ]
}

IAM管理者権限がある場合、この手順は不要ですが、最小権限の原則に従い、必要な権限のみを付与するのが望ましいです。

接続テスト

設定が完了したら、PowerShellからAWSに接続できるかテストします。

Get-IAMUser

現在のIAMユーザー情報が返ってくれば、PowerShellとAWSの連携が成功しています。

次のセクションでは、PowerShellを使用してSAMLプロバイダをAWS IAMに追加する方法を解説します。

PowerShellでSAMLプロバイダを追加する手順

AWS IAMにSAMLプロバイダを追加することで、外部のIdP(Azure AD、Okta、Google Workspaceなど)と連携し、AWSのシングルサインオン(SSO)を実現できます。本セクションでは、PowerShellを使用してSAMLプロバイダを追加する手順を詳しく解説します。

1. SAMLメタデータXMLの準備

SAMLプロバイダをAWS IAMに登録するには、IdPから取得したSAMLメタデータ(XMLファイル)が必要です。IdPの管理画面でSAMLメタデータをエクスポートし、ローカルPCに保存します。

例:C:\temp\saml-metadata.xml

2. SAMLプロバイダを作成する

次のPowerShellコマンドを使用して、SAMLプロバイダを作成します。

$SAMLMetadataDocument = Get-Content -Raw "C:\temp\saml-metadata.xml"
$ProviderName = "MySAMLProvider"

New-IAMSAMLProvider -Name $ProviderName -SAMLMetadataDocument $SAMLMetadataDocument

このコマンドは以下の処理を行います:

  • Get-Content -Raw "C:\temp\saml-metadata.xml" でメタデータXMLを読み込む
  • New-IAMSAMLProvider コマンドでAWS IAMにSAMLプロバイダを作成

正常に実行されると、作成されたSAMLプロバイダのARN(Amazon Resource Name)が返されます。

Arn       : arn:aws:iam::123456789012:saml-provider/MySAMLProvider
CreateDate: 2025-02-10T12:00:00Z

このARNは、IAMロールとSAMLプロバイダを関連付ける際に使用します。

3. SAMLプロバイダが正しく登録されたか確認

次のコマンドを実行し、登録されたSAMLプロバイダの一覧を確認します。

Get-IAMSAMLProviderList

出力例:

Arn
--------------------------------------------------------------
arn:aws:iam::123456789012:saml-provider/MySAMLProvider

登録したプロバイダが一覧に表示されていれば、正常に作成されています。

4. IAMロールとSAMLプロバイダの関連付け

SAMLプロバイダを作成した後、IAMロールと関連付けることで、SAML認証を通じたアクセスが可能になります。以下の手順でIAMロールを作成し、SAMLプロバイダと紐づけます。

  1. IAMロール作成用の信頼ポリシーJSONを作成

IAMロールを作成するには、SAMLプロバイダを信頼するポリシーが必要です。以下のJSONを作成します(ファイル名例:C:\temp\trust-policy.json)。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::123456789012:saml-provider/MySAMLProvider"
            },
            "Action": "sts:AssumeRoleWithSAML",
            "Condition": {
                "StringEquals": {
                    "SAML:aud": "https://signin.aws.amazon.com/saml"
                }
            }
        }
    ]
}

このポリシーは、作成したSAMLプロバイダのみがこのIAMロールを利用できるよう制御します。

  1. IAMロールを作成する

次のPowerShellコマンドを実行し、IAMロールを作成します。

$TrustPolicy = Get-Content -Raw "C:\temp\trust-policy.json"
$RoleName = "SAMLAccessRole"

New-IAMRole -RoleName $RoleName -AssumeRolePolicyDocument $TrustPolicy

正常に作成されると、IAMロールのARNが出力されます。

Arn       : arn:aws:iam::123456789012:role/SAMLAccessRole

これで、SAMLプロバイダとIAMロールの関連付けが完了しました。

5. 必要なアクセス権限をIAMロールに付与

SAMLを使用してログインするユーザーに適切なAWSリソースへのアクセス権限を付与するため、IAMポリシーをロールにアタッチします。

たとえば、S3バケットの読み取り専用権限を付与する場合:

Attach-IAMRolePolicy -RoleName $RoleName -PolicyArn "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"

この操作により、SAML経由でログインしたユーザーはS3バケットを閲覧できるようになります。

6. SAML認証の設定をテスト

ここまでの設定が完了したら、実際にSAML認証を試してみます。IdP側でAWSのSAMLアサーションを発行し、ログインが成功するかを確認してください。

次のセクションでは、SAMLプロバイダの更新と管理方法 について解説します。

SAMLプロバイダの更新と管理方法

AWS IAMのSAMLプロバイダは、時間の経過とともに更新が必要になる場合があります。例えば、IdP(Identity Provider)のメタデータが変更された場合 や、不要になったSAMLプロバイダを削除する場合 です。本セクションでは、PowerShellを使ってSAMLプロバイダを更新・削除する方法を解説します。

1. SAMLプロバイダのメタデータを更新

IdP側でメタデータが更新された場合、AWS IAMのSAMLプロバイダも最新のメタデータに更新する必要があります。以下の手順で、SAMLプロバイダの更新を行います。

① 最新のSAMLメタデータを取得

IdP(Azure AD、Okta、Google Workspace など)から、新しいSAMLメタデータXMLを取得し、ローカルPCに保存します。

例:C:\temp\updated-saml-metadata.xml

② PowerShellでSAMLプロバイダを更新

以下のコマンドを実行し、SAMLプロバイダのメタデータを更新します。

$UpdatedSAMLMetadata = Get-Content -Raw "C:\temp\updated-saml-metadata.xml"
$ProviderName = "MySAMLProvider"

Update-IAMSAMLProvider -SAMLProviderArn "arn:aws:iam::123456789012:saml-provider/$ProviderName" -SAMLMetadataDocument $UpdatedSAMLMetadata

このコマンドは以下を実行します:

  • Get-Content -Raw で新しいSAMLメタデータを取得
  • Update-IAMSAMLProvider でIAMのSAMLプロバイダを最新情報に更新

成功すると、新しいメタデータがIAMに反映されます。

2. 既存のSAMLプロバイダの情報を取得

登録されているSAMLプロバイダの詳細を確認するには、以下のコマンドを実行します。

Get-IAMSAMLProvider -SAMLProviderArn "arn:aws:iam::123456789012:saml-provider/MySAMLProvider"

出力例:

SAMLProviderArn : arn:aws:iam::123456789012:saml-provider/MySAMLProvider
CreateDate      : 2023-01-15T12:00:00Z
ValidUntil      : 2025-01-15T12:00:00Z

ValidUntil の日付が過去になっている場合、メタデータの更新が必要な可能性があります。

3. 不要なSAMLプロバイダの削除

SAMLプロバイダが不要になった場合、削除することも可能です。ただし、関連するIAMロールがある場合は、先にロールの設定を変更する必要があります。

① SAMLプロバイダを削除

次のコマンドを実行し、SAMLプロバイダを削除します。

Remove-IAMSAMLProvider -SAMLProviderArn "arn:aws:iam::123456789012:saml-provider/MySAMLProvider"

実行後に確認プロンプトが表示される場合は、「Y」を押して続行します。

② SAMLプロバイダが削除されたか確認

Get-IAMSAMLProviderList

削除したプロバイダが一覧に表示されていなければ、正常に削除されています。

4. SAMLプロバイダ更新後の動作確認

SAMLプロバイダのメタデータを更新した場合、SAML認証のテストを実施することが重要 です。以下の手順で動作確認を行います。

  1. IdPにログインし、AWSのSAMLアサーションを取得する
  2. AWSマネジメントコンソールにSAML経由でログインできるか確認する
  3. AWS CLIやPowerShellを使って、SAML認証をテストする

PowerShellを使用して、SAML認証のテストを行う方法については、次のセクションで詳しく解説します。

IAMロールとSAMLプロバイダの関連付け

SAMLプロバイダをAWS IAMに追加した後、SAML認証を使用してAWSにアクセスするためにはIAMロールとの関連付けが必要です。IAMロールを適切に設定することで、SAML認証を通じてAWSリソースへのアクセスを制御できます。

本セクションでは、IAMロールの作成、SAMLプロバイダとの関連付け、ロールのポリシー設定について解説します。


1. IAMロールの作成

IAMロールは、SAML認証を通じてAWSリソースへのアクセス権を付与するためのものです。以下の手順でSAMLプロバイダと関連付けたIAMロールを作成します。

① IAMロール用の信頼ポリシー(Trust Policy)の作成

IAMロールを作成するには、信頼ポリシー(AWSがこのロールをSAMLプロバイダ経由で使用することを許可する設定)が必要です。次のJSONを作成し、ローカルに保存します。

例:C:\temp\trust-policy.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::123456789012:saml-provider/MySAMLProvider"
            },
            "Action": "sts:AssumeRoleWithSAML",
            "Condition": {
                "StringEquals": {
                    "SAML:aud": "https://signin.aws.amazon.com/saml"
                }
            }
        }
    ]
}
  • "Principal" の "Federated" には、作成したSAMLプロバイダのARNを指定します。
  • "SAML:aud" は AWS のSAML認証用URL(https://signin.aws.amazon.com/saml)を指定します。

② PowerShellでIAMロールを作成

次のコマンドを実行し、SAML認証用のIAMロールを作成します。

$TrustPolicy = Get-Content -Raw "C:\temp\trust-policy.json"
$RoleName = "SAMLAccessRole"

New-IAMRole -RoleName $RoleName -AssumeRolePolicyDocument $TrustPolicy

成功すると、IAMロールのARNが返されます。

Arn       : arn:aws:iam::123456789012:role/SAMLAccessRole

2. IAMロールにアクセス権限を付与

IAMロールを作成しただけでは、まだAWSリソースへのアクセスは許可されていません。必要なアクセス権限をIAMロールに付与します。

① 必要なIAMポリシーをロールにアタッチ

例えば、S3バケットの読み取り専用権限を付与する場合:

Attach-IAMRolePolicy -RoleName $RoleName -PolicyArn "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"

このコマンドを実行すると、SAML認証を通じてAWSにログインしたユーザーはS3バケットのデータを閲覧できるようになります。


3. IAMロールの設定を確認

正しくIAMロールが作成され、適切なポリシーが付与されているかを確認するには、次のコマンドを使用します。

Get-IAMRole -RoleName $RoleName

出力例:

RoleName  : SAMLAccessRole
Arn       : arn:aws:iam::123456789012:role/SAMLAccessRole
CreateDate: 2025-02-10T12:00:00Z

また、ロールにアタッチされたポリシーを確認するには、以下のコマンドを実行します。

Get-IAMRolePolicyList -RoleName $RoleName

出力例:

PolicyNames
------------
AmazonS3ReadOnlyAccess

ポリシーが正しく付与されていることを確認してください。


4. SAMLプロバイダとIAMロールのマッピング

最後に、SAMLプロバイダとIAMロールを関連付けるために、IdP(Azure AD、Okta など)のSAMLアサーション内で Role 属性を設定する必要があります。

SAMLアサーションのRole属性のフォーマット:

<Attribute Name="https://aws.amazon.com/SAML/Attributes/Role">
  <AttributeValue>arn:aws:iam::123456789012:role/SAMLAccessRole,arn:aws:iam::123456789012:saml-provider/MySAMLProvider</AttributeValue>
</Attribute>

この属性をIdPのSAMLアサーションに設定することで、SAML認証を行うユーザーにIAMロールが適用されます。


5. 動作確認

ここまでの設定が完了したら、SAML認証を通じてIAMロールが正しく適用されるかテストします。

  1. IdP側でAWSのSAML認証を設定(Azure AD、Okta、Google Workspace など)
  2. ユーザーがIdPにログインし、AWSのSAML認証を実行
  3. AWSマネジメントコンソールにSSOでアクセスできるか確認
  4. AWS CLIまたはPowerShellでSTS認証を確認

PowerShellでSAML認証が機能しているかを確認する場合、次のコマンドを使用します。

Get-STSCallerIdentity

出力例:

UserId    : AIDAEXAMPLEUSER
Account   : 123456789012
Arn       : arn:aws:sts::123456789012:assumed-role/SAMLAccessRole/AWSReservedSSO_SAMLUser

IAMロール (SAMLAccessRole) が適用されていれば、SAML認証が正しく機能しています。


まとめ

本セクションでは、PowerShellを使用してIAMロールを作成し、SAMLプロバイダと関連付ける方法 を解説しました。ポイントをまとめると:

✅ IAMロールを作成し、SAMLプロバイダを信頼する信頼ポリシーを設定
✅ IAMロールに適切なアクセス権限を付与
✅ SAMLアサーション内でIAMロールを指定して関連付け
✅ PowerShellで設定を確認し、動作テスト

次のセクションでは、PowerShellを使ってSAML認証の動作をテストする方法 を解説します。

PowerShellでSAML認証をテストする方法

SAMLプロバイダとIAMロールを設定した後、適切に機能するかどうかテストを行うことが重要です。本セクションでは、PowerShellを使用してSAML認証を検証し、AWSへのアクセスを確認する方法を解説します。


1. SAML認証情報を取得する

SAML認証のテストでは、IdP(Azure AD、Okta、Google Workspace など)からSAMLアサーションを取得し、それをAWSに送信して一時的な認証情報(STSトークン)を取得します。

① SAMLアサーションの取得

SAML認証の設定によって、SAMLアサーションの取得方法は異なります。
通常は、IdPの管理画面でAWSログイン用のSAMLアサーションをダウンロードできます。

また、一部のIdPでは、専用のURLを使用してSAMLアサーションを取得できます。
(例:Oktaの場合、https://<okta_domain>/app/aws/<app_id>/sso/saml など)

取得したSAMLアサーション(Base64エンコードされたXML)を、PowerShellを使用してAWSに送信します。


2. SAMLアサーションを使ってSTS認証を取得

PowerShellで、取得したSAMLアサーションをAWS STS(Security Token Service)に送信し、一時的な認証情報を取得します。

① SAMLアサーションの格納

SAMLアサーション(Base64エンコードされたXML)を変数に格納します。

$SAMLAssertion = Get-Content -Raw "C:\temp\saml-assertion.xml"

※ SAMLアサーションを手動で取得し、適切なパスに保存しておく必要があります。

② STSでSAML認証を実行

以下のコマンドを実行し、IAMロールを使用した一時的な認証情報を取得します。

$RoleArn = "arn:aws:iam::123456789012:role/SAMLAccessRole"
$PrincipalArn = "arn:aws:iam::123456789012:saml-provider/MySAMLProvider"

$STSResponse = Request-STSAssumeRoleWithSAML -RoleArn $RoleArn -PrincipalArn $PrincipalArn -SAMLAssertion $SAMLAssertion

このコマンドが成功すると、一時的な認証情報(AccessKey、SecretKey、SessionToken)が返されます。

AssumedRoleUser     : SAMLAccessRole/AWSReservedSSO_SAMLUser
Credentials         : Amazon.Runtime.ImmutableCredentials
    AccessKeyId     : ASIAEXAMPLE12345
    SecretAccessKey : xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    SessionToken    : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Expiration          : 2025-02-10T15:00:00Z

この一時的な認証情報を使用してAWSリソースにアクセスできます。


3. 一時的な認証情報を使用してAWSにアクセス

取得したSTS認証情報をPowerShellセッションに適用し、AWSリソースへのアクセスをテストします。

① PowerShellセッションに一時的な認証情報を適用

Set-AWSCredential -AccessKey $STSResponse.Credentials.AccessKeyId `
                   -SecretKey $STSResponse.Credentials.SecretAccessKey `
                   -SessionToken $STSResponse.Credentials.SessionToken

このコマンドを実行すると、PowerShellセッションがSAML認証の一時的な認証情報を使用するようになります。

② AWSリソースへのアクセスを確認

例えば、S3バケットの一覧を取得して、アクセスできるか確認します。

Get-S3Bucket

成功すると、S3バケットの一覧が表示されます。

BucketName          CreationDate
------------------- -------------------
my-example-bucket   2024-01-15T10:30:00Z

エラーが発生する場合は、IAMロールのポリシーやSAMLプロバイダの設定を確認してください。


4. 認証情報の有効期限と再取得

SAMLを使用したSTS認証の一時的な認証情報は、デフォルトで 1時間(最大12時間) で有効期限が切れます。
有効期限を確認するには、次のコマンドを実行します。

$STSResponse.Credentials.Expiration

出力例:

2025-02-10T15:00:00Z

この時間を過ぎると、再度SAMLアサーションを取得し、STS認証をやり直す必要があります。


5. エラー発生時の確認ポイント

SAML認証でAWSにログインできない場合は、次の項目を確認してください。

✅ SAMLアサーションの取得が正しいか?
→ Base64エンコードされたSAMLアサーションが正しく取得されているか確認

✅ IAMロールとSAMLプロバイダのARNが正しく設定されているか?
→ arn:aws:iam::123456789012:role/SAMLAccessRole
→ arn:aws:iam::123456789012:saml-provider/MySAMLProvider

✅ IAMロールのポリシーが適切か?
→ Get-IAMRolePolicyList -RoleName SAMLAccessRole でポリシーを確認

✅ STSがSAML認証を正しく受け付けているか?
→ Request-STSAssumeRoleWithSAML のレスポンスをチェック

✅ AWSリソースに適切なアクセス権限があるか?
→ Attach-IAMRolePolicy で必要なポリシーを付与


まとめ

本セクションでは、PowerShellを使用してSAML認証のテストを行う方法を解説しました。ポイントをまとめると:

✅ SAMLアサーションを取得し、PowerShellに読み込む
✅ STS API を使用して一時的な認証情報を取得
✅ 取得した認証情報を使用してAWSリソースへアクセス
✅ 認証情報の有効期限を確認し、必要に応じて再取得
✅ エラーが発生した場合は設定を見直し、問題を特定

次のセクションでは、SAML認証のトラブルシューティングとよくあるエラーの解決方法について解説します。

トラブルシューティングとよくあるエラー

SAML認証を使用してAWS IAMにアクセスする際、設定ミスや環境の違いによってエラーが発生することがあります。本セクションでは、よくあるエラーの原因とその解決方法について解説します。


1. SAMLプロバイダの登録エラー

エラー例:

An error occurred (InvalidInput) when calling the CreateSAMLProvider operation: The SAML metadata document is invalid.

原因:

✅ SAMLメタデータXMLのフォーマットが正しくない
✅ メタデータファイルのエンコーディングがUTF-8でない
✅ メタデータの証明書が失効している

解決策:

  1. SAMLメタデータのフォーマットを確認
  • XMLが正しく閉じられているか確認(例:開いたタグに対する閉じタグがあるか)
  1. PowerShellでUTF-8エンコーディングを適用してアップロード
   $SAMLMetadata = Get-Content -Raw -Encoding UTF8 "C:\temp\saml-metadata.xml"
   New-IAMSAMLProvider -Name "MySAMLProvider" -SAMLMetadataDocument $SAMLMetadata
  1. IdPの管理画面で最新のSAMLメタデータをダウンロードし直す

2. STS認証の失敗(AssumeRoleWithSAMLエラー)

エラー例:

An error occurred (AccessDenied) when calling the AssumeRoleWithSAML operation: 
User is not authorized to perform: sts:AssumeRoleWithSAML

原因:

✅ IAMロールの信頼ポリシーが正しく設定されていない
✅ SAMLアサーションのフォーマットが間違っている
✅ IAMロールのARNとSAMLプロバイダのARNが一致していない

解決策:

  1. IAMロールの信頼ポリシーを確認
    次のコマンドを実行し、正しく設定されているかチェック。
   Get-IAMRole -RoleName "SAMLAccessRole"

必要なポリシーが適用されているか確認する。

  1. 信頼ポリシー(Trust Policy)を正しく設定する
    C:\temp\trust-policy.json を開いて、"Principal.Federated" に正しいSAMLプロバイダのARNが指定されているか確認。
   {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Federated": "arn:aws:iam::123456789012:saml-provider/MySAMLProvider"
               },
               "Action": "sts:AssumeRoleWithSAML",
               "Condition": {
                   "StringEquals": {
                       "SAML:aud": "https://signin.aws.amazon.com/saml"
                   }
               }
           }
       ]
   }

IAMロールのARNが間違っていないかもチェックする。

  1. SAMLアサーションの内容を確認する
    IdP側の設定を確認し、AWSのSAMLアサーションが正しく生成されているかチェック。

3. AWS CLI / PowerShell での認証情報の取得エラー

エラー例:

The security token included in the request is invalid.

原因:

✅ SAML認証の一時的な認証情報(AccessKey, SecretKey, SessionToken)が期限切れ
✅ SessionTokenをPowerShellの認証情報に設定していない

解決策:

  1. 認証情報の有効期限を確認
   $STSResponse.Credentials.Expiration

出力された日時が過去の場合、新しい認証情報を取得する必要がある。

  1. AWS CLI/PowerShellに正しく認証情報を設定する
   Set-AWSCredential -AccessKey $STSResponse.Credentials.AccessKeyId `
                      -SecretKey $STSResponse.Credentials.SecretAccessKey `
                      -SessionToken $STSResponse.Credentials.SessionToken

注意: SessionToken を設定しないと認証エラーになるので、必ず指定すること。


4. S3などのAWSリソースへのアクセス拒否

エラー例:

An error occurred (AccessDenied) when calling the ListBuckets operation:
User: arn:aws:sts::123456789012:assumed-role/SAMLAccessRole/AWSReservedSSO_SAMLUser is not authorized to perform: s3:ListBucket

原因:

✅ IAMロールに適切なアクセス権限が設定されていない
✅ ポリシーが適用されていない

解決策:

  1. IAMロールにポリシーが適用されているか確認
   Get-IAMRolePolicyList -RoleName "SAMLAccessRole"

必要なポリシーが付与されていない場合、適用する。

  1. 適切なポリシーを付与 例えば、S3の読み取り専用権限を付与する場合:
   Attach-IAMRolePolicy -RoleName "SAMLAccessRole" -PolicyArn "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
  1. 新しいセッションでAWSに再ログインし、設定を反映 IAMポリシーの変更後は、再度SAML認証を行い、新しいSTSトークンを取得する必要がある。

まとめ

✅ SAMLプロバイダの登録エラー: メタデータXMLのフォーマットとエンコーディングを確認
✅ STS認証の失敗: IAMロールの信頼ポリシーとSAMLアサーションのフォーマットをチェック
✅ AWS CLI / PowerShell の認証情報エラー: 一時的な認証情報の有効期限と設定を確認
✅ AWSリソースへのアクセス拒否: IAMロールに適切なポリシーをアタッチ

次のセクションでは、記事のまとめ を行います。

まとめ

本記事では、PowerShellを活用してAWS IAMのSAMLプロバイダを追加し、シングルサインオン(SSO)を強化する方法について詳しく解説しました。

✅ 記事のポイント

  • SAML認証の基本概念 と AWS IAMにおける役割
  • PowerShellを使ったSAMLプロバイダの追加・管理 方法
  • IAMロールとSAMLプロバイダの関連付け の手順
  • SAML認証のテスト と AWSリソースへのアクセス確認方法
  • トラブルシューティング とよくあるエラーの解決策

適切にSAML認証を設定することで、AWS環境のセキュリティを強化しながら、ユーザー管理を簡素化 できます。特に、IdPと統合することで、シングルサインオンを実現し、AWSのアクセス管理を効率的に運用 できます。

最後に、PowerShellを使ったAWS IAMの管理をスムーズに進めるためには、最新のAWS Tools for PowerShellを利用し、適切なIAMポリシーを適用することが重要 です。設定後は必ず動作確認を行い、問題が発生した際には本記事のトラブルシューティングを参考にしてください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次