2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSとSAMLを使用して自社IDPでSSOに関するメモ

Posted at

やりたいこと

自社既存のIDP(Identity Provider)でシングルサインオンし、AWSのリソース(S3とか)へアクセスしたい

①、既存のIDPでIDとパスで認証
②、OKな場合、IDPがSAMLアサーションを返す
③、SAMLアサーションをAWS(Service Provider)に送信、(AssumeRoleWithSAMLのAPI呼び出し)
④、AWSのSTSがアサーションを検証し、OKな場合はロールを付与
⑤、ユーザーがリソースにアクセス

image.png

必要な設定

・IAMロールの作成:信頼されたエンティティタイプとして「SAML 2.0 フェデレーション」を選択、ユーザーが必要とする権限(例:EC2、S3など)に応じたポリシーを付与

・SAMLプロバイダーの作成:「プロバイダーの種類」として「SAML」を選択、自社IDPのSAMLメタデータをアップロード

image.png

・IDP側の設定:SAMLアサーション内の属性設定(AWS IAMロールのARNとSAMLプロバイダーのARNを指定)

AssumeRoleWithSAMLとは

AWSのSTS(Security Token Service)で提供されるAPIの1つで、SAML認証を使用して一時的なセキュリティクレデンシャルを取得し、AWSリソースへのアクセスを許可するために使われます。
このAPIは、IDプロバイダー(IdP)によって発行されたSAMLアサーションを受け取り、指定されたIAMロールに対して一時的なアクセスを付与します。

AssumeRoleWithSAML API呼び出しには、以下の主なパラメータが必要です。

・RoleArn (必須):
ユーザーが一時的に引き受けるIAMロールのARN(Amazon Resource Name)。
例: arn:aws:iam::123456789012:role/SAMLRole

・PrincipalArn (必須):
SAMLプロバイダーのARN。これは、AWS IAMに設定されたSAMLプロバイダーを指します。
例: arn:aws:iam::123456789012:saml-provider/YourProviderName

・SAMLAssertion (必須):
IDプロバイダーから取得したSAMLアサーションをBase64エンコードしたもの。このアサーションには、ユーザーの属性や権限が含まれます。

・Policy (任意):
このAPI呼び出しによって付与されるアクセス権限を制限するIAMポリシー(JSON形式)。これにより、ロールが持つポリシーに追加の制約をかけることができます。

・DurationSeconds (任意):
セッションの有効期間(秒)。最短900秒(15分)から最長43200秒(12時間)まで設定可能。デフォルトは3600秒(1時間)。

実装イメージ

import boto3

# STSクライアントを作成
sts_client = boto3.client('sts')

# AssumeRoleWithSAMLを呼び出し
response = sts_client.assume_role_with_saml(
    RoleArn='arn:aws:iam::123456789012:role/SAMLRole',
    PrincipalArn='arn:aws:iam::123456789012:saml-provider/YourProviderName',
    SAMLAssertion='Base64EncodedSAMLAssertion',
    DurationSeconds=3600
)

# 一時的なクレデンシャルの取得
credentials = response['Credentials']

print("AccessKeyId: ", credentials['AccessKeyId'])
print("SecretAccessKey: ", credentials['SecretAccessKey'])
print("SessionToken: ", credentials['SessionToken'])


参考サイト

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?