他の AWS アカウントのユーザーが Amazon S3 バケットにアクセスする際、MFA を使用するように要求するにはどうすればよいですか?

最終更新日: 2022 年 1 月 20 日

他のユーザーが私の Amazon Simple Storage Service (Amazon S3) バケットにアクセスする際に、多要素認証 (MFA) デバイスを使用するよう要求したいと考えています。これはどのように実行できますか?

解決方法

他の AWS アカウントのユーザーに MFA デバイスによる認証を要求する MFA 関連の条件をバケットポリシーに追加します。

開始する前に、他の AWS アカウントのユーザーが以下の前提条件を満たしている必要があります。

  • Amazon S3 にアクセスするためのアクセス許可が付与されていること。たとえば、AWS 管理ポリシー (AmazonS3FullAccess) が AWS Identity and Access Management (IAM) ポリシーに含まれている場合、ユーザーはこの要件を満たしています。
  • GetSessionToken を呼び出すことを許可する IAM ポリシーがアタッチされていること。
  • IAM ID で使用するようにデバイスが設定されていること。

次に、aws:MultiFactorAuthPresent 条件、または aws:MultiFactorAuthAge 条件を使用するバケットポリシーを作成します。これらの条件によって、ユーザーが MFA デバイスを使用して認証したかどうかを判断します。

例えば、MFA デバイスを使用して認証しない限り、特定のアクションの実行を拒否するとします。バケットポリシーは、以下の 2 つの部分に記述することができます。

1.    1 つ目の部分では、次のように、ユーザーが MFA を使用して認証しない場合にこのアクションを明示的に拒否します (条件 "aws:MultiFactorAuthPresent": "false" となっている)。

{
    "Version": "2012-10-17",
    "Id": "Policy201612130001aa",
    "Statement": [
        {
            "Sid": "Stmt201612130001ab",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::example.accounta.bucket/*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        },
...

この例では、s3: PutObject、s3: PutObjectAcl、および s3: DeleteObject の各アクションをユーザーが実行できないようにしています。

2.    ポリシーの 2 つ目の部分では、ユーザーが MFA を使用して認証する場合にこのアクションを明示的に許可します (条件 "aws:MultiFactorAuthPresent": "false" となっていない)。

...
        {
            "Sid": "Stmt201612130001ac",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::example.accounta.bucket",
                "arn:aws:s3:::example.accounta.bucket/*"
            ]
        }
    ]
}

同様のバケットポリシーをバケットに追加すると、ユーザーは get-session-token AWS Command Line Interface (AWS CLI) コマンドを実行できます。get-session-token コマンドは、バケット内のリソースにアクセスするために必要な認証情報を取得します。このコマンドを実行する際、ユーザーは以下を指定する必要があります。

  • MFA デバイスで生成された一時的なコード
  • デバイスのシリアル番号 (ハードウェア MFA デバイスの場合)、または Amazon リソースネーム (ARN) (ソフトウェア MFA デバイスの場合)。

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

認証情報を取得する別のオプションとして、ユーザーは、一時的な認証情報を環境変数としてエクスポートすることができます。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?